diff --git a/.gitignore b/.gitignore index f99cbf82646..bab7e80837f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,9 +6,13 @@ Thumbs.db *.dmb *.lk *.backup +*.before data/ cfg/ build_log.txt +__pycache__/ +*.py[cod] +*$py.class /.atom-build.json .vscode/ diff --git a/.travis.yml b/.travis.yml index 1d0a39687b2..43226be8bf9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,4 +43,3 @@ script: - DreamDaemon baystation12.dmb -invisible -trusted -core 2>&1 | tee log.txt - grep "All Unit Tests Passed" log.txt - (! grep "runtime error:" log.txt) - - (! grep 'Process scheduler caught exception processing' log.txt) diff --git a/baystation12.dme b/baystation12.dme index 6075a79f5fa..f9d3c089c1b 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -17,27 +17,35 @@ #include "code\stylesheet.dm" #include "code\world.dm" #include "code\__defines\_compile_options.dm" +#include "code\__defines\_layers.dm" #include "code\__defines\admin.dm" #include "code\__defines\atmos.dm" -#include "code\__defines\btime.dm" +#include "code\__defines\callback.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\damage_organs.dm" #include "code\__defines\dna.dm" #include "code\__defines\dview.dm" #include "code\__defines\gamemode.dm" +#include "code\__defines\hydroponics.dm" #include "code\__defines\items_clothing.dm" #include "code\__defines\lighting.dm" +#include "code\__defines\lists.dm" #include "code\__defines\machinery.dm" +#include "code\__defines\master_controller.dm" #include "code\__defines\math_physics.dm" #include "code\__defines\mining.dm" #include "code\__defines\misc.dm" #include "code\__defines\mobs.dm" -#include "code\__defines\process_scheduler.dm" +#include "code\__defines\qdel.dm" +#include "code\__defines\radio.dm" #include "code\__defines\regex.dm" #include "code\__defines\research.dm" #include "code\__defines\species_languages.dm" +#include "code\__defines\subsystem-defines.dm" +#include "code\__defines\subsystem-priority.dm" #include "code\__defines\targeting.dm" #include "code\__defines\turfs.dm" +#include "code\__defines\ZAS.dm" #include "code\_helpers\areas.dm" #include "code\_helpers\atmospherics.dm" #include "code\_helpers\datum_pool.dm" @@ -45,6 +53,7 @@ #include "code\_helpers\functional.dm" #include "code\_helpers\game.dm" #include "code\_helpers\global_lists.dm" +#include "code\_helpers\icon_smoothing.dm" #include "code\_helpers\icons.dm" #include "code\_helpers\items.dm" #include "code\_helpers\lists.dm" @@ -62,6 +71,9 @@ #include "code\_helpers\type2type.dm" #include "code\_helpers\unsorted.dm" #include "code\_helpers\vector.dm" +#include "code\_helpers\sorting\__main.dm" +#include "code\_helpers\sorting\cmp.dm" +#include "code\_helpers\sorting\TimSort.dm" #include "code\_onclick\adjacent.dm" #include "code\_onclick\ai.dm" #include "code\_onclick\click.dm" @@ -119,61 +131,80 @@ #include "code\ATMOSPHERICS\components\unary\unary_base.dm" #include "code\ATMOSPHERICS\components\unary\vent_pump.dm" #include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm" -#include "code\controllers\autotransfer.dm" -#include "code\controllers\communications.dm" #include "code\controllers\configuration.dm" -#include "code\controllers\emergency_shuttle_controller.dm" +#include "code\controllers\controller.dm" #include "code\controllers\hooks-defs.dm" #include "code\controllers\hooks.dm" -#include "code\controllers\law.dm" -#include "code\controllers\master_controller.dm" -#include "code\controllers\shuttle_controller.dm" -#include "code\controllers\subsystems.dm" #include "code\controllers\verbs.dm" #include "code\controllers\voting.dm" -#include "code\controllers\Processes\air.dm" -#include "code\controllers\Processes\alarm.dm" -#include "code\controllers\Processes\chemistry.dm" -#include "code\controllers\Processes\disease.dm" -#include "code\controllers\Processes\effects.dm" -#include "code\controllers\Processes\emergencyShuttle.dm" -#include "code\controllers\Processes\event.dm" -#include "code\controllers\Processes\explosives.dm" -#include "code\controllers\Processes\garbage.dm" -#include "code\controllers\Processes\inactivity.dm" -#include "code\controllers\Processes\lighting.dm" -#include "code\controllers\Processes\machinery.dm" -#include "code\controllers\Processes\mob.dm" -#include "code\controllers\Processes\modifier.dm" -#include "code\controllers\Processes\nanoui.dm" -#include "code\controllers\Processes\night_lighting.dm" -#include "code\controllers\Processes\obj.dm" -#include "code\controllers\Processes\scheduler.dm" -#include "code\controllers\Processes\Shuttle.dm" -#include "code\controllers\Processes\sun.dm" -#include "code\controllers\Processes\supply.dm" -#include "code\controllers\Processes\ticker.dm" -#include "code\controllers\Processes\turf.dm" -#include "code\controllers\Processes\vote.dm" -#include "code\controllers\Processes\wireless.dm" -#include "code\controllers\ProcessScheduler\core\_stubs.dm" -#include "code\controllers\ProcessScheduler\core\process.dm" -#include "code\controllers\ProcessScheduler\core\processScheduler.dm" +#include "code\controllers\master\admin.dm" +#include "code\controllers\master\failsafe.dm" +#include "code\controllers\master\master.dm" +#include "code\controllers\master\subsystem.dm" +#include "code\controllers\subsystems\air.dm" +#include "code\controllers\subsystems\alarm.dm" +#include "code\controllers\subsystems\arrivals.dm" +#include "code\controllers\subsystems\assets.dm" +#include "code\controllers\subsystems\chemistry.dm" +#include "code\controllers\subsystems\effects.dm" +#include "code\controllers\subsystems\emergency_shuttle.dm" +#include "code\controllers\subsystems\event.dm" +#include "code\controllers\subsystems\explosives.dm" +#include "code\controllers\subsystems\garbage-debug.dm" +#include "code\controllers\subsystems\garbage.dm" +#include "code\controllers\subsystems\icon_smooth.dm" +#include "code\controllers\subsystems\icon_updates.dm" +#include "code\controllers\subsystems\law.dm" +#include "code\controllers\subsystems\lighting.dm" +#include "code\controllers\subsystems\machinery.dm" +#include "code\controllers\subsystems\mob.dm" +#include "code\controllers\subsystems\nanoui.dm" +#include "code\controllers\subsystems\night_lighting.dm" +#include "code\controllers\subsystems\object.dm" +#include "code\controllers\subsystems\openturf.dm" +#include "code\controllers\subsystems\orbit.dm" +#include "code\controllers\subsystems\pai.dm" +#include "code\controllers\subsystems\parallax.dm" +#include "code\controllers\subsystems\radio.dm" +#include "code\controllers\subsystems\statistics.dm" +#include "code\controllers\subsystems\sun.dm" +#include "code\controllers\subsystems\supply.dm" +#include "code\controllers\subsystems\ticker.dm" +#include "code\controllers\subsystems\timer.dm" +#include "code\controllers\subsystems\vote.dm" +#include "code\controllers\subsystems\wireless.dm" +#include "code\controllers\subsystems\initialization\asteroid.dm" +#include "code\controllers\subsystems\initialization\atoms.dm" +#include "code\controllers\subsystems\initialization\misc_early.dm" +#include "code\controllers\subsystems\initialization\misc_late.dm" +#include "code\controllers\subsystems\initialization\xenoarch.dm" +#include "code\controllers\subsystems\processing\airflow.dm" +#include "code\controllers\subsystems\processing\calamity.dm" +#include "code\controllers\subsystems\processing\disease.dm" +#include "code\controllers\subsystems\processing\disposals.dm" +#include "code\controllers\subsystems\processing\fast_process.dm" +#include "code\controllers\subsystems\processing\modifiers.dm" +#include "code\controllers\subsystems\processing\overlays.dm" +#include "code\controllers\subsystems\processing\pipenet.dm" +#include "code\controllers\subsystems\processing\plants.dm" +#include "code\controllers\subsystems\processing\processing.dm" +#include "code\controllers\subsystems\processing\shuttle.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\api.dm" +#include "code\datums\beam.dm" #include "code\datums\browser.dm" +#include "code\datums\callback.dm" #include "code\datums\category.dm" #include "code\datums\computerfiles.dm" #include "code\datums\datacore.dm" #include "code\datums\discord_bot.dm" #include "code\datums\disease.dm" +#include "code\datums\feedback.dm" #include "code\datums\mind.dm" #include "code\datums\mixed.dm" #include "code\datums\modules.dm" -#include "code\datums\scheduled_task.dm" #include "code\datums\server_greeting.dm" -#include "code\datums\sun.dm" #include "code\datums\supplypacks.dm" #include "code\datums\diseases\appendicitis.dm" #include "code\datums\diseases\beesease.dm" @@ -231,6 +262,8 @@ #include "code\datums\observation\moved.dm" #include "code\datums\observation\observation.dm" #include "code\datums\observation\task_triggered.dm" +#include "code\datums\radio\frequency.dm" +#include "code\datums\radio\signal.dm" #include "code\datums\repositories\cameras.dm" #include "code\datums\repositories\crew.dm" #include "code\datums\repositories\repository.dm" @@ -273,8 +306,8 @@ #include "code\defines\procs\hud.dm" #include "code\defines\procs\radio.dm" #include "code\defines\procs\sd_Alert.dm" -#include "code\defines\procs\statistics.dm" #include "code\game\atoms.dm" +#include "code\game\atoms_init.dm" #include "code\game\atoms_movable.dm" #include "code\game\base_turf.dm" #include "code\game\periodic_news.dm" @@ -318,6 +351,7 @@ #include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" #include "code\game\area\asteroid_areas.dm" +#include "code\game\area\aurora_lift_areas.dm" #include "code\game\area\Space Station 13 areas.dm" #include "code\game\dna\dna2.dm" #include "code\game\dna\dna2_domutcheck.dm" @@ -331,7 +365,6 @@ #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\game_mode_latespawn.dm" -#include "code\game\gamemodes\gameticker.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\setupgame.dm" #include "code\game\gamemodes\calamity\calamity.dm" @@ -423,6 +456,7 @@ #include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cloning.dm" #include "code\game\machinery\constructable_frame.dm" +#include "code\game\machinery\crusher_piston.dm" #include "code\game\machinery\cryo.dm" #include "code\game\machinery\cryopod.dm" #include "code\game\machinery\deployable.dm" @@ -442,6 +476,7 @@ #include "code\game\machinery\machinery.dm" #include "code\game\machinery\magnet.dm" #include "code\game\machinery\mass_driver.dm" +#include "code\game\machinery\megavend.dm" #include "code\game\machinery\navbeacon.dm" #include "code\game\machinery\newscaster.dm" #include "code\game\machinery\nuclear_bomb.dm" @@ -457,8 +492,8 @@ #include "code\game\machinery\spaceheater.dm" #include "code\game\machinery\status_display.dm" #include "code\game\machinery\status_display_ai.dm" +#include "code\game\machinery\status_display_snowflakes.dm" #include "code\game\machinery\suit_storage_unit.dm" -#include "code\game\machinery\supply_display.dm" #include "code\game\machinery\supplybeacon.dm" #include "code\game\machinery\syndicatebeacon.dm" #include "code\game\machinery\teleporter.dm" @@ -500,7 +535,6 @@ #include "code\game\machinery\computer\Operating.dm" #include "code\game\machinery\computer\pod.dm" #include "code\game\machinery\computer\prisoner.dm" -#include "code\game\machinery\computer\prisonshuttle.dm" #include "code\game\machinery\computer\RCON_Console.dm" #include "code\game\machinery\computer\robot.dm" #include "code\game\machinery\computer\security.dm" @@ -748,6 +782,7 @@ #include "code\game\objects\items\weapons\circuitboards\machinery\research.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\trashcompactor.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm" #include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm" @@ -797,6 +832,7 @@ #include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tanks.dm" #include "code\game\objects\random\random.dm" +#include "code\game\objects\structures\banner.dm" #include "code\game\objects\structures\barsign.dm" #include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\coathanger.dm" @@ -1026,6 +1062,7 @@ #include "code\modules\cargo\randomstock.dm" #include "code\modules\cciaa\cciaa.dm" #include "code\modules\cciaa\cciaa_items.dm" +#include "code\modules\client\asset_cache.dm" #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\movement.dm" @@ -1245,12 +1282,10 @@ #include "code\modules\holodeck\HolodeckObjects.dm" #include "code\modules\holodeck\HolodeckPrograms.dm" #include "code\modules\http\post_request.dm" -#include "code\modules\hydroponics\_hydro_setup.dm" #include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\grown_predefined.dm" #include "code\modules\hydroponics\seed.dm" -#include "code\modules\hydroponics\seed_controller.dm" #include "code\modules\hydroponics\seed_datums.dm" #include "code\modules\hydroponics\seed_machines.dm" #include "code\modules\hydroponics\seed_mobs.dm" @@ -1283,7 +1318,6 @@ #include "code\modules\lighting\lighting_corner.dm" #include "code\modules\lighting\lighting_overlay.dm" #include "code\modules\lighting\lighting_profiler.dm" -#include "code\modules\lighting\lighting_setup.dm" #include "code\modules\lighting\lighting_source.dm" #include "code\modules\lighting\lighting_turf.dm" #include "code\modules\lighting\lighting_verbs.dm" @@ -1302,10 +1336,13 @@ #include "code\modules\mining\coins.dm" #include "code\modules\mining\machine_input_output_plates.dm" #include "code\modules\mining\machine_processing.dm" +#include "code\modules\mining\machine_rigpress.dm" #include "code\modules\mining\machine_stacking.dm" #include "code\modules\mining\machine_unloading.dm" +#include "code\modules\mining\machine_vending.dm" #include "code\modules\mining\mine_items.dm" #include "code\modules\mining\mine_turfs.dm" +#include "code\modules\mining\minebot.dm" #include "code\modules\mining\mineral_effect.dm" #include "code\modules\mining\mint.dm" #include "code\modules\mining\money_bag.dm" @@ -1504,7 +1541,6 @@ #include "code\modules\mob\living\silicon\pai\life.dm" #include "code\modules\mob\living\silicon\pai\pai.dm" #include "code\modules\mob\living\silicon\pai\personality.dm" -#include "code\modules\mob\living\silicon\pai\recruit.dm" #include "code\modules\mob\living\silicon\pai\say.dm" #include "code\modules\mob\living\silicon\pai\software.dm" #include "code\modules\mob\living\silicon\pai\software_modules.dm" @@ -1576,6 +1612,7 @@ #include "code\modules\mob\living\simple_animal\hostile\commanded\_command_defines.dm" #include "code\modules\mob\living\simple_animal\hostile\commanded\bear_companion.dm" #include "code\modules\mob\living\simple_animal\hostile\commanded\commanded.dm" +#include "code\modules\mob\living\simple_animal\hostile\retaliate\cavern.dm" #include "code\modules\mob\living\simple_animal\hostile\commanded\guard_dog.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm" @@ -1612,6 +1649,7 @@ #include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\hacked_camera.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" +#include "code\modules\modular_computers\file_system\programs\civilian\crusher_control.dm" #include "code\modules\modular_computers\file_system\programs\command\card.dm" #include "code\modules\modular_computers\file_system\programs\command\comm.dm" #include "code\modules\modular_computers\file_system\programs\engineering\_engineering.dm" @@ -1648,6 +1686,8 @@ #include "code\modules\multiz\_stubs.dm" #include "code\modules\multiz\basic.dm" #include "code\modules\multiz\movement.dm" +#include "code\modules\multiz\openspace.dm" +#include "code\modules\multiz\openspace_overlay.dm" #include "code\modules\multiz\pipes.dm" #include "code\modules\multiz\structures.dm" #include "code\modules\multiz\turf.dm" @@ -1678,6 +1718,7 @@ #include "code\modules\nano\modules\nano_module.dm" #include "code\modules\nano\modules\power_monitor.dm" #include "code\modules\nano\modules\rcon.dm" +#include "code\modules\orbit\orbit.dm" #include "code\modules\organs\blood.dm" #include "code\modules\organs\misc.dm" #include "code\modules\organs\organ.dm" @@ -1771,6 +1812,7 @@ #include "code\modules\projectiles\guns\energy\laser.dm" #include "code\modules\projectiles\guns\energy\lawgiver.dm" #include "code\modules\projectiles\guns\energy\magic.dm" +#include "code\modules\projectiles\guns\energy\mining.dm" #include "code\modules\projectiles\guns\energy\nuclear.dm" #include "code\modules\projectiles\guns\energy\pulse.dm" #include "code\modules\projectiles\guns\energy\rifle.dm" @@ -1885,7 +1927,6 @@ #include "code\modules\research\xenoarchaeology\chemistry.dm" #include "code\modules\research\xenoarchaeology\geosample.dm" #include "code\modules\research\xenoarchaeology\manuals.dm" -#include "code\modules\research\xenoarchaeology\master_controller.dm" #include "code\modules\research\xenoarchaeology\misc.dm" #include "code\modules\research\xenoarchaeology\artifact\artifact.dm" #include "code\modules\research\xenoarchaeology\artifact\artifact_autocloner.dm" @@ -1970,6 +2011,7 @@ #include "code\modules\shuttles\departmental.dm" #include "code\modules\shuttles\escape_pods.dm" #include "code\modules\shuttles\shuttle.dm" +#include "code\modules\shuttles\shuttle_arrival.dm" #include "code\modules\shuttles\shuttle_console.dm" #include "code\modules\shuttles\shuttle_emergency.dm" #include "code\modules\shuttles\shuttle_ferry.dm" @@ -2063,6 +2105,14 @@ #include "code\modules\telesci\gps.dm" #include "code\modules\telesci\telepad.dm" #include "code\modules\telesci\telesci_computer.dm" +#include "code\modules\turbolift\_Aurora-areas.dm" +#include "code\modules\turbolift\turbolift.dm" +#include "code\modules\turbolift\turbolift_areas.dm" +#include "code\modules\turbolift\turbolift_console.dm" +#include "code\modules\turbolift\turbolift_door.dm" +#include "code\modules\turbolift\turbolift_floor.dm" +#include "code\modules\turbolift\turbolift_map.dm" +#include "code\modules\turbolift\turbolift_turfs.dm" #include "code\modules\udp\ship_udp.dm" #include "code\modules\vehicles\bike.dm" #include "code\modules\vehicles\cargo_train.dm" @@ -2093,6 +2143,7 @@ #include "code\unit_tests\map_tests.dm" #include "code\unit_tests\mob_tests.dm" #include "code\unit_tests\observation_tests.dm" +#include "code\unit_tests\ss_test.dm" #include "code\unit_tests\unit_test.dm" #include "code\unit_tests\zas_tests.dm" #include "code\ZAS\_docs.dm" @@ -2101,7 +2152,6 @@ #include "code\ZAS\Connection.dm" #include "code\ZAS\ConnectionGroup.dm" #include "code\ZAS\ConnectionManager.dm" -#include "code\ZAS\Controller.dm" #include "code\ZAS\Debug.dm" #include "code\ZAS\Diagnostic.dm" #include "code\ZAS\Fire.dm" @@ -2111,10 +2161,13 @@ #include "code\ZAS\Zone.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -#include "maps\exodus-1.dmm" -#include "maps\exodus-2.dmm" -#include "maps\exodus-3.dmm" -#include "maps\exodus-4.dmm" -#include "maps\exodus-5.dmm" -#include "maps\exodus-6.dmm" +#include "maps\Aurora-MapDev\aurora-0.dmm" +#include "maps\Aurora-MapDev\aurora-1.dmm" +#include "maps\Aurora-MapDev\aurora-2.dmm" +#include "maps\Aurora-MapDev\aurora-3.dmm" +#include "maps\Aurora-MapDev\aurora-4.dmm" +#include "maps\Aurora-MapDev\aurora-5.dmm" +#include "maps\Aurora-MapDev\aurora-6.dmm" +#include "maps\Aurora-MapDev\aurora-7.dmm" +#include "maps\Aurora-MapDev\aurora-8.dmm" // END_INCLUDE diff --git a/btime.dll b/btime.dll deleted file mode 100644 index af6c82a9986..00000000000 Binary files a/btime.dll and /dev/null differ diff --git a/btime.so b/btime.so deleted file mode 100644 index edb3cc3113f..00000000000 Binary files a/btime.so and /dev/null differ diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index b5d4df814e9..78afd3fa271 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -11,7 +11,9 @@ Pipelines + Other Objects -> Pipe network */ /obj/machinery/atmospherics - auto_init = 0 + var/auto_init = 0 + + var/no_special_init = FALSE anchored = 1 idle_power_usage = 0 @@ -44,6 +46,18 @@ Pipelines + Other Objects -> Pipe network pipe_color = null ..() +/obj/machinery/atmospherics/proc/initialize() + +// Atmos machines are snowflakes and call initialize on themselves. +// Do not refactor initialize() to Initialize() unless you know what you are doing. +/obj/machinery/atmospherics/Initialize(mapload, ...) + if (no_special_init) + return ..() + + . = ..() + if (mapload) + initialize() + /obj/machinery/atmospherics/attackby(atom/A, mob/user as mob) if(istype(A, /obj/item/device/pipe_painter)) return @@ -116,6 +130,9 @@ obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/a /obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) // Used when two pipe_networks are combining +/obj/machinery/atmospherics/proc/remove_network(datum/pipe_network/network) + reassign_network(network, null) + /obj/machinery/atmospherics/proc/return_network_air(datum/network/reference) // Return a list of gas_mixture(s) in the object // associated with reference pipe_network for use in rebuilding the networks gases list @@ -124,4 +141,4 @@ obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/a /obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/update_icon() - return null \ No newline at end of file + return null diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 2ccfe0f2e87..db9116ef9ed 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -42,19 +42,20 @@ obj/machinery/atmospherics/binary return null Destroy() - loc = null + QDEL_NULL(air1) + QDEL_NULL(air2) if(node1) node1.disconnect(src) - qdel(network1) + QDEL_NULL(network1) if(node2) node2.disconnect(src) - qdel(network2) + QDEL_NULL(network2) node1 = null node2 = null - ..() + return ..() initialize() if(node1 && node2) return @@ -130,4 +131,4 @@ obj/machinery/atmospherics/binary update_icon() update_underlays() - return null \ No newline at end of file + return null diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index c0cf15616fa..11f7d6e3854 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -161,10 +161,10 @@ //Radio remote control /obj/machinery/atmospherics/binary/dp_vent_pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/dp_vent_pump/proc/broadcast_status() if(!radio_connection) @@ -250,12 +250,10 @@ ) if(signal.data["status"]) - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) return //do not update_icon - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) update_icon() #undef DEFAULT_PRESSURE_DELTA diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 05488c719af..5aded25901f 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -96,10 +96,10 @@ //Radio remote control /obj/machinery/atmospherics/binary/passive_gate/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status() if(!radio_connection) @@ -152,12 +152,10 @@ regulate_mode = text2num(signal.data["set_flow_rate"]) if("status" in signal.data) - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) return //do not update_icon - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) update_icon() return diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index 5768def1ec1..0d5ff2649cc 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -48,7 +48,7 @@ node1 = null node2 = null - ..() + return ..() process() ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index c6ef3e201da..502ddef66dd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -92,10 +92,10 @@ Thus, the two variables affect pump operation are set in New(): //Radio remote control /obj/machinery/atmospherics/binary/pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/pump/proc/broadcast_status() if(!radio_connection) @@ -169,12 +169,10 @@ Thus, the two variables affect pump operation are set in New(): ) if(signal.data["status"]) - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) return //do not update_icon - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) update_icon() return diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index b2966ef4314..adb2638791c 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -28,7 +28,7 @@ input = null output = null filters.Cut() - ..() + return ..() /obj/machinery/atmospherics/omni/filter/sort_ports() for(var/datum/omni_port/P in ports) @@ -261,4 +261,4 @@ else initialize_directions |= P.dir P.connect() - P.update = 1 \ No newline at end of file + P.update = 1 diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm index f52269ee601..e69587482fd 100644 --- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm @@ -52,7 +52,7 @@ /obj/machinery/atmospherics/omni/mixer/Destroy() inputs.Cut() output = null - ..() + return ..() /obj/machinery/atmospherics/omni/mixer/sort_ports() for(var/datum/omni_port/P in ports) @@ -293,4 +293,4 @@ /obj/machinery/atmospherics/omni/mixer/proc/con_lock(var/port = NORTH) for(var/datum/omni_port/P in inputs) if(P.dir == port) - P.con_lock = !P.con_lock \ No newline at end of file + P.con_lock = !P.con_lock diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index b62a63da903..3e42b75fbe2 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -240,7 +240,7 @@ qdel(P.network) P.node = null - ..() + return ..() /obj/machinery/atmospherics/omni/initialize() for(var/datum/omni_port/P in ports) diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 72eedd3d7f1..af0ba93ca6e 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -72,7 +72,7 @@ node = null - ..() + return ..() /obj/machinery/atmospherics/portables_connector/initialize() if(node) return diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 3506c3a2a75..6a839adc8fb 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -31,10 +31,10 @@ var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/trinary/filter/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/trinary/filter/New() ..() diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index fa066d978f7..fbf711f8619 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -51,23 +51,25 @@ obj/machinery/atmospherics/trinary return null Destroy() - loc = null + QDEL_NULL(air1) + QDEL_NULL(air2) + QDEL_NULL(air3) if(node1) node1.disconnect(src) - qdel(network1) + QDEL_NULL(network1) if(node2) node2.disconnect(src) - qdel(network2) + QDEL_NULL(network2) if(node3) node3.disconnect(src) - qdel(network3) + QDEL_NULL(network3) node1 = null node2 = null node3 = null - ..() + return ..() initialize() if(node1 && node2 && node3) return @@ -164,4 +166,4 @@ obj/machinery/atmospherics/trinary update_underlays() - return null \ No newline at end of file + return null diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index c3592deb365..9c369351de4 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -116,7 +116,7 @@ node2 = null node3 = null - ..() + return ..() /obj/machinery/atmospherics/tvalve/proc/go_to_side() @@ -313,10 +313,10 @@ //Radio remote control /obj/machinery/atmospherics/tvalve/digital/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) @@ -453,10 +453,10 @@ //Radio remote control -eh? /obj/machinery/atmospherics/tvalve/mirrored/digital/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/tvalve/mirrored/digital/initialize() ..() diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index b6014ff34f5..1378bd31bf9 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -32,14 +32,14 @@ process() ..() - if(!partner) + if(QDELETED(partner)) return 0 - if(!air_master || air_master.current_cycle <= update_cycle) + if(!SSair || SSair.times_fired <= update_cycle) return 0 - update_cycle = air_master.current_cycle - partner.update_cycle = air_master.current_cycle + update_cycle = SSair.times_fired + partner.update_cycle = SSair.times_fired var/air_heat_capacity = air_contents.heat_capacity() var/other_air_heat_capacity = partner.air_contents.heat_capacity() diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm index 3596d0e8cf6..d4bda79f949 100644 --- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm @@ -93,10 +93,10 @@ flick("inject", src) /obj/machinery/atmospherics/unary/outlet_injector/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency) + radio_connection = SSradio.add_object(src, frequency) /obj/machinery/atmospherics/unary/outlet_injector/proc/broadcast_status() if(!radio_connection) @@ -142,13 +142,11 @@ volume_rate = between(0, number, air_contents.volume) if(signal.data["status"]) - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) return //do not update_icon - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) update_icon() /obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) - update_underlays() \ No newline at end of file + update_underlays() diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index d828ef0c8cb..7882896f753 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -29,15 +29,15 @@ return null Destroy() - loc = null + QDEL_NULL(air_contents) if(node) node.disconnect(src) - qdel(network) + QDEL_NULL(network) node = null - ..() + return ..() initialize() if(node) return @@ -100,4 +100,4 @@ /obj/machinery/atmospherics/unary/vent_scrubber/proc/is_welded() if (welded > 0) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 0b9521a4514..a29e294e3a4 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -72,17 +72,33 @@ /obj/machinery/atmospherics/unary/vent_pump/New() ..() air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + + +/obj/machinery/atmospherics/unary/vent_pump/Initialize() + . = ..() - icon = null initial_loc = get_area(loc) area_uid = initial_loc.uid if (!id_tag) assign_uid() id_tag = num2text(uid) + + //some vents work his own special way + radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null + if(frequency) + radio_connection = register_radio(src, frequency, frequency, radio_filter_in) + + initialize() + +// Different from the above. +/obj/machinery/atmospherics/unary/vent_pump/initialize() + ..() + broadcast_status() /obj/machinery/atmospherics/unary/vent_pump/Destroy() unregister_radio(src, frequency) - ..() + return ..() /obj/machinery/atmospherics/unary/vent_pump/high_volume name = "Large Air Vent" @@ -103,14 +119,10 @@ air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector /obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0) - if(!check_icon_cache()) - return if (!node) use_power = 0 - overlays.Cut() - - var/vent_icon = "vent" + var/vent_icon = "" var/turf/T = get_turf(src) if(!istype(T)) @@ -126,7 +138,7 @@ else vent_icon += "[use_power ? "[pump_direction ? "out" : "in"]" : "off"]" - overlays += icon_manager.get_atmos_icon("device", , , vent_icon) + icon_state = vent_icon /obj/machinery/atmospherics/unary/vent_pump/update_underlays() if(..()) @@ -240,27 +252,17 @@ "flow_rate" = last_flow_rate ) - if(!initial_loc.air_vent_names[id_tag]) - var/new_name = "[initial_loc.name] Vent Pump #[initial_loc.air_vent_names.len+1]" - initial_loc.air_vent_names[id_tag] = new_name + var/area/A = get_area(src) + if(!A.air_vent_names[id_tag]) + var/new_name = "[A.name] Vent Pump #[A.air_vent_names.len+1]" + A.air_vent_names[id_tag] = new_name src.name = new_name - initial_loc.air_vent_info[id_tag] = signal.data + A.air_vent_info[id_tag] = signal.data radio_connection.post_signal(src, signal, radio_filter_out) return 1 - -/obj/machinery/atmospherics/unary/vent_pump/initialize() - ..() - - //some vents work his own special way - radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null - if(frequency) - radio_connection = register_radio(src, frequency, frequency, radio_filter_in) - src.broadcast_status() - /obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) if(stat & (NOPOWER|BROKEN)) return @@ -338,13 +340,12 @@ return if(signal.data["status"] != null) - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) return //do not update_icon //log_debug("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) + update_icon() return @@ -418,8 +419,7 @@ if(initial_loc) initial_loc.air_vent_info -= id_tag initial_loc.air_vent_names -= id_tag - ..() - return + return ..() #undef DEFAULT_PRESSURE_DELTA diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 152576d6eb5..0241cc62fb4 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -28,6 +28,7 @@ var/radio_filter_in var/welded = 0 + //no_special_init = TRUE /obj/machinery/atmospherics/unary/vent_scrubber/on use_power = 1 @@ -37,39 +38,47 @@ ..() air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER - icon = null + +/obj/machinery/atmospherics/unary/vent_scrubber/Initialize() + . = ..() + initial_loc = get_area(loc) area_uid = initial_loc.uid if (!id_tag) assign_uid() id_tag = num2text(uid) + radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null + if (frequency) + set_frequency(frequency) + + initialize() + +/obj/machinery/atmospherics/unary/vent_scrubber/initialize() + ..() + broadcast_status() + /obj/machinery/atmospherics/unary/vent_scrubber/Destroy() unregister_radio(src, frequency) - ..() - + return ..() /obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - overlays.Cut() - var/turf/T = get_turf(src) if(!istype(T)) return - var/scrubber_icon = "scrubber" - if(welded) - scrubber_icon += "weld" + if (welded) + icon_state = "weld" + return + + if (!powered() || !use_power) + icon_state = "off" + else if (scrubbing) + icon_state = "on" else - if(!powered()) - scrubber_icon += "off" - else - scrubber_icon += "[use_power ? "[scrubbing ? "on" : "in"]" : "off"]" - - overlays += icon_manager.get_atmos_icon("device", , , scrubber_icon) - + icon_state = "in" + /obj/machinery/atmospherics/unary/vent_scrubber/update_underlays() if(..()) underlays.Cut() @@ -85,9 +94,9 @@ add_underlay(T,, dir) /obj/machinery/atmospherics/unary/vent_scrubber/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter_in) + radio_connection = SSradio.add_object(src, frequency, radio_filter_in) /obj/machinery/atmospherics/unary/vent_scrubber/proc/broadcast_status() if(!radio_connection) @@ -111,23 +120,17 @@ "filter_n2o" = ("sleeping_agent" in scrubbing_gas), "sigtype" = "status" ) - if(!initial_loc.air_scrub_names[id_tag]) - var/new_name = "[initial_loc.name] Air Scrubber #[initial_loc.air_scrub_names.len+1]" - initial_loc.air_scrub_names[id_tag] = new_name + + var/area/A = get_area(src) + if(!A.air_scrub_names[id_tag]) + var/new_name = "[A.name] Air Scrubber #[A.air_scrub_names.len+1]" + A.air_scrub_names[id_tag] = new_name src.name = new_name - initial_loc.air_scrub_info[id_tag] = signal.data + A.air_scrub_info[id_tag] = signal.data radio_connection.post_signal(src, signal, radio_filter_out) return 1 -/obj/machinery/atmospherics/unary/vent_scrubber/initialize() - ..() - radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null - if (frequency) - set_frequency(frequency) - src.broadcast_status() - /obj/machinery/atmospherics/unary/vent_scrubber/process() ..() @@ -242,13 +245,11 @@ return if(signal.data["status"] != null) - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) return //do not update_icon // log_debug("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") - spawn(2) - broadcast_status() + addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) update_icon() return @@ -320,5 +321,5 @@ if(initial_loc) initial_loc.air_scrub_info -= id_tag initial_loc.air_scrub_names -= id_tag - ..() - return + + return ..() diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 121d58e186e..003ed5a401e 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -83,7 +83,7 @@ node1 = null node2 = null - ..() + return ..() /obj/machinery/atmospherics/valve/proc/open() if(open) return 0 @@ -272,10 +272,10 @@ icon_state = "valve[open]nopower" /obj/machinery/atmospherics/valve/digital/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/valve/digital/initialize() ..() diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index 7fe586733ca..e952364cb33 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -1,6 +1,4 @@ -var/global/list/datum/pipe_network/pipe_networks = list() - -datum/pipe_network +/datum/pipe_network var/list/datum/gas_mixture/gases = list() //All of the gas_mixtures continuously connected in this network var/volume = 0 //caches the total volume for atmos machines to use in gas calculations @@ -11,68 +9,83 @@ datum/pipe_network var/update = 1 //var/datum/gas_mixture/air_transient = null - New() - //air_transient = new() +/* +/datum/pipe_network/New() + //air_transient = new() - ..() + ..()*/ - proc/process() - //Equalize gases amongst pipe if called for - if(update) - update = 0 - reconcile_air() //equalize_gases(gases) +/datum/pipe_network/process() + //Equalize gases amongst pipe if called for + if(update) + update = 0 + reconcile_air() //equalize_gases(gases) - //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport - //for(var/datum/pipeline/line_member in line_members) - // line_member.process() + //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport + //for(var/datum/pipeline/line_member in line_members) + // line_member.process() - proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference) - //Purpose: Generate membership roster - //Notes: Assuming that members will add themselves to appropriate roster in network_expand() +/datum/pipe_network/proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference) + //Purpose: Generate membership roster + //Notes: Assuming that members will add themselves to appropriate roster in network_expand() - if(!start_normal) - qdel(src) + if(!start_normal) + qdel(src) - start_normal.network_expand(src, reference) + start_normal.network_expand(src, reference) - update_network_gases() + update_network_gases() - if((normal_members.len>0)||(line_members.len>0)) - pipe_networks += src - else - qdel(src) + if((normal_members.len>0)||(line_members.len>0)) + START_PROCESSING(SSpipenet, src) + else + qdel(src) - proc/merge(datum/pipe_network/giver) - if(giver==src) return 0 +/datum/pipe_network/proc/merge(datum/pipe_network/giver) + if(giver==src) return 0 - normal_members |= giver.normal_members + normal_members |= giver.normal_members - line_members |= giver.line_members + line_members |= giver.line_members - for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) - normal_member.reassign_network(giver, src) + for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) + normal_member.reassign_network(giver, src) - for(var/datum/pipeline/line_member in giver.line_members) - line_member.network = src + for(var/datum/pipeline/line_member in giver.line_members) + line_member.network = src - update_network_gases() - return 1 + update_network_gases() + return 1 - proc/update_network_gases() - //Go through membership roster and make sure gases is up to date +/datum/pipe_network/proc/update_network_gases() + //Go through membership roster and make sure gases is up to date - gases = list() - volume = 0 + gases = list() + volume = 0 - for(var/obj/machinery/atmospherics/normal_member in normal_members) - var/result = normal_member.return_network_air(src) - if(result) gases += result + for(var/obj/machinery/atmospherics/normal_member in normal_members) + var/result = normal_member.return_network_air(src) + if(result) gases += result - for(var/datum/pipeline/line_member in line_members) - gases += line_member.air - - for(var/datum/gas_mixture/air in gases) - volume += air.volume + for(var/datum/pipeline/line_member in line_members) + gases += line_member.air + + for(var/datum/gas_mixture/air in gases) + volume += air.volume - proc/reconcile_air() - equalize_gases(gases) +/datum/pipe_network/proc/reconcile_air() + equalize_gases(gases) + +/datum/pipe_network/Destroy(force = FALSE) + STOP_PROCESSING(SSpipenet, src) + for (var/datum/pipeline/pipeline in line_members) + pipeline.network = null + + line_members = null + + for (var/obj/machinery/atmospherics/thing in normal_members) + thing.remove_network(src) + + normal_members = null + + return ..() diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 44c7cd25905..4d0a64aaa71 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -1,5 +1,5 @@ -datum/pipeline +/datum/pipeline var/datum/gas_mixture/air var/list/obj/machinery/atmospherics/pipe/members @@ -9,208 +9,215 @@ datum/pipeline var/alert_pressure = 0 - Destroy() - if(network) - qdel(network) +/datum/pipeline/Destroy() + if(network) + QDEL_NULL(network) - if(air && air.volume) - temporarily_store_air() - qdel(air) + if(air && air.volume) + temporarily_store_air() + QDEL_NULL(air) - ..() + for (var/obj/machinery/atmospherics/pipe/thing in members) + thing.parent = null - proc/process()//This use to be called called from the pipe networks + return ..() - //Check to see if pressure is within acceptable limits - var/pressure = air.return_pressure() - if(pressure > alert_pressure) - for(var/obj/machinery/atmospherics/pipe/member in members) - if(!member.check_pressure(pressure)) - break //Only delete 1 pipe per process - - proc/temporarily_store_air() - //Update individual gas_mixtures by volume ratio +/datum/pipeline/resetVariables() + ..("members", "edges") + members = list() + edges = list() +/datum/pipeline/process()//This use to be called called from the pipe networks + //Check to see if pressure is within acceptable limits + var/pressure = air.return_pressure() + if(pressure > alert_pressure) for(var/obj/machinery/atmospherics/pipe/member in members) - member.air_temporary = new - member.air_temporary.copy_from(air) - member.air_temporary.volume = member.volume - member.air_temporary.multiply(member.volume / air.volume) + if(!member.check_pressure(pressure)) + break //Only delete 1 pipe per process - proc/build_pipeline(obj/machinery/atmospherics/pipe/base) +/datum/pipeline/proc/temporarily_store_air() + //Update individual gas_mixtures by volume ratio + + for(var/obj/machinery/atmospherics/pipe/member in members) + member.air_temporary = new + member.air_temporary.copy_from(air) + member.air_temporary.volume = member.volume + member.air_temporary.multiply(member.volume / air.volume) + +/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base) + air = new + + var/list/possible_expansions = list(base) + members = list(base) + edges = list() + + var/volume = base.volume + base.parent = src + alert_pressure = base.alert_pressure + + if(base.air_temporary) + air = base.air_temporary + base.air_temporary = null + else air = new - var/list/possible_expansions = list(base) - members = list(base) - edges = list() + while(possible_expansions.len>0) + for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) - var/volume = base.volume - base.parent = src - alert_pressure = base.alert_pressure + var/list/result = borderline.pipeline_expansion() + var/edge_check = result.len - if(base.air_temporary) - air = base.air_temporary - base.air_temporary = null - else - air = new + if(result.len>0) + for(var/obj/machinery/atmospherics/pipe/item in result) + if(!members.Find(item)) + members += item + possible_expansions += item - while(possible_expansions.len>0) - for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) + volume += item.volume + item.parent = src - var/list/result = borderline.pipeline_expansion() - var/edge_check = result.len + alert_pressure = min(alert_pressure, item.alert_pressure) - if(result.len>0) - for(var/obj/machinery/atmospherics/pipe/item in result) - if(!members.Find(item)) - members += item - possible_expansions += item + if(item.air_temporary) + air.merge(item.air_temporary) - volume += item.volume - item.parent = src + edge_check-- - alert_pressure = min(alert_pressure, item.alert_pressure) + if(edge_check>0) + edges += borderline - if(item.air_temporary) - air.merge(item.air_temporary) + possible_expansions -= borderline - edge_check-- + air.volume = volume - if(edge_check>0) - edges += borderline +/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - possible_expansions -= borderline + if(new_network.line_members.Find(src)) + return 0 - air.volume = volume + new_network.line_members += src - proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + network = new_network - if(new_network.line_members.Find(src)) - return 0 + for(var/obj/machinery/atmospherics/pipe/edge in edges) + for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion()) + if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference)) + result.network_expand(new_network, edge) - new_network.line_members += src + return 1 - network = new_network +/datum/pipeline/proc/return_network(obj/machinery/atmospherics/reference) + if(!network) + network = new /datum/pipe_network + network.build_network(src, null) + //technically passing these parameters should not be allowed + //however pipe_network.build_network(..) and pipeline.network_extend(...) + // were setup to properly handle this case - for(var/obj/machinery/atmospherics/pipe/edge in edges) - for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion()) - if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference)) - result.network_expand(new_network, edge) + return network - return 1 +/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume) + var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) + air_sample.volume = mingle_volume - proc/return_network(obj/machinery/atmospherics/reference) - if(!network) - network = new /datum/pipe_network() - network.build_network(src, null) - //technically passing these parameters should not be allowed - //however pipe_network.build_network(..) and pipeline.network_extend(...) - // were setup to properly handle this case + if(istype(target) && target.zone) + //Have to consider preservation of group statuses + var/datum/gas_mixture/turf_copy = new - return network + turf_copy.copy_from(target.zone.air) + turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group - proc/mingle_with_turf(turf/simulated/target, mingle_volume) - var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) - air_sample.volume = mingle_volume + equalize_gases(list(air_sample, turf_copy)) + air.merge(air_sample) - if(istype(target) && target.zone) - //Have to consider preservation of group statuses - var/datum/gas_mixture/turf_copy = new + turf_copy.subtract(target.zone.air) - turf_copy.copy_from(target.zone.air) - turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group + target.zone.air.merge(turf_copy) - equalize_gases(list(air_sample, turf_copy)) - air.merge(air_sample) + else + var/datum/gas_mixture/turf_air = target.return_air() - turf_copy.subtract(target.zone.air) + equalize_gases(list(air_sample, turf_air)) + air.merge(air_sample) + //turf_air already modified by equalize_gases() - target.zone.air.merge(turf_copy) + if(network) + network.update = 1 - else - var/datum/gas_mixture/turf_air = target.return_air() +/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity) + var/total_heat_capacity = air.heat_capacity() + var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) - equalize_gases(list(air_sample, turf_air)) - air.merge(air_sample) - //turf_air already modified by equalize_gases() + if(istype(target, /turf/simulated)) + var/turf/simulated/modeled_location = target - if(network) - network.update = 1 + if(modeled_location.blocks_air) - proc/temperature_interact(turf/target, share_volume, thermal_conductivity) - var/total_heat_capacity = air.heat_capacity() - var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) - - if(istype(target, /turf/simulated)) - var/turf/simulated/modeled_location = target - - if(modeled_location.blocks_air) - - if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - modeled_location.temperature - - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) - - air.temperature -= heat/total_heat_capacity - modeled_location.temperature += heat/modeled_location.heat_capacity - - else - var/delta_temperature = 0 - var/sharer_heat_capacity = 0 - - if(modeled_location.zone) - delta_temperature = (air.temperature - modeled_location.zone.air.temperature) - sharer_heat_capacity = modeled_location.zone.air.heat_capacity() - else - delta_temperature = (air.temperature - modeled_location.air.temperature) - sharer_heat_capacity = modeled_location.air.heat_capacity() - - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 - - if((sharer_heat_capacity>0) && (partial_heat_capacity>0)) - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity)) - - self_temperature_delta = -heat/total_heat_capacity - sharer_temperature_delta = heat/sharer_heat_capacity - else - return 1 - - air.temperature += self_temperature_delta - - if(modeled_location.zone) - modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier - else - modeled_location.air.temperature += sharer_temperature_delta - - - else - if((target.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - target.temperature + if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) + var/delta_temperature = air.temperature - modeled_location.temperature var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity)) + (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) air.temperature -= heat/total_heat_capacity - if(network) - network.update = 1 + modeled_location.temperature += heat/modeled_location.heat_capacity + + else + var/delta_temperature = 0 + var/sharer_heat_capacity = 0 + + if(modeled_location.zone) + delta_temperature = (air.temperature - modeled_location.zone.air.temperature) + sharer_heat_capacity = modeled_location.zone.air.heat_capacity() + else + delta_temperature = (air.temperature - modeled_location.air.temperature) + sharer_heat_capacity = modeled_location.air.heat_capacity() + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if((sharer_heat_capacity>0) && (partial_heat_capacity>0)) + var/heat = thermal_conductivity*delta_temperature* \ + (partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity)) + + self_temperature_delta = -heat/total_heat_capacity + sharer_temperature_delta = heat/sharer_heat_capacity + else + return 1 + + air.temperature += self_temperature_delta + + if(modeled_location.zone) + modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier + else + modeled_location.air.temperature += sharer_temperature_delta + + + else + if((target.heat_capacity>0) && (partial_heat_capacity>0)) + var/delta_temperature = air.temperature - target.temperature + + var/heat = thermal_conductivity*delta_temperature* \ + (partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity)) + + air.temperature -= heat/total_heat_capacity + if(network) + network.update = 1 //surface must be the surface area in m^2 - proc/radiate_heat_to_space(surface, thermal_conductivity) - var/gas_density = air.total_moles/air.volume - thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio - - // We only get heat from the star on the exposed surface area. - // If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase. - var/heat_gain = AVERAGE_SOLAR_RADIATION * (RADIATOR_EXPOSED_SURFACE_AREA_RATIO * surface) * thermal_conductivity - - // Previously, the temperature would enter equilibrium at 26C or 294K. - // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on. - // It currently should stabilise at 129.6K or -143.6C - heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4 - - air.add_thermal_energy(heat_gain) - if(network) - network.update = 1 +/datum/pipeline/proc/radiate_heat_to_space(surface, thermal_conductivity) + var/gas_density = air.total_moles/air.volume + thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio + + // We only get heat from the star on the exposed surface area. + // If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase. + var/heat_gain = AVERAGE_SOLAR_RADIATION * (RADIATOR_EXPOSED_SURFACE_AREA_RATIO * surface) * thermal_conductivity + + // Previously, the temperature would enter equilibrium at 26C or 294K. + // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on. + // It currently should stabilise at 129.6K or -143.6C + heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4 + + air.add_thermal_energy(heat_gain) + if(network) + network.update = 1 diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm index d78bb828e24..8242a198811 100644 --- a/code/ATMOSPHERICS/he_pipes.dm +++ b/code/ATMOSPHERICS/he_pipes.dm @@ -98,9 +98,10 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging h_g = 64 + (h_g - 64)*scale h_b = 64 + (h_b - 64)*scale - animate(src, color = rgb(h_r, h_g, h_b), time = 20, easing = SINE_EASING) - - + var/list/animate_targets = get_above_oo() + src + for (var/thing in animate_targets) + var/atom/movable/AM = thing + animate(AM, color = rgb(h_r, h_g, h_b), time = 20, easing = SINE_EASING) obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction diff --git a/code/ATMOSPHERICS/mainspipe.dm b/code/ATMOSPHERICS/mainspipe.dm index 520d7a55b2e..6ff8bb70115 100644 --- a/code/ATMOSPHERICS/mainspipe.dm +++ b/code/ATMOSPHERICS/mainspipe.dm @@ -101,7 +101,7 @@ obj/machinery/atmospherics/mains_pipe Destroy() disconnect() - ..() + return ..() initialize() for(var/i = 1 to nodes.len) @@ -657,10 +657,10 @@ obj/machinery/atmospherics/mains_pipe/valve proc set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) var/frequency = 0 var/id = null diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index ee9d9ee0afb..d45ad60f623 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -64,11 +64,12 @@ return parent.return_network(reference) /obj/machinery/atmospherics/pipe/Destroy() - qdel(parent) + QDEL_NULL(parent) if(air_temporary) loc.assume_air(air_temporary) + QDEL_NULL(air_temporary) - ..() + return ..() /obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(src, /obj/machinery/atmospherics/pipe/tank)) @@ -231,7 +232,10 @@ if(node2) node2.disconnect(src) - ..() + node1 = null + node2 = null + + return ..() /obj/machinery/atmospherics/pipe/simple/pipeline_expansion() return list(node1, node2) @@ -250,7 +254,7 @@ alpha = 255 - overlays.Cut() + cut_overlays() if(!node1 && !node2) var/turf/T = get_turf(src) @@ -261,9 +265,9 @@ qdel(meter) qdel(src) else if(node1 && node2) - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]") + add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]")) else - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]") + add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]")) /obj/machinery/atmospherics/pipe/simple/update_underlays() return @@ -302,12 +306,12 @@ /obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node2 = null update_icon() @@ -462,22 +466,26 @@ if(node3) node3.disconnect(src) - ..() + node1 = null + node2 = null + node3 = null + + return ..() /obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node2 = null if(reference == node3) if(istype(node3, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node3 = null update_icon() @@ -509,9 +517,11 @@ qdel(meter) qdel(src) else - overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type) + cut_overlays() + add_overlay(icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)) + add_overlay(icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)) + + // Can't handle underlays with SSoverlay. underlays.Cut() var/turf/T = get_turf(src) @@ -703,27 +713,32 @@ if(node4) node4.disconnect(src) - ..() + node1 = null + node2 = null + node3 = null + node4 = null + + return ..() /obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node2 = null if(reference == node3) if(istype(node3, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node3 = null if(reference == node4) if(istype(node4, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node4 = null update_icon() @@ -757,9 +772,10 @@ qdel(meter) qdel(src) else - overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type) + cut_overlays() + add_overlay(icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)) + add_overlay(icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)) + underlays.Cut() /* @@ -953,12 +969,14 @@ if(node) node.disconnect(src) - ..() + node = null + + return ..() /obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference) if(reference == node) if(istype(node, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node = null update_icon() @@ -977,8 +995,8 @@ alpha = 255 - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "cap") + cut_overlays() + add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "cap")) /obj/machinery/atmospherics/pipe/cap/initialize() for(var/obj/machinery/atmospherics/target in get_step(src, dir)) @@ -1067,7 +1085,9 @@ if(node1) node1.disconnect(src) - ..() + node1 = null + + return ..() /obj/machinery/atmospherics/pipe/tank/pipeline_expansion() return list(node1) @@ -1097,7 +1117,7 @@ /obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node1 = null update_underlays() @@ -1237,7 +1257,9 @@ if(node1) node1.disconnect(src) - ..() + node1 = null + + return ..() /obj/machinery/atmospherics/pipe/vent/pipeline_expansion() return list(node1) @@ -1265,7 +1287,7 @@ /obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) + QDEL_NULL(parent) node1 = null update_icon() @@ -1292,8 +1314,8 @@ alpha = 255 - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") + cut_overlays() + add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")) underlays.Cut() if (node1) @@ -1307,7 +1329,7 @@ universal_underlays(node2) else universal_underlays(,dir) - universal_underlays(dir, -180) + universal_underlays(,turn(dir, -180)) /obj/machinery/atmospherics/pipe/simple/visible/universal/update_underlays() ..() @@ -1327,8 +1349,9 @@ alpha = 255 - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") + cut_overlays() + add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")) + underlays.Cut() if (node1) diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index d14c760d85d..4cd941a3414 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -78,115 +78,13 @@ obj/item/check_airflow_movable(n) return 0 return 1 +/* /atom/movable/proc/GotoAirflowDest(n) - if(!airflow_dest) return - if(airflow_speed < 0) return - if(last_airflow > world.time - vsc.airflow_delay) return - if(airflow_speed) - airflow_speed = n/max(get_dist(src,airflow_dest),1) - return - if(airflow_dest == loc) - step_away(src,loc) - if(!src.AirflowCanMove(n)) - return - if(ismob(src)) - src << "You are sucked away by airflow!" - last_airflow = world.time - var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2) - if(airflow_falloff < 1) - airflow_dest = null - return - airflow_speed = min(max(n * (9/airflow_falloff),1),9) - var - xo = airflow_dest.x - src.x - yo = airflow_dest.y - src.y - od = 0 - airflow_dest = null - if(!density) - density = 1 - od = 1 - while(airflow_speed > 0) - if(airflow_speed <= 0) break - airflow_speed = min(airflow_speed,15) - airflow_speed -= vsc.airflow_speed_decay - if(airflow_speed > 7) - if(airflow_time++ >= airflow_speed - 7) - if(od) - density = 0 - sleep(1 * tick_multiplier) - else - if(od) - density = 0 - sleep(max(1,10-(airflow_speed+3)) * tick_multiplier) - if(od) - density = 1 - if ((!( src.airflow_dest ) || src.loc == src.airflow_dest)) - src.airflow_dest = locate(min(max(src.x + xo, 1), world.maxx), min(max(src.y + yo, 1), world.maxy), src.z) - if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy)) - break - if(!istype(loc, /turf)) - break - step_towards(src, src.airflow_dest) - var/mob/M = src - if(istype(M) && M.client) - M.setMoveCooldown(vsc.airflow_mob_slowdown) - airflow_dest = null - airflow_speed = 0 - airflow_time = 0 - if(od) - density = 0 - - + and /atom/movable/proc/RepelAirflowDest(n) - if(!airflow_dest) return - if(airflow_speed < 0) return - if(last_airflow > world.time - vsc.airflow_delay) return - if(airflow_speed) - airflow_speed = n/max(get_dist(src,airflow_dest),1) - return - if(airflow_dest == loc) - step_away(src,loc) - if(!src.AirflowCanMove(n)) - return - if(ismob(src)) - src << "You are pushed away by airflow!" - last_airflow = world.time - var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2) - if(airflow_falloff < 1) - airflow_dest = null - return - airflow_speed = min(max(n * (9/airflow_falloff),1),9) - var - xo = -(airflow_dest.x - src.x) - yo = -(airflow_dest.y - src.y) - od = 0 - airflow_dest = null - if(!density) - density = 1 - od = 1 - while(airflow_speed > 0) - if(airflow_speed <= 0) return - airflow_speed = min(airflow_speed,15) - airflow_speed -= vsc.airflow_speed_decay - if(airflow_speed > 7) - if(airflow_time++ >= airflow_speed - 7) - sleep(1 * tick_multiplier) - else - sleep(max(1,10-(airflow_speed+3)) * tick_multiplier) - if ((!( src.airflow_dest ) || src.loc == src.airflow_dest)) - src.airflow_dest = locate(min(max(src.x + xo, 1), world.maxx), min(max(src.y + yo, 1), world.maxy), src.z) - if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy)) - return - if(!istype(loc, /turf)) - return - step_towards(src, src.airflow_dest) - if(ismob(src) && src:client) - src:client:move_delay = world.time + vsc.airflow_mob_slowdown - airflow_dest = null - airflow_speed = 0 - airflow_time = 0 - if(od) - density = 0 + have been moved to SSairflow. + +*/ /atom/movable/Bump(atom/A) if(airflow_speed > 0 && airflow_dest) diff --git a/code/ZAS/Atom.dm b/code/ZAS/Atom.dm index cf7193ea872..dcf37ddf577 100644 --- a/code/ZAS/Atom.dm +++ b/code/ZAS/Atom.dm @@ -29,11 +29,8 @@ //Convenience function for atoms to update turfs they occupy /atom/movable/proc/update_nearby_tiles(need_rebuild) - if(!air_master) - return 0 - for(var/turf/simulated/turf in locs) - air_master.mark_for_update(turf) + SSair.mark_for_update(turf) return 1 @@ -54,9 +51,9 @@ turf/c_airblock(turf/other) #ifdef ZASDBG ASSERT(isturf(other)) #endif - if(blocks_air || other.blocks_air) + if(((blocks_air & AIR_BLOCKED) || (other.blocks_air & AIR_BLOCKED))) return BLOCKED - + //Z-level handling code. Always block if there isn't an open space. #ifdef ZLEVELS if(other.z != src.z) @@ -66,6 +63,12 @@ turf/c_airblock(turf/other) if(!istype(other, /turf/simulated/open)) return BLOCKED #endif + if(((blocks_air & ZONE_BLOCKED) || (other.blocks_air & ZONE_BLOCKED))) + if(z == other.z) + return ZONE_BLOCKED + else + return AIR_BLOCKED + var/result = 0 for(var/atom/movable/M in contents) result |= M.c_airblock(other) diff --git a/code/ZAS/Connection.dm b/code/ZAS/Connection.dm index 37600dadead..2a66aa29e8e 100644 --- a/code/ZAS/Connection.dm +++ b/code/ZAS/Connection.dm @@ -5,7 +5,7 @@ /* Overview: - Connections are made between turfs by air_master.connect(). They represent a single point where two zones converge. + Connections are made between turfs by SSair.connect(). They represent a single point where two zones converge. Class Vars: A - Always a simulated turf. @@ -60,19 +60,19 @@ Class Procs: /connection/New(turf/simulated/A, turf/simulated/B) #ifdef ZASDBG - ASSERT(air_master.has_valid_zone(A)) - //ASSERT(air_master.has_valid_zone(B)) + ASSERT(SSair.has_valid_zone(A)) + //ASSERT(SSair.has_valid_zone(B)) #endif src.A = A src.B = B zoneA = A.zone if(!istype(B)) mark_space() - edge = air_master.get_edge(A.zone,B) + edge = SSair.get_edge(A.zone,B) edge.add_connection(src) else zoneB = B.zone - edge = air_master.get_edge(A.zone,B.zone) + edge = SSair.get_edge(A.zone,B.zone) edge.add_connection(src) /connection/proc/mark_direct() @@ -108,7 +108,7 @@ Class Procs: erase() return - var/block_status = air_master.air_blocked(A,B) + var/block_status = SSair.air_blocked(A,B) if(block_status & AIR_BLOCKED) //world << "Blocked connection." erase() @@ -133,7 +133,7 @@ Class Procs: return else edge.remove_connection(src) - edge = air_master.get_edge(A.zone, B) + edge = SSair.get_edge(A.zone, B) edge.add_connection(src) zoneA = A.zone @@ -155,7 +155,7 @@ Class Procs: //world << "Zones changed, \..." if(A.zone && B.zone) edge.remove_connection(src) - edge = air_master.get_edge(A.zone, B.zone) + edge = SSair.get_edge(A.zone, B.zone) edge.add_connection(src) zoneA = A.zone zoneB = B.zone @@ -165,4 +165,4 @@ Class Procs: return - //world << "valid." \ No newline at end of file + //world << "valid." diff --git a/code/ZAS/ConnectionGroup.dm b/code/ZAS/ConnectionGroup.dm index f377efe74fa..ea388534a0e 100644 --- a/code/ZAS/ConnectionGroup.dm +++ b/code/ZAS/ConnectionGroup.dm @@ -2,7 +2,7 @@ Overview: These are what handle gas transfers between zones and into space. - They are found in a zone's edges list and in air_master.edges. + They are found in a zone's edges list and in SSair.edges. Each edge updates every air tick due to their role in gas transfer. They come in two flavors, /connection_edge/zone and /connection_edge/unsimulated. As the type names might suggest, they handle inter-zone and spacelike connections respectively. @@ -72,10 +72,12 @@ Class Procs: /connection_edge/proc/add_connection(connection/c) coefficient++ if(c.direct()) direct++ - //world << "Connection added: [type] Coefficient: [coefficient]" +// log_debug("Connection added: [type] Coefficient: [coefficient]") + /connection_edge/proc/remove_connection(connection/c) - //world << "Connection removed: [type] Coefficient: [coefficient-1]" +// log_debug("Connection removed: [type] Coefficient: [coefficient-1]") + coefficient-- if(coefficient <= 0) erase() @@ -84,8 +86,8 @@ Class Procs: /connection_edge/proc/contains_zone(zone/Z) /connection_edge/proc/erase() - air_master.remove_edge(src) - //world << "[type] Erased." + SSair.remove_edge(src) +// log_debug("[type] Erased.") /connection_edge/proc/tick() @@ -128,7 +130,8 @@ Class Procs: A.edges.Add(src) B.edges.Add(src) //id = edge_id(A,B) - //world << "New edge between [A] and [B]" +// log_debug("New edge between [A] and [B]") + /connection_edge/zone/add_connection(connection/c) . = ..() @@ -170,18 +173,19 @@ Class Procs: if(equiv) if(direct) erase() - air_master.merge(A, B) + SSair.merge(A, B) return else A.air.equalize(B.air) - air_master.mark_edge_sleeping(src) + SSair.mark_edge_sleeping(src) - air_master.mark_zone_update(A) - air_master.mark_zone_update(B) + SSair.mark_zone_update(A) + SSair.mark_zone_update(B) /connection_edge/zone/recheck() - if(!A.air.compare(B.air)) - air_master.mark_edge_active(src) + // Edges with only one side being vacuum need processing no matter how close. + if(!A.air.compare(B.air, vacuum_exception = 1)) + SSair.mark_edge_active(src) //Helper proc to get connections for a zone. /connection_edge/zone/proc/get_connected_zone(zone/from) @@ -197,7 +201,8 @@ Class Procs: A.edges.Add(src) air = B.return_air() //id = 52*A.id - //world << "New edge from [A] to [B]." +// log_debug("New edge from [A] to [B].") + /connection_edge/unsimulated/add_connection(connection/c) . = ..() @@ -230,13 +235,16 @@ Class Procs: if(equiv) A.air.copy_from(air) - air_master.mark_edge_sleeping(src) + SSair.mark_edge_sleeping(src) - air_master.mark_zone_update(A) + SSair.mark_zone_update(A) /connection_edge/unsimulated/recheck() - if(!A.air.compare(air)) - air_master.mark_edge_active(src) + // Edges with only one side being vacuum need processing no matter how close. + // Note: This handles the glaring flaw of a room holding pressure while exposed to space, but + // does not specially handle the less common case of a simulated room exposed to an unsimulated pressurized turf. + if(!A.air.compare(air, vacuum_exception = 1)) + SSair.mark_edge_active(src) proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) //This implements a simplistic version of the Stefan-Boltzmann law. diff --git a/code/ZAS/ConnectionManager.dm b/code/ZAS/ConnectionManager.dm index 1c101f4b45a..75ba0ad4d57 100644 --- a/code/ZAS/ConnectionManager.dm +++ b/code/ZAS/ConnectionManager.dm @@ -16,7 +16,7 @@ Class Procs: Preferable to accessing the connection directly because it checks validity. place(connection/c, d) - Called by air_master.connect(). Sets the connection in the specified direction to c. + Called by SSair.connect(). Sets the connection in the specified direction to c. update_all() Called after turf/update_air_properties(). Updates the validity of all connections on this turf. @@ -99,4 +99,4 @@ Class Procs: #endif /connection_manager/proc/check(connection/c) - return c && c.valid() \ No newline at end of file + return c && c.valid() diff --git a/code/ZAS/Controller.dm b/code/ZAS/Controller.dm deleted file mode 100644 index cfd6cff4148..00000000000 --- a/code/ZAS/Controller.dm +++ /dev/null @@ -1,375 +0,0 @@ -var/datum/controller/air_system/air_master - -var/tick_multiplier = 2 - -/* - -Overview: - The air controller does everything. There are tons of procs in here. - -Class Vars: - zones - All zones currently holding one or more turfs. - edges - All processing edges. - - tiles_to_update - Tiles scheduled to update next tick. - zones_to_update - Zones which have had their air changed and need air archival. - active_hotspots - All processing fire objects. - - active_zones - The number of zones which were archived last tick. Used in debug verbs. - next_id - The next UID to be applied to a zone. Mostly useful for debugging purposes as zones do not need UIDs to function. - -Class Procs: - - mark_for_update(turf/T) - Adds the turf to the update list. When updated, update_air_properties() will be called. - When stuff changes that might affect airflow, call this. It's basically the only thing you need. - - add_zone(zone/Z) and remove_zone(zone/Z) - Adds zones to the zones list. Does not mark them for update. - - air_blocked(turf/A, turf/B) - Returns a bitflag consisting of: - AIR_BLOCKED - The connection between turfs is physically blocked. No air can pass. - ZONE_BLOCKED - There is a door between the turfs, so zones cannot cross. Air may or may not be permeable. - - has_valid_zone(turf/T) - Checks the presence and validity of T's zone. - May be called on unsimulated turfs, returning 0. - - merge(zone/A, zone/B) - Called when zones have a direct connection and equivalent pressure and temperature. - Merges the zones to create a single zone. - - connect(turf/simulated/A, turf/B) - Called by turf/update_air_properties(). The first argument must be simulated. - Creates a connection between A and B. - - mark_zone_update(zone/Z) - Adds zone to the update list. Unlike mark_for_update(), this one is called automatically whenever - air is returned from a simulated turf. - - equivalent_pressure(zone/A, zone/B) - Currently identical to A.air.compare(B.air). Returns 1 when directly connected zones are ready to be merged. - - get_edge(zone/A, zone/B) - get_edge(zone/A, turf/B) - Gets a valid connection_edge between A and B, creating a new one if necessary. - - has_same_air(turf/A, turf/B) - Used to determine if an unsimulated edge represents a specific turf. - Simulated edges use connection_edge/contains_zone() for the same purpose. - Returns 1 if A has identical gases and temperature to B. - - remove_edge(connection_edge/edge) - Called when an edge is erased. Removes it from processing. - -*/ - - -//Geometry lists -/datum/controller/air_system/var/list/zones = list() -/datum/controller/air_system/var/list/edges = list() - -//Geometry updates lists -/datum/controller/air_system/var/list/tiles_to_update = list() -/datum/controller/air_system/var/list/zones_to_update = list() -/datum/controller/air_system/var/list/active_fire_zones = list() -/datum/controller/air_system/var/list/active_hotspots = list() -/datum/controller/air_system/var/list/active_edges = list() - -/datum/controller/air_system/var/active_zones = 0 - -/datum/controller/air_system/var/current_cycle = 0 -/datum/controller/air_system/var/update_delay = 5 //How long between check should it try to process atmos again. -/datum/controller/air_system/var/failed_ticks = 0 //How many ticks have runtimed? - -/datum/controller/air_system/var/tick_progress = 0 - -/datum/controller/air_system/var/next_id = 1 //Used to keep track of zone UIDs. - -/datum/controller/air_system/proc/Setup() - //Purpose: Call this at the start to setup air groups geometry - // (Warning: Very processor intensive but only must be done once per round) - //Called by: Gameticker/Master controller - //Inputs: None. - //Outputs: None. - - #ifndef ZASDBG - set background = 1 - #endif - - admin_notice("Processing Geometry...", R_DEBUG) - sleep(-1) - - var/start_time = world.timeofday - - var/simulated_turf_count = 0 - - for(var/turf/simulated/S in world) - simulated_turf_count++ - S.update_air_properties() - - admin_notice({"Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds. - -Total Simulated Turfs: [simulated_turf_count] -Total Zones: [zones.len] -Total Edges: [edges.len] -Total Active Edges: [active_edges.len ? "[active_edges.len]" : "None"] -Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count] -"}, R_DEBUG) - - -// spawn Start() - - -/datum/controller/air_system/proc/Start() - //Purpose: This is kicked off by the master controller, and controls the processing of all atmosphere. - //Called by: Master controller - //Inputs: None. - //Outputs: None. - - #ifndef ZASDBG - set background = 1 - #endif - - while(1) - Tick() - sleep(max(5,update_delay*tick_multiplier)) - - -/datum/controller/air_system/proc/Tick() - . = 1 //Set the default return value, for runtime detection. - - current_cycle++ - - //If there are tiles to update, do so. - tick_progress = "updating turf properties" - - var/list/updating - - if(tiles_to_update.len) - updating = tiles_to_update - tiles_to_update = list() - - #ifdef ZASDBG - var/updated = 0 - #endif - - //defer updating of self-zone-blocked turfs until after all other turfs have been updated. - //this hopefully ensures that non-self-zone-blocked turfs adjacent to self-zone-blocked ones - //have valid zones when the self-zone-blocked turfs update. - var/list/deferred = list() - - for(var/turf/T in updating) - //check if the turf is self-zone-blocked - if(T.c_airblock(T) & ZONE_BLOCKED) - deferred += T - continue - - T.update_air_properties() - T.post_update_air_properties() - T.needs_air_update = 0 - #ifdef ZASDBG - T.overlays -= mark - updated++ - #endif - //sleep(1) - - for(var/turf/T in deferred) - T.update_air_properties() - T.post_update_air_properties() - T.needs_air_update = 0 - #ifdef ZASDBG - T.overlays -= mark - updated++ - #endif - - #ifdef ZASDBG - if(updated != updating.len) - tick_progress = "[updating.len - updated] tiles left unupdated." - world << "[tick_progress]" - . = 0 - #endif - - //Where gas exchange happens. - if(.) - tick_progress = "processing edges" - - for(var/connection_edge/edge in active_edges) - edge.tick() - - //Process fire zones. - if(.) - tick_progress = "processing fire zones" - - for(var/zone/Z in active_fire_zones) - Z.process_fire() - - //Process hotspots. - if(.) - tick_progress = "processing hotspots" - - for(var/obj/fire/fire in active_hotspots) - fire.process() - - //Process zones. - if(.) - tick_progress = "updating zones" - - active_zones = zones_to_update.len - if(zones_to_update.len) - updating = zones_to_update - zones_to_update = list() - for(var/zone/zone in updating) - zone.tick() - zone.needs_update = 0 - - if(.) - tick_progress = "success" - -/datum/controller/air_system/proc/add_zone(zone/z) - zones.Add(z) - z.name = "Zone [next_id++]" - mark_zone_update(z) - -/datum/controller/air_system/proc/remove_zone(zone/z) - zones.Remove(z) - zones_to_update.Remove(z) - -/datum/controller/air_system/proc/air_blocked(turf/A, turf/B) - #ifdef ZASDBG - ASSERT(isturf(A)) - ASSERT(isturf(B)) - #endif - var/ablock = A.c_airblock(B) - if(ablock == BLOCKED) return BLOCKED - return ablock | B.c_airblock(A) - -/datum/controller/air_system/proc/has_valid_zone(turf/simulated/T) - #ifdef ZASDBG - ASSERT(istype(T)) - #endif - return istype(T) && T.zone && !T.zone.invalid - -/datum/controller/air_system/proc/merge(zone/A, zone/B) - #ifdef ZASDBG - ASSERT(istype(A)) - ASSERT(istype(B)) - ASSERT(!A.invalid) - ASSERT(!B.invalid) - ASSERT(A != B) - #endif - if(A.contents.len < B.contents.len) - A.c_merge(B) - mark_zone_update(B) - else - B.c_merge(A) - mark_zone_update(A) - -/datum/controller/air_system/proc/connect(turf/simulated/A, turf/simulated/B) - #ifdef ZASDBG - ASSERT(istype(A)) - ASSERT(isturf(B)) - ASSERT(A.zone) - ASSERT(!A.zone.invalid) - //ASSERT(B.zone) - ASSERT(A != B) - #endif - - var/block = air_master.air_blocked(A,B) - if(block & AIR_BLOCKED) return - - var/direct = !(block & ZONE_BLOCKED) - var/space = !istype(B) - - if(!space) - if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || current_cycle == 0))) - merge(A.zone,B.zone) - return - - var - a_to_b = get_dir(A,B) - b_to_a = get_dir(B,A) - - if(!A.connections) A.connections = new - if(!B.connections) B.connections = new - - if(A.connections.get(a_to_b)) return - if(B.connections.get(b_to_a)) return - if(!space) - if(A.zone == B.zone) return - - - var/connection/c = new /connection(A,B) - - A.connections.place(c, a_to_b) - B.connections.place(c, b_to_a) - - if(direct) c.mark_direct() - -/datum/controller/air_system/proc/mark_for_update(turf/T) - #ifdef ZASDBG - ASSERT(isturf(T)) - #endif - if(T.needs_air_update) return - tiles_to_update |= T - #ifdef ZASDBG - T.overlays += mark - #endif - T.needs_air_update = 1 - -/datum/controller/air_system/proc/mark_zone_update(zone/Z) - #ifdef ZASDBG - ASSERT(istype(Z)) - #endif - if(Z.needs_update) return - zones_to_update.Add(Z) - Z.needs_update = 1 - -/datum/controller/air_system/proc/mark_edge_sleeping(connection_edge/E) - #ifdef ZASDBG - ASSERT(istype(E)) - #endif - if(E.sleeping) return - active_edges.Remove(E) - E.sleeping = 1 - -/datum/controller/air_system/proc/mark_edge_active(connection_edge/E) - #ifdef ZASDBG - ASSERT(istype(E)) - #endif - if(!E.sleeping) return - active_edges.Add(E) - E.sleeping = 0 - -/datum/controller/air_system/proc/equivalent_pressure(zone/A, zone/B) - return A.air.compare(B.air) - -/datum/controller/air_system/proc/get_edge(zone/A, zone/B) - - if(istype(B)) - for(var/connection_edge/zone/edge in A.edges) - if(edge.contains_zone(B)) return edge - var/connection_edge/edge = new/connection_edge/zone(A,B) - edges.Add(edge) - edge.recheck() - return edge - else - for(var/connection_edge/unsimulated/edge in A.edges) - if(has_same_air(edge.B,B)) return edge - var/connection_edge/edge = new/connection_edge/unsimulated(A,B) - edges.Add(edge) - edge.recheck() - return edge - -/datum/controller/air_system/proc/has_same_air(turf/A, turf/B) - if(A.oxygen != B.oxygen) return 0 - if(A.nitrogen != B.nitrogen) return 0 - if(A.phoron != B.phoron) return 0 - if(A.carbon_dioxide != B.carbon_dioxide) return 0 - if(A.temperature != B.temperature) return 0 - return 1 - -/datum/controller/air_system/proc/remove_edge(connection_edge/E) - edges.Remove(E) - if(!E.sleeping) active_edges.Remove(E) diff --git a/code/ZAS/Diagnostic.dm b/code/ZAS/Diagnostic.dm index ed94b7d5825..8d088c69816 100644 --- a/code/ZAS/Diagnostic.dm +++ b/code/ZAS/Diagnostic.dm @@ -1,13 +1,13 @@ -client/proc/ZoneTick() +/*client/proc/ZoneTick() set category = "Debug" set name = "Process Atmos" - var/result = air_master.Tick() + var/result = SSair.tick(true) if(result) src << "Sucessfully Processed." else - src << "Failed to process! ([air_master.tick_progress])" + src << "Failed to process! ([SSair.tick_progress])"*/ client/proc/Zone_Info(turf/T as null|turf) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 99174e5ec97..4b346ea5a8b 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -63,7 +63,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) fuel_objs.Cut() if(!fire_tiles.len) - air_master.active_fire_zones.Remove(src) + SSair.active_fire_zones.Remove(src) /zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0) if(!fuel_objs.len) @@ -100,7 +100,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) return 1 fire = new(src, fl) - air_master.active_fire_zones |= zone + SSair.active_fire_zones |= zone var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src zone.fire_tiles |= src @@ -128,7 +128,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) var/turf/simulated/my_tile = loc if(!istype(my_tile) || !my_tile.zone) - if(my_tile.fire == src) + if(my_tile && my_tile.fire == src) my_tile.fire = null RemoveFire() return 1 @@ -197,7 +197,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) set_light(3, 1, color) firelevel = fl - air_master.active_hotspots.Add(src) + SSair.active_hotspots.Add(src) /obj/fire/proc/fire_color(var/env_temperature) var/temperature = max(4000*sqrt(firelevel/vsc.fire_firelevel_multiplier), env_temperature) @@ -206,7 +206,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) /obj/fire/Destroy() RemoveFire() - ..() + return ..() /obj/fire/proc/RemoveFire() var/turf/T = loc @@ -215,7 +215,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) T.fire = null loc = null - air_master.active_hotspots.Remove(src) + SSair.active_hotspots.Remove(src) /turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index 62cad5e469c..9de0ae5bdab 100644 --- a/code/ZAS/Turf.dm +++ b/code/ZAS/Turf.dm @@ -5,10 +5,10 @@ /turf/var/datum/gas_mixture/air /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) - if(graphic_add && graphic_add.len) - overlays += graphic_add - if(graphic_remove && graphic_remove.len) - overlays -= graphic_remove + if (LAZYLEN(graphic_add)) + add_overlay(graphic_add.Copy(), TRUE) // We need to copy because SSoverlay will mutate this list & add appearance objects. + if(LAZYLEN(graphic_remove)) + cut_overlay(graphic_remove.Copy(), TRUE) /turf/proc/update_air_properties() var/block = c_airblock(src) @@ -41,9 +41,9 @@ if(istype(unsim, /turf/simulated)) var/turf/simulated/sim = unsim - if(air_master.has_valid_zone(sim)) + if(SSair.has_valid_zone(sim)) - air_master.connect(sim, src) + SSair.connect(sim, src) /* Simple heuristic for determining if removing the turf from it's zone will not partition the zone (A very bad thing). @@ -52,54 +52,56 @@ */ /turf/simulated/proc/can_safely_remove_from_zone() - #ifdef ZLEVELS - return 0 //TODO generalize this to multiz. - #else - if(!zone) return 1 - + var/check_dirs = get_zone_neighbours(src) var/unconnected_dirs = check_dirs - - for(var/dir in list(NORTHWEST, NORTHEAST, SOUTHEAST, SOUTHWEST)) - + var/to_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) + #ifdef ZLEVELS + to_check += list(NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN) + #endif + for(var/dir in to_check) + //for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH) if((dir & check_dirs) == dir) //check that they are connected by the corner turf var/connected_dirs = get_zone_neighbours(get_step(src, dir)) - if(connected_dirs && (dir & turn(connected_dirs, 180)) == dir) + if(connected_dirs && (dir & reverse_dir[connected_dirs]) == dir) unconnected_dirs &= ~dir //they are, so unflag the cardinals in question - + //it is safe to remove src from the zone if all cardinals are connected by corner turfs return !unconnected_dirs - - #endif //helper for can_safely_remove_from_zone() /turf/simulated/proc/get_zone_neighbours(turf/simulated/T) . = 0 if(istype(T) && T.zone) - for(var/dir in cardinal) + var/to_check = cardinal.Copy() + #ifdef ZLEVELS + to_check += list(UP, DOWN) + #endif + for(var/dir in to_check) var/turf/simulated/other = get_step(T, dir) if(istype(other) && other.zone == T.zone && !(other.c_airblock(T) & AIR_BLOCKED) && get_dist(src, other) <= 1) . |= dir /turf/simulated/update_air_properties() - if(zone && zone.invalid) - c_copy_air() + if(zone && zone.invalid) //this turf's zone is in the process of being rebuilt + c_copy_air() //not very efficient :( zone = null //Easier than iterating through the list at the zone. var/s_block = c_airblock(src) if(s_block & AIR_BLOCKED) #ifdef ZASDBG - if(verbose) world << "Self-blocked." + if(verbose) log_debug("Self-blocked.") //dbg(blocked) #endif if(zone) var/zone/z = zone - + if(can_safely_remove_from_zone()) //Helps normal airlocks avoid rebuilding zones all the time + c_copy_air() //we aren't rebuilding, but hold onto the old air so it can be readded z.remove(src) else z.rebuild() @@ -125,7 +127,7 @@ if(block & AIR_BLOCKED) #ifdef ZASDBG - if(verbose) world << "[d] is blocked." + if(verbose) log_debug("[d] is blocked.") //unsim.dbg(air_blocked, turn(180,d)) #endif @@ -135,7 +137,7 @@ if(r_block & AIR_BLOCKED) #ifdef ZASDBG - if(verbose) world << "[d] is blocked." + if(verbose) log_debug("[d] is blocked.") //dbg(air_blocked, d) #endif @@ -156,17 +158,18 @@ var/turf/simulated/sim = unsim sim.open_directions |= reverse_dir[d] - if(air_master.has_valid_zone(sim)) + if(SSair.has_valid_zone(sim)) //Might have assigned a zone, since this happens for each direction. if(!zone) - //We do not merge if + //We do not merge if // they are blocking us and we are not blocking them, or if // we are blocking them and not blocking ourselves - this prevents tiny zones from forming on doorways. if(((block & ZONE_BLOCKED) && !(r_block & ZONE_BLOCKED)) || ((r_block & ZONE_BLOCKED) && !(s_block & ZONE_BLOCKED))) #ifdef ZASDBG - if(verbose) world << "[d] is zone blocked." + if(verbose) log_debug("[d] is zone blocked.") + //dbg(zone_blocked, d) #endif @@ -180,22 +183,22 @@ #ifdef ZASDBG dbg(assigned) - if(verbose) world << "Added to [zone]" + if(verbose) log_debug("Added to [zone]") #endif else if(sim.zone != zone) #ifdef ZASDBG - if(verbose) world << "Connecting to [sim.zone]" + if(verbose) log_debug("Connecting to [sim.zone]") #endif - air_master.connect(src, sim) + SSair.connect(src, sim) #ifdef ZASDBG - else if(verbose) world << "[d] has same zone." + else if(verbose) log_debug("[d] has same zone.") - else if(verbose) world << "[d] has invalid zone." + else if(verbose) log_debug("[d] has invalid zone.") #endif else @@ -204,7 +207,7 @@ if(!postponed) postponed = list() postponed.Add(unsim) - if(!air_master.has_valid_zone(src)) //Still no zone, make a new one. + if(!SSair.has_valid_zone(src)) //Still no zone, make a new one. var/zone/newzone = new/zone() newzone.add(src) @@ -217,7 +220,7 @@ //At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug. for(var/turf/T in postponed) - air_master.connect(src, T) + SSair.connect(src, T) /turf/proc/post_update_air_properties() if(connections) connections.update_all() @@ -273,7 +276,7 @@ /turf/simulated/return_air() if(zone) if(!zone.invalid) - air_master.mark_zone_update(zone) + SSair.mark_zone_update(zone) return zone.air else if(!air) diff --git a/code/ZAS/Zone.dm b/code/ZAS/Zone.dm index da39b868d3a..2e94a1ed99c 100644 --- a/code/ZAS/Zone.dm +++ b/code/ZAS/Zone.dm @@ -40,23 +40,24 @@ Class Procs: */ -/zone/var/name -/zone/var/invalid = 0 -/zone/var/list/contents = list() -/zone/var/list/fire_tiles = list() -/zone/var/list/fuel_objs = list() +/zone + var/name + var/invalid = 0 + var/list/contents = list() + var/list/fire_tiles = list() + var/list/fuel_objs = list() -/zone/var/needs_update = 0 + var/needs_update = 0 -/zone/var/list/edges = list() + var/list/edges = list() -/zone/var/datum/gas_mixture/air = new + var/datum/gas_mixture/air = new -/zone/var/list/graphic_add = list() -/zone/var/list/graphic_remove = list() + var/list/graphic_add = list() + var/list/graphic_remove = list() /zone/New() - air_master.add_zone(src) + SSair.add_zone(src) air.temperature = TCMB air.group_multiplier = 1 air.volume = CELL_VOLUME @@ -65,17 +66,16 @@ Class Procs: #ifdef ZASDBG ASSERT(!invalid) ASSERT(istype(T)) - ASSERT(!air_master.has_valid_zone(T)) + ASSERT(!SSair.has_valid_zone(T)) #endif - var/datum/gas_mixture/turf_air = T.return_air() add_tile_air(turf_air) T.zone = src - contents.Add(T) + contents += T if(T.fire) var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T fire_tiles.Add(T) - air_master.active_fire_zones |= src + SSair.active_fire_zones |= src if(fuel) fuel_objs += fuel T.update_graphic(air.graphic) @@ -86,8 +86,8 @@ Class Procs: ASSERT(T.zone == src) soft_assert(T in contents, "Lists are weird broseph") #endif - contents.Remove(T) - fire_tiles.Remove(T) + contents -= T + fire_tiles -= T if(T.fire) var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T fuel_objs -= fuel @@ -118,24 +118,27 @@ Class Procs: if(E.contains_zone(into)) continue //don't need to rebuild this edge for(var/turf/T in E.connecting_turfs) - air_master.mark_for_update(T) + SSair.mark_for_update(T) /zone/proc/c_invalidate() invalid = 1 - air_master.remove_zone(src) + SSair.remove_zone(src) #ifdef ZASDBG for(var/turf/simulated/T in contents) T.dbg(invalid_zone) #endif /zone/proc/rebuild() + set waitfor = FALSE if(invalid) return //Short circuit for explosions where rebuild is called many times over. c_invalidate() for(var/turf/simulated/T in contents) T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt //T.dbg(invalid_zone) T.needs_air_update = 0 //Reset the marker so that it will be added to the list. - air_master.mark_for_update(T) + SSair.mark_for_update(T) + + CHECK_TICK /zone/proc/add_tile_air(datum/gas_mixture/tile_air) //air.volume += CELL_VOLUME @@ -146,7 +149,7 @@ Class Procs: air.group_multiplier = contents.len+1 /zone/proc/tick() - if(air.temperature >= PHORON_FLASHPOINT && !(src in air_master.active_fire_zones) && air.check_combustability() && contents.len) + if(air.temperature >= PHORON_FLASHPOINT && !(src in SSair.active_fire_zones) && air.check_combustability() && contents.len) var/turf/T = pick(contents) if(istype(T)) T.create_fire(vsc.fire_firelevel_multiplier) @@ -165,7 +168,7 @@ Class Procs: M << name for(var/g in air.gas) M << "[gas_data.name[g]]: [air.gas[g]]" - M << "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)" + M << "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]�K ([air.temperature - T0C]�C)" M << "O2 per N2: [(air.gas["nitrogen"] ? air.gas["oxygen"]/air.gas["nitrogen"] : "N/A")] Moles: [air.total_moles]" M << "Simulated: [contents.len] ([air.group_multiplier])" //M << "Unsimulated: [unsimulated_contents.len]" @@ -185,4 +188,4 @@ Class Procs: M << "Space Edges: [space_edges] ([space_coefficient] connections)" //for(var/turf/T in unsimulated_contents) - // M << "[T] at ([T.x],[T.y])" \ No newline at end of file + // M << "[T] at ([T.x],[T.y])" diff --git a/code/ZAS/_docs.dm b/code/ZAS/_docs.dm index 1f652ffaaba..8ce1a567547 100644 --- a/code/ZAS/_docs.dm +++ b/code/ZAS/_docs.dm @@ -15,7 +15,7 @@ Every air tick: Important Functions: -air_master.mark_for_update(turf) +SSair.mark_for_update(turf) When stuff happens, call this. It works on everything. You basically don't need to worry about any other functions besides CanPass(). @@ -28,7 +28,7 @@ Notes for people who used ZAS before: */ //#define ZASDBG -//#define ZLEVELS +#define ZLEVELS #define AIR_BLOCKED 1 #define ZONE_BLOCKED 2 diff --git a/code/__defines/ZAS.dm b/code/__defines/ZAS.dm new file mode 100644 index 00000000000..e74a50c0430 --- /dev/null +++ b/code/__defines/ZAS.dm @@ -0,0 +1,9 @@ + +//#define ZASDBG +//#define ZLEVELS + +#define AIR_BLOCKED 1 +#define ZONE_BLOCKED 2 +#define BLOCKED 3 + +#define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct diff --git a/code/__defines/_layers.dm b/code/__defines/_layers.dm new file mode 100644 index 00000000000..e1fbf5f591c --- /dev/null +++ b/code/__defines/_layers.dm @@ -0,0 +1,4 @@ +#define PLANE_SPACE_BACKGROUND -98 +#define PLANE_SPACE_PARALLAX (PLANE_SPACE_BACKGROUND + 1) // -97 +#define PLANE_SPACE_DUST (PLANE_SPACE_PARALLAX + 1) // -96 +#define PLANE_ABOVE_PARALLAX (PLANE_SPACE_BACKGROUND + 3) // -95 diff --git a/code/__defines/atmos.dm b/code/__defines/atmos.dm index cbe47ffaf40..dcc5dae90f0 100644 --- a/code/__defines/atmos.dm +++ b/code/__defines/atmos.dm @@ -27,6 +27,7 @@ #define MAX_HIGH_PRESSURE_DAMAGE 4 // This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :( #define LOW_PRESSURE_DAMAGE 2 // The amount of damage someone takes when in a low pressure area. (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). +#define MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND (MINIMUM_AIR_TO_SUSPEND*R_IDEAL_GAS_EQUATION*T20C)/CELL_VOLUME // Minimum pressure difference between zones to suspend #define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 // Minimum ratio of air that must move to/from a tile to suspend group processing #define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Minimum amount of air that has to move before a group processing can be suspended #define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Either this must be active diff --git a/code/__defines/btime.dm b/code/__defines/btime.dm deleted file mode 100644 index 149b0b2dd58..00000000000 --- a/code/__defines/btime.dm +++ /dev/null @@ -1,18 +0,0 @@ -// Comment this out if the external btime library is unavailable -#define PRECISE_TIMER_AVAILABLE - -#ifdef PRECISE_TIMER_AVAILABLE -var/global/__btime__libName = "btime.[world.system_type==MS_WINDOWS?"dll":"so"]" -#define TimeOfHour (__extern__timeofhour) -#define __extern__timeofhour text2num(call(__btime__libName, "gettime")()) -/hook/startup/proc/checkbtime() - try - // This will always return 1 unless the btime library cannot be accessed - if(TimeOfHour || 1) return 1 - catch(var/exception/e) - log_to_dd("PRECISE_TIMER_AVAILABLE is defined in btime.dm, but calling the btime library failed: [e]") - log_to_dd("This is a fatal error. The world will now shut down.") - del(world) -#else -#define TimeOfHour (world.timeofday % 36000) -#endif diff --git a/code/__defines/callback.dm b/code/__defines/callback.dm new file mode 100644 index 00000000000..18059a60839 --- /dev/null +++ b/code/__defines/callback.dm @@ -0,0 +1,4 @@ +#define GLOBAL_PROC "some_magic_bullshit" + +#define CALLBACK new /datum/callback +#define INVOKE_ASYNC ImmediateInvokeAsync diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/__defines/hydroponics.dm similarity index 98% rename from code/modules/hydroponics/_hydro_setup.dm rename to code/__defines/hydroponics.dm index 4641aa3ace8..c67f02582f5 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/__defines/hydroponics.dm @@ -56,4 +56,4 @@ #define TRAIT_BIOLUM 36 #define TRAIT_BIOLUM_COLOUR 37 #define TRAIT_IMMUTABLE 38 -#define TRAIT_FLESH_COLOUR 39 \ No newline at end of file +#define TRAIT_FLESH_COLOUR 39 diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm index ca07736717e..e3148e1d2d1 100644 --- a/code/__defines/lighting.dm +++ b/code/__defines/lighting.dm @@ -1,13 +1,19 @@ #define LIGHTING_INTERVAL 2 // Frequency, in 1/10ths of a second, of the lighting process. #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone -#define LIGHTING_ROUND_VALUE 1 / 128 //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. +#define LIGHTING_ROUND_VALUE 1 / 200 //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. #define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects -#define LIGHTING_BASE_ICON_STATE "matrix" +#define LIGHTING_BASE_ICON_STATE "matrix" // icon_state used for normal color-matrix based lighting overlays. +#define LIGHTING_STATION_ICON_STATE "tubedefault" // icon_state used for lighting overlays that are just displaying standard station lighting. +#define LIGHTING_DARKNESS_ICON_STATE "black" // icon_state used for lighting overlays with no luminosity. #define LIGHTING_SOFT_THRESHOLD 0.001 // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting overlays. +// If defined, a tiny random number will be added to lighting matrixes to prevent a memory leak bug in v510 and below. +// Enabling this disables lighting rounding. +#define LIGHTING_USE_MEMORY_HACK + // If I were you I'd leave this alone. #define LIGHTING_BASE_MATRIX \ list \ @@ -41,6 +47,12 @@ #define CL_MATRIX_CB 19 #define CL_MATRIX_CA 20 +// This color of overlay is very common - most of the station is this color when lit fully. +// Tube lights are a bluish-white, so we can't just assume 1-1-1 is full-illumination. +#define LIGHTING_DEFAULT_TUBE_R 0.96 +#define LIGHTING_DEFAULT_TUBE_G 1 +#define LIGHTING_DEFAULT_TUBE_B 1 + //Some defines to generalise colours used in lighting. //Important note on colors. Colors can end up significantly different from the basic html picture, especially when saturated #define LIGHT_COLOR_RED "#FA8282" //Warm but extremely diluted red. rgb(250, 130, 130) @@ -91,3 +103,7 @@ // Just so we can avoid unneeded proc calls when profiling is disabled. #define L_PROF(O,T) if (lighting_profiling) {lprof_write(O,T);} + +#if !defined(LIGHTING_USE_MEMORY_HACK) && DM_VERSION < 511 +#warn You appear to be using a pre-511 version of BYOND, but have the memory leak hack disabled. You may encounter server crashes due to a memory leak in BYOND 510 and below's handling of color matrixes. +#endif diff --git a/code/__defines/lists.dm b/code/__defines/lists.dm new file mode 100644 index 00000000000..db32616b7a9 --- /dev/null +++ b/code/__defines/lists.dm @@ -0,0 +1,8 @@ +#define LAZYINITLIST(L) if (!L) L = list() + +#define UNSETEMPTY(L) if (L && !L.len) L = null +#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } +#define LAZYADD(L, I) if(!L) { L = list(); } L += I; +#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null) +#define LAZYLEN(L) length(L) +#define LAZYCLEARLIST(L) if(L) L.Cut() diff --git a/code/__defines/master_controller.dm b/code/__defines/master_controller.dm new file mode 100644 index 00000000000..9e91bb4c42d --- /dev/null +++ b/code/__defines/master_controller.dm @@ -0,0 +1,78 @@ +#define TICK_LIMIT_RUNNING 80 +#define TICK_LIMIT_TO_RUN 78 +#define TICK_LIMIT_MC 70 +#define TICK_LIMIT_MC_INIT config.mc_init_tick_limit +#define TICK_LIMIT_MC_INIT_DEFAULT 98 + +#define MC_TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT ? pause() : 0 ) + +// For multi-step subsystems that want to split their tick into multiple parts. +#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = CURRENT_TICKLIMIT; var/split_tick_phases = ##phase_count +#define MC_SPLIT_TICK \ + if(split_tick_phases > 1){\ + CURRENT_TICKLIMIT = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\ + --split_tick_phases;\ + } else {\ + CURRENT_TICKLIMIT = original_tick_limit;\ + } + +// Used to smooth out costs to try and avoid oscillation. +#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current)) +#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current)) +#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current)) + + +#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;} + + +//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) + +//subsystem should fire during pre-game lobby. +#define SS_FIRE_IN_LOBBY 1 + +//subsystem does not initialize. +#define SS_NO_INIT 2 + +//subsystem does not fire. +// (like can_fire = 0, but keeps it from getting added to the processing subsystems list) +// (Requires a MC restart to change) +#define SS_NO_FIRE 4 + +//subsystem only runs on spare cpu (after all non-background subsystems have ran that tick) +// SS_BACKGROUND has its own priority bracket +#define SS_BACKGROUND 8 + +//subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background)) +#define SS_NO_TICK_CHECK 16 + +//Treat wait as a tick count, not DS, run every wait ticks. +// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems) +// (implies SS_FIRE_IN_LOBBY because of how it works) +// (overrides SS_BACKGROUND) +// This is designed for basically anything that works as a mini-mc (like SStimer) +#define SS_TICKER 32 + +//keep the subsystem's timing on point by firing early if it fired late last fire because of lag +// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds. +#define SS_KEEP_TIMING 64 + +//Calculate its next fire after its fired. +// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be) +// This flag overrides SS_KEEP_TIMING +#define SS_POST_FIRE_TIMING 128 + +// Don't display in processes panel. +#define SS_NO_DISPLAY 256 + +//SUBSYSTEM STATES +#define SS_IDLE 0 //aint doing shit. +#define SS_QUEUED 1 //queued to run +#define SS_RUNNING 2 //actively running +#define SS_PAUSED 3 //paused by mc_tick_check +#define SS_SLEEPING 4 //fire() slept. +#define SS_PAUSING 5 //in the middle of pausing + +// Subsystem init-states, used for the initialization MC panel. +#define SS_INITSTATE_NONE 0 +#define SS_INITSTATE_STARTED 1 +#define SS_INITSTATE_DONE 2 diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index f0b5646b9a6..54db1b4f758 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -267,14 +267,8 @@ #define LAYER_ABOVE_TABLE 2.81 // Stoplag. -#define TICK_LIMIT 80 -#define TICK_CHECK ( world.tick_usage > TICK_LIMIT ? stoplag() : 0 ) -#define CHECK_TICK if (world.tick_usage > TICK_LIMIT) stoplag() - -// Effect Systems. -#define EFFECT_CONTINUE 0 // Keep processing. -#define EFFECT_HALT 1 // Stop processing, but don't qdel. -#define EFFECT_DESTROY 2 // qdel. +#define TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT ? stoplag() : 0 ) +#define CHECK_TICK if (world.tick_usage > CURRENT_TICKLIMIT) stoplag() // Performance bullshit. @@ -286,10 +280,11 @@ ) #define get_turf(A) (get_step(A, 0)) -#define QDELETED(TARGET) (!TARGET || TARGET.gcDestroyed) -#define QDEL_NULL(item) qdel(item); item = null -// Shim until addtimer is merged or I figure out if it is safe to use scheduler for this. -#define QDEL_IN(OBJ, TIME) spawn(TIME) qdel(OBJ) + +#define UNTIL(X) while(!(X)) stoplag() + +#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day +#define DEBUG_REF(D) (D ? "[D]|\ref[D]" : "NULL") #define DEBUG_REF(D) (D ? "\ref[D]|[D] ([D.type])" : "NULL") @@ -299,3 +294,17 @@ #define OVEN 0x4 #define CANDYMAKER 0x8 #define CEREALMAKER 0x10 + +// MultiZAS directions. +#define NORTHUP (NORTH|UP) +#define EASTUP (EAST|UP) +#define SOUTHUP (SOUTH|UP) +#define WESTUP (WEST|UP) +#define NORTHDOWN (NORTH|DOWN) +#define EASTDOWN (EAST|DOWN) +#define SOUTHDOWN (SOUTH|DOWN) +#define WESTDOWN (WEST|DOWN) + +#define NL_NOT_DISABLED 0 +#define NL_TEMPORARY_DISABLE 1 +#define NL_PERMANENT_DISABLE 2 diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 695ab933aeb..2fbe0f6c334 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -183,4 +183,6 @@ #define TYPE_HUMANOID 4//Humans, skrell, unathi, tajara, vaurca, diona, IPC, vox #define TYPE_WIERD 8//Slimes, constructs, demons, and other creatures of a magical or bluespace nature. - +// Maximum number of chickens allowed at once. +// If the number of chickens on the map exceeds this, laid eggs will not hatch. +#define MAX_CHICKENS 50 diff --git a/code/__defines/process_scheduler.dm b/code/__defines/process_scheduler.dm deleted file mode 100644 index d2dfe2505d6..00000000000 --- a/code/__defines/process_scheduler.dm +++ /dev/null @@ -1,34 +0,0 @@ -// Process status defines -#define PROCESS_STATUS_IDLE 1 -#define PROCESS_STATUS_QUEUED 2 -#define PROCESS_STATUS_RUNNING 3 -#define PROCESS_STATUS_MAYBE_HUNG 4 -#define PROCESS_STATUS_PROBABLY_HUNG 5 -#define PROCESS_STATUS_HUNG 6 - -// Process time thresholds -#define PROCESS_DEFAULT_HANG_WARNING_TIME 300 // 30 seconds -#define PROCESS_DEFAULT_HANG_ALERT_TIME 600 // 60 seconds -#define PROCESS_DEFAULT_HANG_RESTART_TIME 900 // 90 seconds -#define PROCESS_DEFAULT_SCHEDULE_INTERVAL 50 // 50 ticks -#define PROCESS_DEFAULT_TICK_ALLOWANCE 20 // 20% of one tick - -// SCHECK macros -// This references src directly to work around a weird bug with try/catch -#define SCHECK sleepCheck() - -#define F_SCHECK \ - calls_since_last_scheck = 0; \ - if (killed) CRASH("A killed process is still running somehow..."); \ - if (hung) { \ - handleHung(); \ - CRASH("Process [name] hung and was restarted."); \ - } \ - if (world.tick_usage > 100 || (world.tick_usage - tick_start) > tick_allowance) { \ - sleep(world.tick_lag); \ - cpu_defer_count++; \ - last_slept = TimeOfHour; \ - tick_start = world.tick_usage; \ - } - -#define PSCHED_CHECK_TICK (world.tick_usage > 100 || (world.tick_usage - tick_start) > tick_allowance) diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm new file mode 100644 index 00000000000..cc25d44c01e --- /dev/null +++ b/code/__defines/qdel.dm @@ -0,0 +1,23 @@ +//defines that give qdel hints. these can be given as a return in destory() or by calling + + +#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion. +#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory. +#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it. +#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference. +#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste. +#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm. + //if TESTING is enabled, qdel will call this object's find_references() verb. +#define QDEL_HINT_POOL 6 //qdel should pool this object instead of deleting it. +//defines for the gcDestroyed var + +#define GC_QUEUED_FOR_QUEUING -1 +#define GC_QUEUED_FOR_HARD_DEL -2 +#define GC_CURRENTLY_BEING_QDELETED -3 + +#define QDELING(X) (X.gcDestroyed) +#define QDELETED(X) (!X || X.gcDestroyed) +#define QDESTROYING(X) (!X || X.gcDestroyed == GC_CURRENTLY_BEING_QDELETED) + +#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE) +#define QDEL_NULL(item) qdel(item); item = null diff --git a/code/__defines/radio.dm b/code/__defines/radio.dm new file mode 100644 index 00000000000..c4e44d4420d --- /dev/null +++ b/code/__defines/radio.dm @@ -0,0 +1,74 @@ +var/const/RADIO_LOW_FREQ = 1200 +var/const/PUBLIC_LOW_FREQ = 1441 +var/const/PUBLIC_HIGH_FREQ = 1489 +var/const/RADIO_HIGH_FREQ = 1600 + +var/const/BOT_FREQ = 1447 +var/const/COMM_FREQ = 1353 +var/const/ERT_FREQ = 1345 +var/const/AI_FREQ = 1343 +var/const/DTH_FREQ = 1341 +var/const/SYND_FREQ = 1213 +var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency. + +// department channels +var/const/PUB_FREQ = 1459 +var/const/SEC_FREQ = 1359 +var/const/ENG_FREQ = 1357 +var/const/MED_FREQ = 1355 +var/const/SCI_FREQ = 1351 +var/const/SRV_FREQ = 1349 +var/const/SUP_FREQ = 1347 + +// internal department channels +var/const/MED_I_FREQ = 1485 +var/const/SEC_I_FREQ = 1475 + +var/list/radiochannels = list( + "Common" = PUB_FREQ, + "Science" = SCI_FREQ, + "Command" = COMM_FREQ, + "Medical" = MED_FREQ, + "Engineering" = ENG_FREQ, + "Security" = SEC_FREQ, + "Response Team" = ERT_FREQ, + "Special Ops" = DTH_FREQ, + "Mercenary" = SYND_FREQ, + "Supply" = SUP_FREQ, + "Service" = SRV_FREQ, + "AI Private" = AI_FREQ, + "Entertainment" = ENT_FREQ, + "Medical(I)" = MED_I_FREQ, + "Security(I)" = SEC_I_FREQ +) + +// central command channels, i.e deathsquid & response teams +var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ) + +// Antag channels, i.e. Syndicate +var/list/ANTAG_FREQS = list(SYND_FREQ) + +//Department channels, arranged lexically +var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ, ENT_FREQ) + +#define TRANSMISSION_WIRE 0 +#define TRANSMISSION_RADIO 1 + +/* filters */ +//When devices register with the radio controller, they might register under a certain filter. +//Other devices can then choose to send signals to only those devices that belong to a particular filter. +//This is done for performance, so we don't send signals to lots of machines unnecessarily. + +//This filter is special because devices belonging to default also recieve signals sent to any other filter. +var/const/RADIO_DEFAULT = "radio_default" + +var/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms +var/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms +var/const/RADIO_CHAT = "radio_telecoms" +var/const/RADIO_ATMOSIA = "radio_atmos" +var/const/RADIO_NAVBEACONS = "radio_navbeacon" +var/const/RADIO_AIRLOCK = "radio_airlock" +var/const/RADIO_SECBOT = "radio_secbot" +var/const/RADIO_MULEBOT = "radio_mulebot" +var/const/RADIO_MAGNETS = "radio_magnet" +var/const/RADIO_ARRIVALS = "radio_arrvl" diff --git a/code/__defines/subsystem-defines.dm b/code/__defines/subsystem-defines.dm new file mode 100644 index 00000000000..9ab094a6e0d --- /dev/null +++ b/code/__defines/subsystem-defines.dm @@ -0,0 +1,62 @@ +// -- SSprocessing stuff -- +#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = 1;Processor.processing += Datum} +#define STOP_PROCESSING(Processor, Datum) Datum.isprocessing = 0;Processor.processing -= Datum + + +// -- SStimer stuff -- +//Don't run if there is an identical unique timer active +#define TIMER_UNIQUE 0x1 + +//For unique timers: Replace the old timer rather then not start this one +#define TIMER_OVERRIDE 0x2 + +//Timing should be based on how timing progresses on clients, not the sever. +// tracking this is more expensive, +// should only be used in conjuction with things that have to progress client side, such as animate() or sound() +#define TIMER_CLIENT_TIME 0x4 + +//Timer can be stopped using deltimer() +#define TIMER_STOPPABLE 0x8 + +//To be used with TIMER_UNIQUE +//prevents distinguishing identical timers with the wait variable +#define TIMER_NO_HASH_WAIT 0x10 + +//number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something +#define TIMER_NO_INVOKE_WARNING 600 + +// -- SSatoms stuff -- +// SSatoms Initialization state. +#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize +#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE) +#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE) + +// Initialize() hints for SSatoms. +#define INITIALIZE_HINT_NORMAL 0 //Nothing happens +#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize +#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom +#define INITIALIZE_HINT_LATEQDEL 3 //Call qdel on the atom instead of LateInitialize + + +// -- SSoverlays -- +#define CUT_OVERLAY_IN(ovr, time) addtimer(CALLBACK(src, /atom/.proc/cut_overlay, ovr), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME) + + +// -- SSticker -- +#define ROUND_IS_STARTED (SSticker.current_state >= GAME_STATE_PLAYING) + +// -- SSeffects -- +// tick/process() return vals. +#define EFFECT_CONTINUE 0 // Keep processing. +#define EFFECT_HALT 1 // Stop processing, but don't qdel. +#define EFFECT_DESTROY 2 // qdel. + +// Effect helpers. +#define QUEUE_EFFECT(effect) if (!effect.isprocessing) {effect.isprocessing = TRUE; SSeffects.effect_systems += effect;} +#define QUEUE_VISUAL(visual) if (!visual.isprocessing) {visual.isprocessing = TRUE; SSeffects.visuals += visual;} +#define STOP_EFFECT(effect) effect.isprocessing = FALSE; SSeffects.effect_systems -= effect; +#define STOP_VISUAL(visual) visual.isprocessing = FALSE; SSeffects.visuals -= visual; + +// -- SSopenturf -- +#define CHECK_OO_EXISTENCE(OO) if (OO && !istype(OO.loc, /turf/simulated/open)) { qdel(OO); } +#define UPDATE_OO_IF_PRESENT CHECK_OO_EXISTENCE(bound_overlay); if (bound_overlay) { update_oo(); } diff --git a/code/__defines/subsystem-priority.dm b/code/__defines/subsystem-priority.dm new file mode 100644 index 00000000000..eaeab30c9b8 --- /dev/null +++ b/code/__defines/subsystem-priority.dm @@ -0,0 +1,65 @@ +#define SS_INIT_MISC_FIRST 16 +#define SS_INIT_SEEDS 15 +#define SS_INIT_ASTEROID 14 // Asteroid generation. +#define SS_INIT_SHUTTLE 13 // Shuttle setup. +#define SS_INIT_PARALLAX 12 // Parallax image cache generation. Must run before ghosts are able to join, but after SSatoms. +#define SS_INIT_ATOMS 11 // World initialization. Will trigger lighting updates. +#define SS_INIT_CARGO 10 // Random warehouse generation. Runs after SSatoms because it assumes objects are initialized when it runs. +#define SS_INIT_PIPENET 9 // Initial pipenet build. +#define SS_INIT_MACHINERY 8 // Machinery prune and powernet build. +#define SS_INIT_AIR 7 // Air setup and pre-bake. +#define SS_INIT_NIGHT 6 // Nightmode controller. Will trigger lighting updates. +#define SS_INIT_SMOOTHING 5 // Object icon smoothing. Creates overlays. +#define SS_INIT_OVERLAY 4 // Overlay flush. +#define SS_INIT_OPENTURF 3 // Openturf should be after smoothing so it copies the smoothed turfs. Causes lighting updates. +#define SS_INIT_MISC 2 // Default. +#define SS_INIT_LIGHTING 1 // Generation of lighting overlays and pre-bake. +#define SS_INIT_LOBBY 0 // Ghosts can join here. + +// Something to remember when setting priorities: SS_TICKER runs before Normal, which runs before SS_BACKGROUND. +// Each group has its own priority bracket. +// SS_BACKGROUND handles high server load differently than Normal and SS_TICKER do. + +// SS_TICKER +#define SS_PRIORITY_OVERLAY 500 // Applies overlays. May cause overlay pop-in if it gets behind. +#define SS_PRIORITY_ORBIT 30 // Orbit datum updates. +#define SS_PRIORITY_SMOOTHING 35 // Smooth turf generation. + +// Normal +#define SS_PRIORITY_TICKER 200 // Gameticker. +#define SS_PRIORITY_MOB 150 // Mob Life(). +#define SS_PRIORITY_NANOUI 120 // UI updates. +#define SS_PRIORITY_VOTE 110 +#define SS_PRIORITY_MACHINERY 95 // Machinery + powernet ticks. +#define SS_PRIORITY_CHEMISTRY 90 // Multi-tick chemical reactions. +#define SS_PRIORITY_SHUTTLE 85 // Shuttle movement. +#define SS_PRIORITY_CALAMITY 80 // Singularity, Tesla, Nar'sie, blob, etc. +#define SS_PRIORITY_AIR 75 // ZAS processing. +#define SS_PRIORITY_EVENT 70 +#define SS_PRIORITY_AIRFLOW 65 // Handles object movement due to ZAS airflow. +#define SS_PRIORITY_DISEASE 60 // Disease ticks. +#define SS_PRIORITY_ALARMS 50 +#define SS_PRIORITY_PLANTS 40 // Spreading plant effects. +#define SS_PRIORITY_ICON_UPDATE 30 // Queued icon updates. Mostly used by APCs. +#define SS_PRIORITY_LIGHTING 20 // Queued lighting engine updates. +#define SS_PRIORITY_AIRFLOW 15 + +// SS_BACKGROUND +#define SS_PRIORITY_EFFECTS 10 // Effect master (Sparks) +#define SS_PRIORITY_OPENTURF 9 // Open turf icon generation/updates. +#define SS_PRIORITY_EXPLOSIVES 8 // Explosion processor. Doesn't have much effect on explosion tick-checking. +#define SS_PRIORITY_WIRELESS 7 +#define SS_PRIORITY_ARRIVALS 6 // Centcomm arrivals shuttle auto-launch. +#define SS_PRIORITY_MODIFIER 5 + +// SS_BACKGROUND +#define SS_PRIORITY_PROCESSING 11 // Generic datum processor. Replaces objects processor. +#define SS_PRIORITY_OBJECTS 10 +#define SS_PRIORITY_DISPOSALS 9 // Disposal holder movement. +#define SS_PRIORITY_EFFECTS 8 // Effect master (Sparks) +#define SS_PRIORITY_EXPLOSIVES 7 // Explosion processor. Doesn't have much effect on explosion tick-checking. +#define SS_PRIORITY_WIRELESS 6 // Handles pairing of wireless devices. Usually will be asleep. +#define SS_PRIORITY_NIGHT 5 // Nightmode. +#define SS_PRIORITY_STATISTICS 4 // Player population polling & AFK kick. +#define SS_PRIORITY_SUN 3 // Sun movement & Solar tracking. +#define SS_PRIORITY_GARBAGE 2 // Garbage collection. diff --git a/code/_helpers/areas.dm b/code/_helpers/areas.dm index ccf7ea2f2a3..cbaefbda25e 100644 --- a/code/_helpers/areas.dm +++ b/code/_helpers/areas.dm @@ -1,18 +1,50 @@ //Takes: Area type as text string or as typepath OR an instance of the area. -//Returns: A list of all turfs in areas of that type in the world. -/proc/get_area_turfs(var/areatype, var/list/predicates) - if(!areatype) return null - if(istext(areatype)) areatype = text2path(areatype) - if(isarea(areatype)) +//Returns: A list of all turfs in areas of that type of that type in the world. +/proc/get_area_turfs(areatype, var/list/predicates, target_z = 0, subtypes=TRUE) + if(istext(areatype)) + areatype = text2path(areatype) + else if(isarea(areatype)) var/area/areatemp = areatype areatype = areatemp.type + else if(!ispath(areatype)) + return null - var/list/turfs = new/list() - for(var/areapath in typesof(areatype)) - var/area/A = locate(areapath) - for(var/turf/T in A.contents) - if(!predicates || all_predicates_true(list(T), predicates)) - turfs += T + var/list/turfs = list() + if(subtypes) + var/list/cache = typecacheof(areatype) + for(var/V in all_areas) + var/area/A = V + if(!cache[A.type]) + continue + for(var/turf/T in A) + if(target_z == 0 || target_z == T.z) + if (predicates && predicates.len) + var/predicates_true = TRUE + for (var/predicate in predicates) + if (!call(predicate)(T)) + predicates_true = FALSE + break + if (predicates_true) + turfs += T + else + turfs += T + else + for(var/V in all_areas) + var/area/A = V + if(A.type != areatype) + continue + for(var/turf/T in A) + if (target_z == 0 || target_z == T.z) + if (predicates && predicates.len) + var/predicates_true = TRUE + for (var/predicate in predicates) + if (!call(predicate)(T)) + predicates_true = FALSE + break + if (predicates_true) + turfs += T + else + turfs += T return turfs /proc/pick_area_turf(var/areatype, var/list/predicates) diff --git a/code/_helpers/datum_pool.dm b/code/_helpers/datum_pool.dm index da932afe870..fe64642701d 100644 --- a/code/_helpers/datum_pool.dm +++ b/code/_helpers/datum_pool.dm @@ -22,11 +22,9 @@ if(length(masterdatumPool[type]) <= 0) #ifdef DEBUG_DATUM_POOL - if(ticker) - to_chat(world, text("DEBUG_DATUM_POOL: new proc has been called ([] | []).", type, list2params(B))) + to_chat(world, text("DEBUG_DATUM_POOL: new proc has been called ([] | []).", type, list2params(B))) #endif - //so the GC knows we're pooling this type. if(isnull(masterdatumPool[type])) masterdatumPool[type] = list() @@ -71,7 +69,7 @@ to_chat(world, text("DEBUG_DATUM_POOL: returnToPool([]) exceeds [] discarding...", D.type, MAINTAINING_OBJECT_POOL_COUNT)) #endif - qdel(D) + qdel(D, force = TRUE) return if(isnull(masterdatumPool[D.type])) @@ -136,6 +134,10 @@ if (!check_rights(R_DEBUG)) return + if (!LAZYLEN(pooledvariables)) + usr << "No objects have been added to the datum pool." + return + var/type = input("What is the typepath for the pooled object variables you wish to view?", "Pooled Variables") in pooledvariables|null if(!type) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 85548fe6352..766b6db3b54 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -394,13 +394,6 @@ proc/isInSight(var/atom/A, var/atom/B) for(var/client/C in group) C.screen -= O -/proc/flick_overlay(image/I, list/show_to, duration) - for(var/client/C in show_to) - C.images += I - spawn(duration) - for(var/client/C in show_to) - C.images -= I - datum/projectile_data var/src_x var/src_y @@ -566,3 +559,20 @@ datum/projectile_data /proc/round_is_spooky(var/spookiness_threshold = config.cult_ghostwriter_req_cultists) return (cult.current_antagonists.len > spookiness_threshold) + +/proc/remove_images_from_clients(image/I, list/show_to) + for(var/client/C in show_to) + C.images -= I + +/proc/flick_overlay(image/I, list/show_to, duration) + for(var/client/C in show_to) + C.images += I + addtimer(CALLBACK(GLOBAL_PROC, /.proc/remove_images_from_clients, I, show_to), duration) + +/proc/flick_overlay_view(image/I, atom/target, duration) //wrapper for the above, flicks to everyone who can see the target atom + var/list/viewing = list() + for(var/m in viewers(target)) + var/mob/M = m + if(M.client) + viewing += M.client + flick_overlay(I, viewing, duration) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 50b90f4b858..19145be8931 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -96,7 +96,7 @@ var/global/list/cloaking_devices = list() var/list/paths //Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name - paths = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair + paths = subtypesof(/datum/sprite_accessory/hair) for(var/path in paths) var/datum/sprite_accessory/hair/H = new path() hair_styles_list[H.name] = H @@ -108,7 +108,7 @@ var/global/list/cloaking_devices = list() hair_styles_female_list += H.name //Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name - paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair + paths = subtypesof(/datum/sprite_accessory/facial_hair) for(var/path in paths) var/datum/sprite_accessory/facial_hair/H = new path() facial_hair_styles_list[H.name] = H @@ -120,21 +120,22 @@ var/global/list/cloaking_devices = list() facial_hair_styles_female_list += H.name //Surgery Steps - Initialize all /datum/surgery_step into a list - paths = typesof(/datum/surgery_step)-/datum/surgery_step + paths = subtypesof(/datum/surgery_step) for(var/T in paths) var/datum/surgery_step/S = new T surgery_steps += S - sort_surgeries() + + sortTim(surgery_steps, /proc/cmp_surgery) //List of job. I can't believe this was calculated multiple times per tick! - paths = typesof(/datum/job)-/datum/job + paths = subtypesof(/datum/job) paths -= exclude_jobs for(var/T in paths) var/datum/job/J = new T joblist[J.title] = J //Languages and species. - paths = typesof(/datum/language)-/datum/language + paths = subtypesof(/datum/language) for(var/T in paths) var/datum/language/L = new T all_languages[L.name] = L @@ -145,7 +146,7 @@ var/global/list/cloaking_devices = list() language_keys[lowertext(L.key)] = L var/rkey = 0 - paths = typesof(/datum/species)-/datum/species + paths = subtypesof(/datum/species) for(var/T in paths) rkey++ var/datum/species/S = new T @@ -158,7 +159,7 @@ var/global/list/cloaking_devices = list() whitelisted_species += S.name //Posters - paths = typesof(/datum/poster) - /datum/poster + paths = subtypesof(/datum/poster) for(var/T in paths) var/datum/poster/P = new T poster_designs += P diff --git a/code/_helpers/icon_smoothing.dm b/code/_helpers/icon_smoothing.dm new file mode 100644 index 00000000000..94862eeb8a0 --- /dev/null +++ b/code/_helpers/icon_smoothing.dm @@ -0,0 +1,429 @@ + +//generic (by snowflake) tile smoothing code; smooth your icons with this! +/* + Each tile is divided in 4 corners, each corner has an image associated to it; the tile is then overlayed by these 4 images + To use this, just set your atom's 'smooth' var to 1. If your atom can be moved/unanchored, set its 'can_be_unanchored' var to 1. + If you don't want your atom's icon to smooth with anything but atoms of the same type, set the list 'canSmoothWith' to null; + Otherwise, put all types you want the atom icon to smooth with in 'canSmoothWith' INCLUDING THE TYPE OF THE ATOM ITSELF. + + Each atom has its own icon file with all the possible corner states. See 'smooth_wall.dmi' for a template. + + DIAGONAL SMOOTHING INSTRUCTIONS + To make your atom smooth diagonally you need all the proper icon states (see 'smooth_wall.dmi' for a template) and + to add the 'SMOOTH_DIAGONAL' flag to the atom's smooth var (in addition to either SMOOTH_TRUE or SMOOTH_MORE). + + For turfs, what appears under the diagonal corners depends on the turf that was in the same position previously: if you make a wall on + a plating floor, you will see plating under the diagonal wall corner, if it was space, you will see space. + + If you wish to map a diagonal wall corner with a fixed underlay, you must configure the turf's 'fixed_underlay' list var, like so: + fixed_underlay = list("icon"='icon_file.dmi', "icon_state"="iconstatename") + A non null 'fixed_underlay' list var will skip copying the previous turf appearance and always use the list. If the list is + not set properly, the underlay will default to regular floor plating. + + To see an example of a diagonal wall, see '/turf/closed/wall/shuttle' and its subtypes. +*/ + +//Redefinitions of the diagonal directions so they can be stored in one var without conflicts +#define N_NORTH 2 +#define N_SOUTH 4 +#define N_EAST 16 +#define N_WEST 256 +#define N_NORTHEAST 32 +#define N_NORTHWEST 512 +#define N_SOUTHEAST 64 +#define N_SOUTHWEST 1024 + +#define SMOOTH_FALSE 0 //not smooth +#define SMOOTH_TRUE 1 //smooths with exact specified types or just itself +#define SMOOTH_MORE 2 //smooths with all subtypes of specified types or just itself (this value can replace SMOOTH_TRUE) +#define SMOOTH_DIAGONAL 4 //if atom should smooth diagonally, this should be present in 'smooth' var +#define SMOOTH_BORDER 8 //atom will smooth with the borders of the map +#define SMOOTH_QUEUED 16 //atom is currently queued to smooth. + +#define NULLTURF_BORDER 123456789 + +#define DEFAULT_UNDERLAY_ICON 'icons/turf/floors.dmi' +#define DEFAULT_UNDERLAY_ICON_STATE "plating" +#define DEFAULT_UNDERLAY_IMAGE image(DEFAULT_UNDERLAY_ICON, DEFAULT_UNDERLAY_ICON_STATE) + +/atom + var/smooth = SMOOTH_FALSE + var/top_left_corner + var/top_right_corner + var/bottom_left_corner + var/bottom_right_corner + var/list/canSmoothWith = null // TYPE PATHS I CAN SMOOTH WITH~~~~~ If this is null and atom is smooth, it smooths only with itself + +/atom/movable/var/can_be_unanchored = 0 +/turf/var/list/fixed_underlay = null + +/proc/calculate_adjacencies(atom/A) + if(!A.loc) + return 0 + + var/adjacencies = 0 + + var/atom/movable/AM + if(istype(A, /atom/movable)) + AM = A + if(AM.can_be_unanchored && !AM.anchored) + return 0 + + for(var/direction in cardinal) + AM = find_type_in_direction(A, direction) + if(AM == NULLTURF_BORDER) + if((A.smooth & SMOOTH_BORDER)) + adjacencies |= 1 << direction + else if( (AM && !istype(AM)) || (istype(AM) && AM.anchored) ) + adjacencies |= 1 << direction + + if(adjacencies & N_NORTH) + if(adjacencies & N_WEST) + AM = find_type_in_direction(A, NORTHWEST) + if(AM == NULLTURF_BORDER) + if((A.smooth & SMOOTH_BORDER)) + adjacencies |= N_NORTHWEST + else if( (AM && !istype(AM)) || (istype(AM) && AM.anchored) ) + adjacencies |= N_NORTHWEST + if(adjacencies & N_EAST) + AM = find_type_in_direction(A, NORTHEAST) + if(AM == NULLTURF_BORDER) + if((A.smooth & SMOOTH_BORDER)) + adjacencies |= N_NORTHEAST + else if( (AM && !istype(AM)) || (istype(AM) && AM.anchored) ) + adjacencies |= N_NORTHEAST + + if(adjacencies & N_SOUTH) + if(adjacencies & N_WEST) + AM = find_type_in_direction(A, SOUTHWEST) + if(AM == NULLTURF_BORDER) + if((A.smooth & SMOOTH_BORDER)) + adjacencies |= N_SOUTHWEST + else if( (AM && !istype(AM)) || (istype(AM) && AM.anchored) ) + adjacencies |= N_SOUTHWEST + if(adjacencies & N_EAST) + AM = find_type_in_direction(A, SOUTHEAST) + if(AM == NULLTURF_BORDER) + if((A.smooth & SMOOTH_BORDER)) + adjacencies |= N_SOUTHEAST + else if( (AM && !istype(AM)) || (istype(AM) && AM.anchored) ) + adjacencies |= N_SOUTHEAST + + return adjacencies + +//do not use, use queue_smooth(atom) +/proc/smooth_icon(atom/A) + if(!A || !A.smooth) + return + A.smooth &= ~SMOOTH_QUEUED + if (!A.z) + return + if(QDELETED(A)) + return + if((A.smooth & SMOOTH_TRUE) || (A.smooth & SMOOTH_MORE)) + var/adjacencies = calculate_adjacencies(A) + + if(A.smooth & SMOOTH_DIAGONAL) + A.diagonal_smooth(adjacencies) + else + cardinal_smooth(A, adjacencies) + +/atom/proc/diagonal_smooth(adjacencies) + switch(adjacencies) + if(N_NORTH|N_WEST) + replace_smooth_overlays("d-se","d-se-0") + if(N_NORTH|N_EAST) + replace_smooth_overlays("d-sw","d-sw-0") + if(N_SOUTH|N_WEST) + replace_smooth_overlays("d-ne","d-ne-0") + if(N_SOUTH|N_EAST) + replace_smooth_overlays("d-nw","d-nw-0") + + if(N_NORTH|N_WEST|N_NORTHWEST) + replace_smooth_overlays("d-se","d-se-1") + if(N_NORTH|N_EAST|N_NORTHEAST) + replace_smooth_overlays("d-sw","d-sw-1") + if(N_SOUTH|N_WEST|N_SOUTHWEST) + replace_smooth_overlays("d-ne","d-ne-1") + if(N_SOUTH|N_EAST|N_SOUTHEAST) + replace_smooth_overlays("d-nw","d-nw-1") + + else + cardinal_smooth(src, adjacencies) + return + + icon_state = "" + return adjacencies + +//only walls should have a need to handle underlays +/turf/simulated/wall/diagonal_smooth(adjacencies) + adjacencies = reverse_ndir(..()) + if(adjacencies) + var/list/U = list() + if(fixed_underlay) + if(fixed_underlay["space"]) + var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]") + I.plane = PLANE_SPACE_DUST + I.alpha = 80 + I.blend_mode = BLEND_ADD + U += I + else + U += image(fixed_underlay["icon"], fixed_underlay["icon_state"], layer=TURF_LAYER) + else + var/turf/T = get_step(src, turn(adjacencies, 180)) + if(T && (T.density || T.smooth)) + T = get_step(src, turn(adjacencies, 135)) + if(T && (T.density || T.smooth)) + T = get_step(src, turn(adjacencies, 225)) + + if(istype(T, /turf/space) && !istype(T, /turf/space/transit)) + var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]") + I.plane = PLANE_SPACE_DUST + I.alpha = 80 + I.blend_mode = BLEND_ADD + U += I + else if(T && !T.density && !T.smooth) + U += T + else if(baseturf && !initial(baseturf.density) && !initial(baseturf.smooth)) + U += image(initial(baseturf.icon), initial(baseturf.icon_state), layer=TURF_LAYER) + else + U += DEFAULT_UNDERLAY_IMAGE + underlays = U + +// And a copypaste for unsimulated walls. +/turf/unsimulated/wall/diagonal_smooth(adjacencies) + adjacencies = reverse_ndir(..()) + if(adjacencies) + var/list/U = list() + if(fixed_underlay) + if(fixed_underlay["space"]) + var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]") + I.plane = PLANE_SPACE_DUST + I.alpha = 80 + I.blend_mode = BLEND_ADD + U += I + else + U += image(fixed_underlay["icon"], fixed_underlay["icon_state"], layer=TURF_LAYER) + else + var/turf/T = get_step(src, turn(adjacencies, 180)) + if(T && (T.density || T.smooth)) + T = get_step(src, turn(adjacencies, 135)) + if(T && (T.density || T.smooth)) + T = get_step(src, turn(adjacencies, 225)) + + if(istype(T, /turf/space) && !istype(T, /turf/space/transit)) + var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]") + I.plane = PLANE_SPACE_DUST + I.alpha = 80 + I.blend_mode = BLEND_ADD + U += I + else if(T && !T.density && !T.smooth) + U += T + else if(baseturf && !initial(baseturf.density) && !initial(baseturf.smooth)) + U += image(initial(baseturf.icon), initial(baseturf.icon_state), layer=TURF_LAYER) + else + U += DEFAULT_UNDERLAY_IMAGE + underlays = U + +/proc/cardinal_smooth(atom/A, adjacencies) + //NW CORNER + var/nw = "1-i" + if((adjacencies & N_NORTH) && (adjacencies & N_WEST)) + if(adjacencies & N_NORTHWEST) + nw = "1-f" + else + nw = "1-nw" + else + if(adjacencies & N_NORTH) + nw = "1-n" + else if(adjacencies & N_WEST) + nw = "1-w" + + //NE CORNER + var/ne = "2-i" + if((adjacencies & N_NORTH) && (adjacencies & N_EAST)) + if(adjacencies & N_NORTHEAST) + ne = "2-f" + else + ne = "2-ne" + else + if(adjacencies & N_NORTH) + ne = "2-n" + else if(adjacencies & N_EAST) + ne = "2-e" + + //SW CORNER + var/sw = "3-i" + if((adjacencies & N_SOUTH) && (adjacencies & N_WEST)) + if(adjacencies & N_SOUTHWEST) + sw = "3-f" + else + sw = "3-sw" + else + if(adjacencies & N_SOUTH) + sw = "3-s" + else if(adjacencies & N_WEST) + sw = "3-w" + + //SE CORNER + var/se = "4-i" + if((adjacencies & N_SOUTH) && (adjacencies & N_EAST)) + if(adjacencies & N_SOUTHEAST) + se = "4-f" + else + se = "4-se" + else + if(adjacencies & N_SOUTH) + se = "4-s" + else if(adjacencies & N_EAST) + se = "4-e" + + var/list/New + + if(A.top_left_corner != nw) + A.cut_overlay(A.top_left_corner) + A.top_left_corner = nw + LAZYADD(New, nw) + + if(A.top_right_corner != ne) + A.cut_overlay(A.top_right_corner) + A.top_right_corner = ne + LAZYADD(New, ne) + + if(A.bottom_right_corner != sw) + A.cut_overlay(A.bottom_right_corner) + A.bottom_right_corner = sw + LAZYADD(New, sw) + + if(A.bottom_left_corner != se) + A.cut_overlay(A.bottom_left_corner) + A.bottom_left_corner = se + LAZYADD(New, se) + + if(New) + A.add_overlay(New) + + A.icon_state = "" + +/proc/find_type_in_direction(atom/source, direction) + var/turf/target_turf = get_step(source, direction) + if(!target_turf) + return NULLTURF_BORDER + + if(source.canSmoothWith) + var/atom/A + if(source.smooth & SMOOTH_MORE) + for(var/a_type in source.canSmoothWith) + if( istype(target_turf, a_type) ) + return target_turf + A = locate(a_type) in target_turf + if(A) + return A + return null + + for(var/a_type in source.canSmoothWith) + if(a_type == target_turf.type) + return target_turf + A = locate(a_type) in target_turf + if(A && A.type == a_type) + return A + return null + else + if(isturf(source)) + return source.type == target_turf.type ? target_turf : null + var/atom/A = locate(source.type) in target_turf + return A && A.type == source.type ? A : null + +//Icon smoothing helpers +/proc/smooth_zlevel(var/zlevel, now = FALSE) + var/list/away_turfs = block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel)) + for(var/V in away_turfs) + var/turf/T = V + if(T.smooth) + if(now) + smooth_icon(T) + else + queue_smooth(T) + for(var/R in T) + var/atom/A = R + if(A.smooth) + if(now) + smooth_icon(A) + else + queue_smooth(A) + +/atom/proc/clear_smooth_overlays() + cut_overlay(top_left_corner) + top_left_corner = null + cut_overlay(top_right_corner) + top_right_corner = null + cut_overlay(bottom_right_corner) + bottom_right_corner = null + cut_overlay(bottom_left_corner) + bottom_left_corner = null + +/atom/proc/replace_smooth_overlays(nw, ne, sw, se) + clear_smooth_overlays() + var/list/O = list() + top_left_corner = nw + O += nw + top_right_corner = ne + O += ne + bottom_left_corner = sw + O += sw + bottom_right_corner = se + O += se + add_overlay(O) + +/proc/reverse_ndir(ndir) + switch(ndir) + if(N_NORTH) + return NORTH + if(N_SOUTH) + return SOUTH + if(N_WEST) + return WEST + if(N_EAST) + return EAST + if(N_NORTHWEST) + return NORTHWEST + if(N_NORTHEAST) + return NORTHEAST + if(N_SOUTHEAST) + return SOUTHEAST + if(N_SOUTHWEST) + return SOUTHWEST + if(N_NORTH|N_WEST) + return NORTHWEST + if(N_NORTH|N_EAST) + return NORTHEAST + if(N_SOUTH|N_WEST) + return SOUTHWEST + if(N_SOUTH|N_EAST) + return SOUTHEAST + if(N_NORTH|N_WEST|N_NORTHWEST) + return NORTHWEST + if(N_NORTH|N_EAST|N_NORTHEAST) + return NORTHEAST + if(N_SOUTH|N_WEST|N_SOUTHWEST) + return SOUTHWEST + if(N_SOUTH|N_EAST|N_SOUTHEAST) + return SOUTHEAST + else + return 0 + +//SSicon_smooth +/proc/queue_smooth_neighbors(atom/A) + for(var/V in orange(1,A)) + var/atom/T = V + if(T.smooth) + queue_smooth(T) + +//SSicon_smooth +/proc/queue_smooth(atom/A) + if(!A.smooth || A.smooth & SMOOTH_QUEUED) + return + + SSicon_smooth.smooth_queue += A + SSicon_smooth.wake() + A.smooth |= SMOOTH_QUEUED diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm index 1909075ba69..695fadc192e 100644 --- a/code/_helpers/lists.dm +++ b/code/_helpers/lists.dm @@ -225,119 +225,42 @@ proc/listclearnulls(list/list) //Mergesort: divides up the list into halves to begin the sort /proc/sortKey(var/list/client/L, var/order = 1) - if(isnull(L) || L.len < 2) - return L - var/middle = L.len / 2 + 1 - return mergeKey(sortKey(L.Copy(0,middle)), sortKey(L.Copy(middle)), order) - -//Mergsort: does the actual sorting and returns the results back to sortAtom -/proc/mergeKey(var/list/client/L, var/list/client/R, var/order = 1) - var/Li=1 - var/Ri=1 - var/list/result = new() - while(Li <= L.len && Ri <= R.len) - var/client/rL = L[Li] - var/client/rR = R[Ri] - if(sorttext(rL.ckey, rR.ckey) == order) - result += L[Li++] - else - result += R[Ri++] - - if(Li <= L.len) - return (result + L.Copy(Li, 0)) - return (result + R.Copy(Ri, 0)) + if (!L) + return + var/list/target = L.Copy() + return sortTim(target, order ? /proc/cmp_ckey_asc : /proc/cmp_ckey_dsc, FALSE) //Mergesort: divides up the list into halves to begin the sort /proc/sortAtom(var/list/atom/L, var/order = 1) - if(isnull(L) || L.len < 2) - return L - var/middle = L.len / 2 + 1 - return mergeAtoms(sortAtom(L.Copy(0,middle)), sortAtom(L.Copy(middle)), order) - -//Mergsort: does the actual sorting and returns the results back to sortAtom -/proc/mergeAtoms(var/list/atom/L, var/list/atom/R, var/order = 1) - var/Li=1 - var/Ri=1 - var/list/result = new() - while(Li <= L.len && Ri <= R.len) - var/atom/rL = L[Li] - var/atom/rR = R[Ri] - if(sorttext(rL.name, rR.name) == order) - result += L[Li++] - else - result += R[Ri++] - - if(Li <= L.len) - return (result + L.Copy(Li, 0)) - return (result + R.Copy(Ri, 0)) - - - + if (!L) + return + var/list/target = L.Copy() + return sortTim(target, order ? /proc/cmp_name_asc : /proc/cmp_name_dsc, FALSE) //Mergesort: Specifically for record datums in a list. /proc/sortRecord(var/list/datum/data/record/L, var/field = "name", var/order = 1) - if(isnull(L)) - return list() - if(L.len < 2) - return L - var/middle = L.len / 2 + 1 - return mergeRecordLists(sortRecord(L.Copy(0, middle), field, order), sortRecord(L.Copy(middle), field, order), field, order) - -//Mergsort: does the actual sorting and returns the results back to sortRecord -/proc/mergeRecordLists(var/list/datum/data/record/L, var/list/datum/data/record/R, var/field = "name", var/order = 1) - var/Li=1 - var/Ri=1 - var/list/result = new() - if(!isnull(L) && !isnull(R)) - while(Li <= L.len && Ri <= R.len) - var/datum/data/record/rL = L[Li] - if(isnull(rL)) - L -= rL - continue - var/datum/data/record/rR = R[Ri] - if(isnull(rR)) - R -= rR - continue - if(sorttext(rL.fields[field], rR.fields[field]) == order) - result += L[Li++] - else - result += R[Ri++] - - if(Li <= L.len) - return (result + L.Copy(Li, 0)) - return (result + R.Copy(Ri, 0)) - - - + if (!L) + return + var/list/target = L.Copy() + var/old_cmp_field = cmp_field + cmp_field = field + sortTim(target, order ? /proc/cmp_records_asc : /proc/cmp_records_dsc, FALSE) + cmp_field = old_cmp_field + return target //Mergesort: any value in a list /proc/sortList(var/list/L) - if(L.len < 2) - return L - var/middle = L.len / 2 + 1 // Copy is first,second-1 - return mergeLists(sortList(L.Copy(0,middle)), sortList(L.Copy(middle))) //second parameter null = to end of list + if (!L) + return + var/list/target = L.Copy() + return sortTim(target, /proc/cmp_text_asc) //Mergsorge: uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead /proc/sortNames(var/list/L) - var/list/Q = new() - for(var/atom/x in L) - Q[x.name] = x - return sortList(Q) - -/proc/mergeLists(var/list/L, var/list/R) - var/Li=1 - var/Ri=1 - var/list/result = new() - while(Li <= L.len && Ri <= R.len) - if(sorttext(L[Li], R[Ri]) < 1) - result += R[Ri++] - else - result += L[Li++] - - if(Li <= L.len) - return (result + L.Copy(Li, 0)) - return (result + R.Copy(Ri, 0)) - + if (!L) + return + var/list/target = L.Copy() + return sortTim(target, /proc/cmp_name_asc, FALSE) // List of lists, sorts by element[key] - for things like crew monitoring computer sorting records by name. /proc/sortByKey(var/list/L, var/key) @@ -366,24 +289,9 @@ proc/listclearnulls(list/list) //Mergesort: any value in a list, preserves key=value structure /proc/sortAssoc(var/list/L) - if(L.len < 2) - return L - var/middle = L.len / 2 + 1 // Copy is first,second-1 - return mergeAssoc(sortAssoc(L.Copy(0,middle)), sortAssoc(L.Copy(middle))) //second parameter null = to end of list - -/proc/mergeAssoc(var/list/L, var/list/R) - var/Li=1 - var/Ri=1 - var/list/result = new() - while(Li <= L.len && Ri <= R.len) - if(sorttext(L[Li], R[Ri]) < 1) - result += R&R[Ri++] - else - result += L&L[Li++] - - if(Li <= L.len) - return (result + L.Copy(Li, 0)) - return (result + R.Copy(Ri, 0)) + var/list/ret = L.Copy() + sortTim(ret, /proc/cmp_text_asc, FALSE) + return ret // Macros to test for bits in a bitfield. Note, that this is for use with indexes, not bit-masks! #define BITTEST(bitfield,index) ((bitfield) & (1 << (index))) @@ -653,6 +561,41 @@ proc/dd_sortedTextList(list/incoming) L += new path() return L +//Like typesof() or subtypesof(), but returns a typecache instead of a list +/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE) + if(ispath(path)) + var/list/types = list() + if(only_root_path) + types = list(path) + else + types = ignore_root_path ? subtypesof(path) : typesof(path) + var/list/L = list() + for(var/T in types) + L[T] = TRUE + return L + else if(islist(path)) + var/list/pathlist = path + var/list/L = list() + if(ignore_root_path) + for(var/P in pathlist) + for(var/T in subtypesof(P)) + L[T] = TRUE + else + for(var/P in pathlist) + if(only_root_path) + L[P] = TRUE + else + for(var/T in typesof(P)) + L[T] = TRUE + return L + +//Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches') +/proc/is_type_in_typecache(atom/A, list/L) + if(!L || !L.len || !A) + + return 0 + return L[A.type] + #define listequal(A, B) (A.len == B.len && !length(A^B)) /proc/Sum(var/list/input) @@ -661,3 +604,63 @@ proc/dd_sortedTextList(list/incoming) total += input[i] return total + + +//Move a single element from position fromIndex within a list, to position toIndex +//All elements in the range [1,toIndex) before the move will be before the pivot afterwards +//All elements in the range [toIndex, L.len+1) before the move will be after the pivot afterwards +//In other words, it's as if the range [fromIndex,toIndex) have been rotated using a <<< operation common to other languages. +//fromIndex and toIndex must be in the range [1,L.len+1] +//This will preserve associations ~Carnie +/proc/moveElement(list/L, fromIndex, toIndex) + if(fromIndex == toIndex || fromIndex+1 == toIndex) //no need to move + return + if(fromIndex > toIndex) + ++fromIndex //since a null will be inserted before fromIndex, the index needs to be nudged right by one + + L.Insert(toIndex, null) + L.Swap(fromIndex, toIndex) + L.Cut(fromIndex, fromIndex+1) + + +//Move elements [fromIndex,fromIndex+len) to [toIndex-len, toIndex) +//Same as moveElement but for ranges of elements +//This will preserve associations ~Carnie +/proc/moveRange(list/L, fromIndex, toIndex, len=1) + var/distance = abs(toIndex - fromIndex) + if(len >= distance) //there are more elements to be moved than the distance to be moved. Therefore the same result can be achieved (with fewer operations) by moving elements between where we are and where we are going. The result being, our range we are moving is shifted left or right by dist elements + if(fromIndex <= toIndex) + return //no need to move + fromIndex += len //we want to shift left instead of right + + for(var/i=0, i toIndex) + fromIndex += len + + for(var/i=0, i= 2) + fromIndex = fromIndex % L.len + toIndex = toIndex % (L.len+1) + if(fromIndex <= 0) + fromIndex += L.len + if(toIndex <= 0) + toIndex += L.len + 1 + + sortInstance.L = L + sortInstance.cmp = cmp + sortInstance.associative = associative + + sortInstance.timSort(fromIndex, toIndex) + + return L diff --git a/code/_helpers/sorting/__main.dm b/code/_helpers/sorting/__main.dm new file mode 100644 index 00000000000..1d689080355 --- /dev/null +++ b/code/_helpers/sorting/__main.dm @@ -0,0 +1,656 @@ + //These are macros used to reduce on proc calls +#define fetchElement(L, i) (associative) ? L[L[i]] : L[i] + + //Minimum sized sequence that will be merged. Anything smaller than this will use binary-insertion sort. + //Should be a power of 2 +#define MIN_MERGE 32 + + //When we get into galloping mode, we stay there until both runs win less often than MIN_GALLOP consecutive times. +#define MIN_GALLOP 7 + + //This is a global instance to allow much of this code to be reused. The interfaces are kept seperately +var/datum/sortInstance/sortInstance = new() +/datum/sortInstance + //The array being sorted. + var/list/L + + //The comparator proc-reference + var/cmp = /proc/cmp_numeric_asc + + //whether we are sorting list keys (0: L[i]) or associated values (1: L[L[i]]) + var/associative = 0 + + //This controls when we get *into* galloping mode. It is initialized to MIN_GALLOP. + //The mergeLo and mergeHi methods nudge it higher for random data, and lower for highly structured data. + var/minGallop = MIN_GALLOP + + //Stores information regarding runs yet to be merged. + //Run i starts at runBase[i] and extends for runLen[i] elements. + //runBase[i] + runLen[i] == runBase[i+1] + //var/stackSize + var/list/runBases = list() + var/list/runLens = list() + + + proc/timSort(start, end) + runBases.Cut() + runLens.Cut() + + var/remaining = end - start + + //If array is small, do a 'mini-TimSort' with no merges + if(remaining < MIN_MERGE) + var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start+initRunLen) + return + + //March over the array finding natural runs + //Extend any short natural runs to runs of length minRun + var/minRun = minRunLength(remaining) + + do + //identify next run + var/runLen = countRunAndMakeAscending(start, end) + + //if run is short, extend to min(minRun, remaining) + if(runLen < minRun) + var/force = (remaining <= minRun) ? remaining : minRun + + binarySort(start, start+force, start+runLen) + runLen = force + + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) + + //maybe merge + mergeCollapse() + + //Advance to find next run + start += runLen + remaining -= runLen + + while(remaining > 0) + + + //Merge all remaining runs to complete sort + //ASSERT(start == end) + mergeForceCollapse(); + //ASSERT(runBases.len == 1) + + //reset minGallop, for successive calls + minGallop = MIN_GALLOP + + return L + + /* + Sorts the specified portion of the specified array using a binary + insertion sort. This is the best method for sorting small numbers + of elements. It requires O(n log n) compares, but O(n^2) data + movement (worst case). + + If the initial part of the specified range is already sorted, + this method can take advantage of it: the method assumes that the + elements in range [lo,start) are already sorted + + lo the index of the first element in the range to be sorted + hi the index after the last element in the range to be sorted + start the index of the first element in the range that is not already known to be sorted + */ + proc/binarySort(lo, hi, start) + //ASSERT(lo <= start && start <= hi) + if(start <= lo) + start = lo + 1 + + for(,start < hi, ++start) + var/pivot = fetchElement(L,start) + + //set left and right to the index where pivot belongs + var/left = lo + var/right = start + //ASSERT(left <= right) + + //[lo, left) elements <= pivot < [right, start) elements + //in other words, find where the pivot element should go using bisection search + while(left < right) + var/mid = (left + right) >> 1 //round((left+right)/2) + if(call(cmp)(fetchElement(L,mid), pivot) > 0) + right = mid + else + left = mid+1 + + //ASSERT(left == right) + moveElement(L, start, left) //move pivot element to correct location in the sorted range + + /* + Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front + + A run is the longest ascending sequence with: + a[lo] <= a[lo + 1] <= a[lo + 2] <= ... + or the longest descending sequence with: + a[lo] > a[lo + 1] > a[lo + 2] > ... + + For its intended use in a stable mergesort, the strictness of the + definition of "descending" is needed so that the call can safely + reverse a descending sequence without violating stability. + */ + proc/countRunAndMakeAscending(lo, hi) + //ASSERT(lo < hi) + + var/runHi = lo + 1 + if(runHi >= hi) + return 1 + + var/last = fetchElement(L,lo) + var/current = fetchElement(L,runHi++) + + if(call(cmp)(current, last) < 0) + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) >= 0) + break + ++runHi + reverseRange(L, lo, runHi) + else + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) < 0) + break + ++runHi + + return runHi - lo + + //Returns the minimum acceptable run length for an array of the specified length. + //Natural runs shorter than this will be extended with binarySort + proc/minRunLength(n) + //ASSERT(n >= 0) + var/r = 0 //becomes 1 if any bits are shifted off + while(n >= MIN_MERGE) + r |= (n & 1) + n >>= 1 + return n + r + + //Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: + // runLen[i-3] > runLen[i-2] + runLen[i-1] + // runLen[i-2] > runLen[i-1] + //This method is called each time a new run is pushed onto the stack. + //So the invariants are guaranteed to hold for i= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt(n) + else + break //Invariant is established + + + //Merges all runs on the stack until only one remains. + //Called only once, to finalise the sort + proc/mergeForceCollapse() + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) + + + //Merges the two consecutive runs at stack indices i and i+1 + //Run i must be the penultimate or antepenultimate run on the stack + //In other words, i must be equal to stackSize-2 or stackSize-3 + proc/mergeAt(i) + //ASSERT(runBases.len >= 2) + //ASSERT(i >= 1) + //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) + + var/base1 = runBases[i] + var/base2 = runBases[i+1] + var/len1 = runLens[i] + var/len2 = runLens[i+1] + + //ASSERT(len1 > 0 && len2 > 0) + //ASSERT(base1 + len1 == base2) + + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) + + + //Find where the first element of run2 goes in run1. + //Prior elements in run1 can be ignored (because they're already in place) + var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) + //ASSERT(k >= 0) + base1 += k + len1 -= k + if(len1 == 0) + return + + //Find where the last element of run1 goes in run2. + //Subsequent elements in run2 can be ignored (because they're already in place) + len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) + //ASSERT(len2 >= 0) + if(len2 == 0) + return + + //Merge remaining runs, using tmp array with min(len1, len2) elements + if(len1 <= len2) + mergeLo(base1, len1, base2, len2) + else + mergeHi(base1, len1, base2, len2) + + + /* + Locates the position to insert key within the specified sorted range + If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements + + key the element to be inserted into the sorted range + base the index of the first element of the sorted range + len the length of the sorted range, must be greater than 0 + hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint + + Returns the index at which to insert element 'key' + */ + proc/gallopLeft(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/lastOffset = 0 + var/offset = 1 + if(call(cmp)(key, fetchElement(L,base+hint)) > 0) + var/maxOffset = len - hint + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + else + var/maxOffset = hint + 1 + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than + //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) > 0) + lastOffset = m + 1 + else + offset = m + + //ASSERT(lastOffset == offset) + return offset + + /** + * Like gallopLeft, except that if the range contains an element equal to + * key, gallopRight returns the index after the rightmost equal element. + * + * @param key the key whose insertion point to search for + * @param a the array in which to search + * @param base the index of the first element in the range + * @param len the length of the range; must be > 0 + * @param hint the index at which to begin the search, 0 <= hint < n. + * The closer hint is to the result, the faster this method will run. + * @param c the comparator used to order the range, and to search + * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] + */ + proc/gallopRight(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/offset = 1 + var/lastOffset = 0 + if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] + var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards + lastOffset = offset + offset = (offset << 1) + 1 //1 3 7 15 + //if(offset <= 0) //int overflow, not an issue here since we are using floats + // offset = maxOffset + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + else //key > L[base+hint] + var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) + lastOffset = offset + offset = (offset << 1) + 1 + //if(offset <= 0) //int overflow, not an issue here since we are using floats + // offset = maxOffset + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] + offset = m + else //key > L[base+m] + lastOffset = m + 1 + + //ASSERT(lastOffset == offset) + + return offset + + + //Merges two adjacent runs in-place in a stable fashion. + //For performance this method should only be called when len1 <= len2! + proc/mergeLo(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + var/cursor2 = base2 + + //degenerate cases + if(len2 == 1) + moveElement(L, cursor2, cursor1) + return + + if(len1 == 1) + moveElement(L, cursor1, cursor2+len2) + return + + + //Move first element of second run + moveElement(L, cursor2++, cursor1++) + --len2 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thin until one run starts winning consistently + + do + //ASSERT(len1 > 1 && len2 > 0) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor2++, cursor1++) + --len2 + + ++count2 + count1 = 0 + + if(len2 == 0) + break outer + else + ++cursor1 + + ++count1 + count2 = 0 + + if(--len1 == 1) + break outer + + while((count1 | count2) < minGallop) + + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 1 && len2 > 0) + + count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) + if(count1) + cursor1 += count1 + len1 -= count1 + + if(len1 <= 1) + break outer + + moveElement(L, cursor2, cursor1) + ++cursor2 + ++cursor1 + if(--len2 == 0) + break outer + + count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) + if(count2) + moveRange(L, cursor2, cursor1, count2) + + cursor2 += count2 + cursor1 += count2 + len2 -= count2 + + if(len2 == 0) + break outer + + ++cursor1 + if(--len1 == 1) + break outer + + --minGallop + + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2; // Penalize for leaving gallop mode + + + if(len1 == 1) + //ASSERT(len2 > 0) + moveElement(L, cursor1, cursor2+len2) + + //else + //ASSERT(len2 == 0) + //ASSERT(len1 > 1) + + + proc/mergeHi(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + len1 - 1 //start at end of sublists + var/cursor2 = base2 + len2 - 1 + + //degenerate cases + if(len2 == 1) + moveElement(L, base2, base1) + return + + if(len1 == 1) + moveElement(L, base1, cursor2+1) + return + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thing until one run starts winning consistently + do + //ASSERT(len1 > 0 && len2 > 1) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + ++count1 + count2 = 0 + + if(len1 == 0) + break outer + else + --cursor2 + --len2 + + ++count2 + count1 = 0 + + if(len2 == 1) + break outer + while((count1 | count2) < minGallop) + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 0 && len2 > 1) + + count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? + if(count1) + cursor1 -= count1 + + moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition + + cursor2 -= count1 + len1 -= count1 + + if(len1 == 0) + break outer + + --cursor2 + + if(--len2 == 1) + break outer + + count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) + if(count2) + cursor2 -= count2 + len2 -= count2 + + if(len2 <= 1) + break outer + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + if(len1 == 0) + break outer + + --minGallop + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2 // Penalize for leaving gallop mode + + if(len2 == 1) + //ASSERT(len1 > 0) + + cursor1 -= len1 + moveRange(L, cursor1+1, cursor2+1, len1) + + //else + //ASSERT(len1 == 0) + //ASSERT(len2 > 0) + + + proc/mergeSort(start, end) + var/remaining = end - start + + //If array is small, do an insertion sort + if(remaining < MIN_MERGE) + //var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start/*+initRunLen*/) + return + + var/minRun = minRunLength(remaining) + + do + var/runLen = (remaining <= minRun) ? remaining : minRun + + binarySort(start, start+runLen, start) + + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) + + //Advance to find next run + start += runLen + remaining -= runLen + + while(remaining > 0) + + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt2(n) + else + break //Invariant is established + + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) + + return L + + proc/mergeAt2(i) + var/cursor1 = runBases[i] + var/cursor2 = runBases[i+1] + + var/end1 = cursor1+runLens[i] + var/end2 = cursor2+runLens[i+1] + + var/val1 = fetchElement(L,cursor1) + var/val2 = fetchElement(L,cursor2) + + while(1) + if(call(cmp)(val1,val2) < 0) + if(++cursor1 >= end1) + break + val1 = fetchElement(L,cursor1) + else + moveElement(L,cursor2,cursor1) + + ++cursor2 + if(++cursor2 >= end2) + break + ++end1 + ++cursor1 + //if(++cursor1 >= end1) + // break + + val2 = fetchElement(L,cursor2) + + + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) + +#undef MIN_GALLOP +#undef MIN_MERGE + +#undef fetchElement diff --git a/code/_helpers/sorting/cmp.dm b/code/_helpers/sorting/cmp.dm new file mode 100644 index 00000000000..c3f05478fbd --- /dev/null +++ b/code/_helpers/sorting/cmp.dm @@ -0,0 +1,80 @@ +/proc/cmp_numeric_dsc(a,b) + return b - a + +/proc/cmp_numeric_asc(a,b) + return a - b + +/proc/cmp_text_asc(a,b) + return sorttext(b,a) + +/proc/cmp_text_dsc(a,b) + return sorttext(a,b) + +/proc/cmp_name_asc(atom/a, atom/b) + return sorttext(b.name, a.name) + +/proc/cmp_name_dsc(atom/a, atom/b) + return sorttext(a.name, b.name) + +var/cmp_field = "name" +/proc/cmp_records_asc(datum/data/record/a, datum/data/record/b) + return sorttext(b.fields[cmp_field], a.fields[cmp_field]) + +/proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b) + return sorttext(a.fields[cmp_field], b.fields[cmp_field]) + +/proc/cmp_ckey_asc(client/a, client/b) + return sorttext(b.ckey, a.ckey) + +/proc/cmp_ckey_dsc(client/a, client/b) + return sorttext(a.ckey, b.ckey) + +/proc/cmp_subsystem_init(datum/controller/subsystem/a, datum/controller/subsystem/b) + return b.init_order - a.init_order + +/proc/cmp_subsystem_display(datum/controller/subsystem/a, datum/controller/subsystem/b) + return sorttext(b.name, a.name) + +/proc/cmp_subsystem_priority(datum/controller/subsystem/a, datum/controller/subsystem/b) + return a.priority - b.priority + +/proc/cmp_timer(datum/timedevent/a, datum/timedevent/b) + return a.timeToRun - b.timeToRun + +/proc/cmp_camera(obj/machinery/camera/a, obj/machinery/camera/b) + if (a.c_tag_order != b.c_tag_order) + return b.c_tag_order - a.c_tag_order + return sorttext(b.c_tag, a.c_tag) + +/proc/cmp_alarm(datum/alarm/a, datum/alarm/b) + return sorttext(b.last_name, a.last_name) + +/proc/cmp_uplink_item(datum/uplink_item/a, datum/uplink_item/b) + return b.cost(INFINITY) - a.cost(INFINITY) + +/proc/cmp_access(datum/access/a, datum/access/b) + return sorttext("[b.access_type][b.desc]", "[a.access_type][a.desc]") + +/proc/cmp_player_setup_group(datum/category_group/player_setup_category/a, datum/category_group/player_setup_category/b) + return a.sort_order - b.sort_order + +/proc/cmp_cardstate(datum/card_state/a, datum/card_state/b) + return sorttext(b.name, a.name) + +/proc/cmp_uplink_category(datum/uplink_category/a, datum/uplink_category/b) + return sorttext(b.name, a.name) + +/proc/cmp_admin_secret(datum/admin_secret_item/a, datum/admin_secret_item/b) + return sorttext(b.name, a.name) + +/proc/cmp_supply_drop(datum/supply_drop_loot/a, datum/supply_drop_loot/b) + return sorttext(b.name, a.name) + +/proc/cmp_rcon_smes(obj/machinery/power/smes/buildable/S1, obj/machinery/power/smes/buildable/S2) + return sorttext(S2.RCon_tag, S1.RCon_tag) + +/proc/cmp_rcon_bbox(obj/machinery/power/breakerbox/BR1, obj/machinery/power/breakerbox/BR2) + return sorttext(BR2.RCon_tag, BR1.RCon_tag) + +/proc/cmp_surgery(datum/surgery_step/a, datum/surgery_step/b) + return b.priority - a.priority diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index f98a28f0513..ac0ef764086 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -440,6 +440,7 @@ proc/TextPreview(var/string,var/len=40) t = replacetext(t, "\[row\]", "") t = replacetext(t, "\[cell\]", "") t = replacetext(t, "\[logo\]", "") + t = replacetext(t, "\[barcode\]", "") t = replacetext(t, "\[time\]", "[worldtime2text()]") t = replacetext(t, "\[date\]", "[worlddate2text()]") t = replacetext(t, "\[editorbr\]", "
") diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 5c80a00ad67..f863e586172 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -50,3 +50,10 @@ proc/round_duration() last_round_duration = "[hours]:[mins]" next_duration_update = world.time + 1 MINUTES return last_round_duration + +/var/midnight_rollovers = 0 +/var/rollovercheck_last_timeofday = 0 +/proc/update_midnight_rollover() + if (world.timeofday < rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS! + return midnight_rollovers++ + return midnight_rollovers diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 6d16d53bfdb..f6a5c6b5f73 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -331,42 +331,42 @@ Turf and target are seperate in case you want to teleport some distance from a t //Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame() //Last modified by Carn /mob/proc/rename_self(var/role, var/allow_numbers=0) - spawn(0) - var/oldname = real_name + set waitfor = FALSE + var/oldname = real_name - var/time_passed = world.time - var/newname + var/time_passed = world.time + var/newname - for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name. - newname = input(src,"You are \a [role]. Would you like to change your name to something else?", "Name change",oldname) as text - if((world.time-time_passed)>3000) - return //took too long - newname = sanitizeName(newname, ,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters. + for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name. + newname = input(src,"You are \a [role]. Would you like to change your name to something else?", "Name change",oldname) as text + if((world.time-time_passed)>3000) + return //took too long + newname = sanitizeName(newname, ,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters. - for(var/mob/living/M in player_list) - if(M == src) - continue - if(!newname || M.real_name == newname) - newname = null - break - if(newname) - break //That's a suitable name! - src << "Sorry, that [role]-name wasn't appropriate, please try another. It's possibly too long/short, has bad characters or is already taken." + for(var/mob/living/M in player_list) + if(M == src) + continue + if(!newname || M.real_name == newname) + newname = null + break + if(newname) + break //That's a suitable name! + src << "Sorry, that [role]-name wasn't appropriate, please try another. It's possibly too long/short, has bad characters or is already taken." - if(!newname) //we'll stick with the oldname then - return + if(!newname) //we'll stick with the oldname then + return - if(cmptext("ai",role)) - if(isAI(src)) - var/mob/living/silicon/ai/A = src - oldname = null//don't bother with the records update crap - //world << "[newname] is the AI!" - //world << sound('sound/AI/newAI.ogg') - // Set eyeobj name - A.SetName(newname) + if(cmptext("ai",role)) + if(isAI(src)) + var/mob/living/silicon/ai/A = src + oldname = null//don't bother with the records update crap + //world << "[newname] is the AI!" + //world << sound('sound/AI/newAI.ogg') + // Set eyeobj name + A.SetName(newname) - fully_replace_character_name(oldname,newname) + fully_replace_character_name(oldname,newname) @@ -856,16 +856,24 @@ proc/GaussRandRound(var/sigma,var/roundto) var/old_dir1 = T.dir var/old_icon_state1 = T.icon_state var/old_icon1 = T.icon - var/old_overlays = T.overlays.Copy() var/old_underlays = T.underlays.Copy() + // SSoverlays makes this a bit more complex. + var/old_our_overlays = T.our_overlays + T.our_overlays = null + var/old_priority_overlays = T.priority_overlays + T.priority_overlays = null + var/turf/X = B.ChangeTurf(T.type) X.set_dir(old_dir1) X.icon_state = old_icon_state1 X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi - X.overlays = old_overlays X.underlays = old_underlays + X.our_overlays = old_our_overlays + X.priority_overlays = old_priority_overlays + X.compile_overlays() + var/turf/simulated/ST = T if(istype(ST) && ST.zone) var/turf/simulated/SX = X @@ -897,21 +905,23 @@ proc/GaussRandRound(var/sigma,var/roundto) X.icon = nextturf.icon X.icon_state = nextturf.icon_state + for (var/thing in T) + if (isobj(thing)) + var/obj/O = thing - for(var/obj/O in T) - - // Reset the shuttle corners - if(O.tag == "delete me") - X.icon = 'icons/turf/shuttle.dmi' - X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state - X.name = "wall" - qdel(O) // prevents multiple shuttle corners from stacking - continue - if(!istype(O,/obj)) continue - O.loc = X - for(var/mob/M in T) - if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable - M.loc = X + // Reset the shuttle corners + if(O.tag == "delete me") + X.icon = 'icons/turf/shuttle.dmi' + X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state + X.name = "wall" + qdel(O) // prevents multiple shuttle corners from stacking + continue + + O.forceMove(X) + + else if (ismob(thing) && !istype(thing, /mob/eye) && !istype(thing, /mob/dview)) + var/mob/M = thing + M.forceMove(X) toupdate += X @@ -1050,24 +1060,15 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) copiedobjs += newobjs copiedobjs += newmobs -// var/area/AR = X.loc - -// if(AR.lighting_use_dynamic) -// X.opacity = !X.opacity -// X.sd_SetOpacity(!X.opacity) //TODO: rewrite this code so it's not messed by lighting ~Carn - toupdate += X refined_src -= T refined_trg -= B continue moving - - - if(toupdate.len) for(var/turf/simulated/T1 in toupdate) - air_master.mark_for_update(T1) + SSair.mark_for_update(T1) return copiedobjs @@ -1210,7 +1211,7 @@ proc/is_hot(obj/item/W as obj) return 1000 else return 0 - if(/obj/item/weapon/pickaxe/plasmacutter) + if(/obj/item/weapon/gun/energy/plasmacutter) return 3800 if(/obj/item/weapon/melee/energy) return 3500 @@ -1357,64 +1358,6 @@ var/list/WALLITEMS = list( color = origin.color set_light(origin.light_range, origin.light_power, origin.light_color) -//This is just so you can stop an orbit. -//orbit() can run without it (swap orbiting for A) -//but then you can never stop it and that's just silly. -/atom/movable/var/atom/orbiting = null - -//A: atom to orbit -//radius: range to orbit at, radius of the circle formed by orbiting -//clockwise: whether you orbit clockwise or anti clockwise -//rotation_speed: how fast to rotate -//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default. -//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts -//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts) - -/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE) - if(!istype(A)) - return - - if(orbiting) - stop_orbit() - - orbiting = A - var/matrix/initial_transform = matrix(transform) - var/lastloc = loc - - //Head first! - if(pre_rotation) - var/matrix/M = matrix(transform) - var/pre_rot = 90 - if(!clockwise) - pre_rot = -90 - M.Turn(pre_rot) - transform = M - - var/matrix/shift = matrix(transform) - shift.Translate(0,radius) - transform = shift - - SpinAnimation(rotation_speed, -1, clockwise, rotation_segments) - - //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit - transform = initial_transform - while(orbiting && orbiting == A && A.loc) - var/targetloc = get_turf(A) - if(!lockinorbit && loc != lastloc && loc != targetloc) - break - loc = targetloc - lastloc = loc - sleep(0.6) - - if (orbiting == A) //make sure we haven't started orbiting something else. - orbiting = null - SpinAnimation(0,0) - - - -/atom/movable/proc/stop_orbit() - orbiting = null - // call to generate a stack trace and print to runtime logs /proc/crash_with(msg) CRASH(msg) @@ -1439,9 +1382,62 @@ var/list/WALLITEMS = list( return 0//If we get here, we must be buried many layers deep in nested containers. Shouldn't happen +//similar function to RANGE_TURFS(), but will search spiralling outwards from the center (like the above, but only turfs) +/proc/spiral_range_turfs(dist=0, center=usr, orange=0) + if(!dist) + if(!orange) + return list(center) + else + return list() + + var/turf/t_center = get_turf(center) + if(!t_center) + return list() + + var/list/L = list() + var/turf/T + var/y + var/x + var/c_dist = 1 + + if(!orange) + L += t_center + + while( c_dist <= dist ) + y = t_center.y + c_dist + x = t_center.x - c_dist + 1 + for(x in x to t_center.x+c_dist) + T = locate(x,y,t_center.z) + if(T) + L += T + + y = t_center.y + c_dist - 1 + x = t_center.x + c_dist + for(y in t_center.y-c_dist to y) + T = locate(x,y,t_center.z) + if(T) + L += T + + y = t_center.y - c_dist + x = t_center.x + c_dist - 1 + for(x in t_center.x-c_dist to x) + T = locate(x,y,t_center.z) + if(T) + L += T + + y = t_center.y - c_dist + 1 + x = t_center.x - c_dist + for(y in y to t_center.y+c_dist) + T = locate(x,y,t_center.z) + if(T) + L += T + c_dist++ + + return L + //Increases delay as the server gets more overloaded, //as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful -#define DELTA_CALC max((max(world.tick_usage,world.cpu)/100),1) +#define DELTA_CALC max(((max(world.tick_usage, world.cpu) / 100) * max(Master.sleep_delta,1)), 1) /proc/stoplag() . = 0 @@ -1450,6 +1446,6 @@ var/list/WALLITEMS = list( . += round(i*DELTA_CALC) sleep(i*world.tick_lag*DELTA_CALC) i *= 2 - while (world.tick_usage > TICK_LIMIT) + while (world.tick_usage > min(TICK_LIMIT_TO_RUN, CURRENT_TICKLIMIT)) #undef DELTA_CALC diff --git a/code/_macros.dm b/code/_macros.dm index a534d96df48..3cc39e58cbb 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -43,6 +43,8 @@ #define isslime(A) istype(A, /mob/living/carbon/slime) #define to_chat(target, message) target << message +#define MAP_IMAGE_PATH "nano/images/" +#define map_image_file_name(z_level) "Aurora-[z_level].png" #define to_world(message) world << message #define sound_to(target, sound) target << sound #define to_file(file_entry, file_content) file_entry << file_content diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index 47e7e99a927..053d3d50381 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -102,14 +102,14 @@ Quick adjacency (to turf): This can be safely removed if border firedoors are ever moved to be on top of doors so they can be interacted with without opening the door. */ -/obj/machinery/door/Adjacent(var/atom/neighbor) +/*/obj/machinery/door/Adjacent(var/atom/neighbor) var/obj/machinery/door/firedoor/border_only/BOD = locate() in loc if(BOD) BOD.throwpass = 1 // allow click to pass . = ..() BOD.throwpass = 0 return . - return ..() + return ..()*/ /* diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 88bfc332a38..b9c6692b714 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -176,8 +176,7 @@ return /mob/living/UnarmedAttack(var/atom/A, var/proximity_flag) - - if(!ticker) + if(!Master.round_started) src << "You cannot attack people before the game has started." return 0 diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index a00112428ef..fe35d1024c2 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -30,6 +30,7 @@ /datum/action/Destroy() if(owner) Remove(owner) + return ..() /datum/action/proc/Grant(mob/living/T) if(owner) @@ -220,4 +221,4 @@ #undef AB_WEST_OFFSET #undef AB_NORTH_OFFSET -#undef AB_MAX_COLUMNS \ No newline at end of file +#undef AB_MAX_COLUMNS diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index af6b86e3a66..aad84c1b275 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -2,16 +2,8 @@ The global hud: Uses the same visual objects for all players. */ -var/datum/global_hud/global_hud = new() -var/list/global_huds = list( - global_hud.druggy, - global_hud.blurry, - global_hud.vimpaired, - global_hud.darkMask, - global_hud.nvg, - global_hud.thermal, - global_hud.meson, - global_hud.science) +var/datum/global_hud/global_hud // Initialized in SSatoms. +var/list/global_huds /datum/hud/var/obj/screen/grab_intent /datum/hud/var/obj/screen/hurt_intent @@ -142,7 +134,7 @@ datum/hud/New(mob/owner) ..() /datum/hud/Destroy() - ..() + . = ..() grab_intent = null hurt_intent = null disarm_intent = null diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index b45dce4e0f0..cb21437bd87 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -1,9 +1,3 @@ -// Until we convert to planes. -#define PLANE_SPACE_BACKGROUND -98 -#define PLANE_SPACE_PARALLAX (PLANE_SPACE_BACKGROUND + 1) // -97 -#define PLANE_SPACE_DUST (PLANE_SPACE_PARALLAX + 1) // -96 -#define PLANE_ABOVE_PARALLAX (PLANE_SPACE_BACKGROUND + 3) // -95 - /* * This file handles all parallax-related business once the parallax itself is initialized with the rest of the HUD */ @@ -11,11 +5,6 @@ #define PARALLAX_IMAGE_TILES (PARALLAX_IMAGE_WIDTH**2) #define GRID_WIDTH 3 -var/list/parallax_on_clients = list() -var/parallax_initialized = 0 -var/space_color = "#050505" -var/list/parallax_icon[(GRID_WIDTH**2)*3] - /obj/screen/parallax var/base_offset_x = 0 var/base_offset_y = 0 @@ -32,24 +21,26 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] /obj/screen/plane_master appearance_flags = PLANE_MASTER screen_loc = "CENTER,CENTER" - + /obj/screen/plane_master/parallax_master plane = PLANE_SPACE_PARALLAX blend_mode = BLEND_MULTIPLY color = list( - 1,0,0,0, - 0,1,0,0, - 0,0,1,0, - 0,0,0,0, - 0,0,0,1) + 1,0,0,0, + 0,1,0,0, + 0,0,1,0, + 0,0,0,0, + 0,0,0,1 + ) /obj/screen/plane_master/parallax_spacemaster //Turns space white, causing the parallax to only show in areas with opacity. Somehow plane = PLANE_SPACE_BACKGROUND color = list( - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 1,1,1,1) + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 1,1,1,1 + ) /obj/screen/plane_master/parallax_spacemaster/New() ..() @@ -62,7 +53,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] color = list(0,0,0,0) /datum/hud/proc/update_parallax_existence() - if(!parallax_initialized) + if(!SSparallax.parallax_initialized) return initialize_parallax() update_parallax() @@ -79,7 +70,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] C.parallax_dustmaster = new /obj/screen/plane_master/parallax_dustmaster if(!C.parallax.len) - for(var/obj/screen/parallax/bgobj in parallax_icon) + for(var/obj/screen/parallax/bgobj in SSparallax.parallax_icon) var/obj/screen/parallax/parallax_layer = new /obj/screen/parallax parallax_layer.appearance = bgobj.appearance parallax_layer.base_offset_x = bgobj.base_offset_x @@ -99,7 +90,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] /datum/hud/proc/update_parallax() var/client/C = mymob.client if(C.prefs.parallax_togs & PARALLAX_SPACE) - parallax_on_clients |= C + SSparallax.parallax_on_clients |= C for(var/obj/screen/parallax/bgobj in C.parallax) C.screen |= bgobj C.screen |= C.parallax_master @@ -115,17 +106,17 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] else for(var/obj/screen/parallax/bgobj in C.parallax) C.screen -= bgobj - parallax_on_clients -= C + SSparallax.parallax_on_clients -= C C.screen -= C.parallax_master C.screen -= C.parallax_spacemaster C.parallax_dustmaster.color = list(0,0,0,0) /datum/hud/proc/update_parallax_values() var/client/C = mymob.client - if(!parallax_initialized) + if(!SSparallax.parallax_initialized) return - if(!(locate(/turf/space) in trange(C.view,get_turf(C.eye)))) + if(!(locate(/turf/space) in trange(C.view,get_turf(C.eye))) && !(locate(/turf/simulated/open) in trange(C.view,get_turf(C.eye)))) return //ACTUALLY MOVING THE PARALLAX @@ -193,7 +184,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] parallax_layer.overlays = L parallax_layer.parallax_speed = 0 parallax_layer.calibrate_parallax(i+1) - parallax_icon[index] = parallax_layer + SSparallax.parallax_icon[index] = parallax_layer index++ for(var/i in 0 to ((GRID_WIDTH**2)-1)) @@ -210,7 +201,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] parallax_layer.overlays = L parallax_layer.parallax_speed = 0.5 parallax_layer.calibrate_parallax(i+1) - parallax_icon[index] = parallax_layer + SSparallax.parallax_icon[index] = parallax_layer index++ for(var/i in 0 to ((GRID_WIDTH**2)-1)) @@ -226,10 +217,10 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3] parallax_layer.overlays = L parallax_layer.parallax_speed = 1 parallax_layer.calibrate_parallax(i+1) - parallax_icon[index] = parallax_layer + SSparallax.parallax_icon[index] = parallax_layer index++ - parallax_initialized = 1 + SSparallax.parallax_initialized = 1 /obj/screen/parallax/proc/calibrate_parallax(var/i) if(!i) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 5fe3f7f7bd6..54b828692b8 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -13,7 +13,7 @@ unacidable = 1 var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. -/obj/screen/Destroy() +/obj/screen/Destroy(force = FALSE) master = null screen_loc = null return ..() @@ -46,7 +46,7 @@ var/obj/item/owner /obj/screen/item_action/Destroy() - ..() + . = ..() owner = null /obj/screen/item_action/Click() diff --git a/code/_onclick/hud/spell_screen_objects.dm b/code/_onclick/hud/spell_screen_objects.dm index 2294ff03a32..f64e0be67f3 100644 --- a/code/_onclick/hud/spell_screen_objects.dm +++ b/code/_onclick/hud/spell_screen_objects.dm @@ -13,7 +13,7 @@ var/mob/spell_holder /obj/screen/movable/spell_master/Destroy() - ..() + . = ..() for(var/obj/screen/spell/spells in spell_objects) spells.spellmaster = null spell_objects.Cut() @@ -93,7 +93,7 @@ if(spell.spell_flags & NO_BUTTON) //no button to add if we don't get one return - var/obj/screen/spell/newscreen = getFromPool(/obj/screen/spell) + var/obj/screen/spell/newscreen = new /obj/screen/spell newscreen.spellmaster = src newscreen.spell = spell @@ -161,7 +161,7 @@ var/icon/last_charged_icon /obj/screen/spell/Destroy() - ..() + . = ..() spell = null last_charged_icon = null if(spellmaster) diff --git a/code/controllers/ProcessScheduler/.gitignore b/code/controllers/ProcessScheduler/.gitignore deleted file mode 100644 index 5fe19e425bf..00000000000 --- a/code/controllers/ProcessScheduler/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/bower_components -/node_modules -/ProcessScheduler.dmb -/ProcessScheduler.int -/ProcessScheduler.rsc -/*.lk diff --git a/code/controllers/ProcessScheduler/LICENSE-AGPL b/code/controllers/ProcessScheduler/LICENSE-AGPL deleted file mode 100644 index abaa41e8296..00000000000 --- a/code/controllers/ProcessScheduler/LICENSE-AGPL +++ /dev/null @@ -1,212 +0,0 @@ -GNU AFFERO GENERAL PUBLIC LICENSE - -Version 3, 19 November 2007 - -Copyright © 2007 Free Software Foundation, Inc. -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. - -The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - -Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. - -A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. - -The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. - -An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. - -The precise terms and conditions for copying, distribution and modification follow. - -TERMS AND CONDITIONS - -0. Definitions. -"This License" refers to version 3 of the GNU Affero General Public License. - -"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. - -"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. - -To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. - -A "covered work" means either the unmodified Program or a work based on the Program. - -To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. - -To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. - -An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. - -1. Source Code. -The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. - -A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. - -The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. - -The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same work. - -2. Basic Permissions. -All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - -3. Protecting Users' Legal Rights From Anti-Circumvention Law. -No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. - -4. Conveying Verbatim Copies. -You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. - -5. Conveying Modified Source Versions. -You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: - -a) The work must carry prominent notices stating that you modified it, and giving a relevant date. -b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". -c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. -d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. -A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. - -6. Conveying Non-Source Forms. -You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: - -a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. -b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. -c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. -d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. -e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. -A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. - -A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. - -"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). - -The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. - -Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. - -7. Additional Terms. -"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: - -a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or -b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or -c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or -d) Limiting the use for publicity purposes of names of licensors or authors of the material; or -e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or -f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. -All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. - -8. Termination. -You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. - -9. Acceptance Not Required for Having Copies. -You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. - -10. Automatic Licensing of Downstream Recipients. -Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. - -An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. - -11. Patents. -A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". - -A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. - -In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. - -A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. - -12. No Surrender of Others' Freedom. -If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - -13. Remote Network Interaction; Use with the GNU General Public License. -Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. - -Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. - -14. Revised Versions of this License. -The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. - -Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. - -15. Disclaimer of Warranty. -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. Limitation of Liability. -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -17. Interpretation of Sections 15 and 16. -If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -Also add information on how to contact you by electronic and paper mail. - -If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. - -You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . \ No newline at end of file diff --git a/code/controllers/ProcessScheduler/LICENSE-CC-BY-NC b/code/controllers/ProcessScheduler/LICENSE-CC-BY-NC deleted file mode 100644 index d0955f424af..00000000000 --- a/code/controllers/ProcessScheduler/LICENSE-CC-BY-NC +++ /dev/null @@ -1 +0,0 @@ -This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. \ No newline at end of file diff --git a/code/controllers/ProcessScheduler/README.md b/code/controllers/ProcessScheduler/README.md deleted file mode 100644 index 610800ba374..00000000000 --- a/code/controllers/ProcessScheduler/README.md +++ /dev/null @@ -1,86 +0,0 @@ -ProcessScheduler -================ -A Goonstation release, maintained by Volundr - -##SUMMARY - -This is a mostly self-contained, fairly well-documented implementation of the main loop process architecture in use in Goonstation. - -##LICENSE - -This work is released under the following licenses. - -[![Creative Commons License](https://licensebuttons.net/l/by-nc/4.0/80x15.png)](http://creativecommons.org/licenses/by-nc/4.0/) - -This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. The complete text of this license is included in the file LICENSE-CC-BY-NC. - - -[![Affero GPL Version 3](http://www.gnu.org/graphics/agplv3-88x31.png)](http://www.gnu.org/licenses/agpl-3.0.html) - -This work is licensed under the Affero General Public License 3.0. The complete text of the license is included in the file LICENSE-AGPL. - -##INSTALLATION - -To integrate the process scheduler to your codebase, you will not need anything except the contents of the core/ folder. The rest of the project is simply for testing and to provide an example for the process scheduler code. - -### Test project setup -To compile and run the test project, you will require: - -- node.js -- BYOND - -Clone the repository to a path of your choosing, then change directory to it and execute: - -``` -npm install -g -bower install -g -``` - -Then you can either compile with DM or open the DM environment in DreamMaker and compile/run from there. - -##USAGE - -###BASICS -To use the process scheduler in your SS13 codebase, you'll need: - -- core/_defines.dm -- core/_stubs.dm -- core/process.dm -- core/processScheduler.dm -- core/processScheduler.js -- core/updateQueue.dm -- core/updateQueueWorker.dm - -To integrate, you can copy the contents of _defines.dm into your global defines file. Most ss13 codebases already have the code from _stubs.dm. - -The processScheduler is intended as a replacement for the old master_controller from r4407 and other fork codebases. To implement it, you need only to add the source files to your DM environment, and add the following code into world.New, above where the old master_controller is initialized. - -``` -processScheduler = new -processScheduler.setup() -processScheduler.start() -``` - -The processScheduler will automatically find all subtypes of process, and begin processing them. - -The interface code in test/processSchedulerView.dm is simply an example frontend, and can easily be rebuilt to use other styles, and/or render simple html without using javascript for refreshing the panel and killing processes. - -###DETAILS - -To implement a process, you have two options: - -1. Implement a raw loop-style processor -2. Implement an updateQueue processor - -There are clear examples of both of these paradigms in the code provided. Both styles are valid, but for processes that are just a loop calling an update proc on a bunch of objects, you should use the updateQueue. - -The updateQueue works by spawn(0)'ing your specified update proc, but it only puts one instance in the scheduler at a time. Examine the code for more details. The overall effect of this is that it doesn't block, and it lets update loops work concurrently. It enables a much smoother user experience. - -##Contributing - -I welcome pull requests and issue reports, and will try to merge/fix them as I have time. - -### Licensing for code submitted via PR: - -By submitting a pull request, you agree to release all original code submitted in the pull request under the [MIT License](http://opensource.org/licenses/MIT). You also agree that any code submitted is either your own work, or is public domain or under a equally or less restrictive license than the MIT license, or that you have the express written permission of the authors of the submitted code to submit the pull request. - diff --git a/code/controllers/ProcessScheduler/bower.json b/code/controllers/ProcessScheduler/bower.json deleted file mode 100644 index 9a6be56140d..00000000000 --- a/code/controllers/ProcessScheduler/bower.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "ProcessScheduler", - "main": "ProcessScheduler.js", - "version": "1.0.0", - "homepage": "https://github.com/goonstation/ProcessScheduler", - "authors": [ - "Volundr " - ], - "description": "BYOND SS13 Process Scheduler", - "keywords": [ - "byond", - "ss13", - "process", - "scheduler" - ], - "license": "CC-BY-NC", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "private": true, - "dependencies": { - "bootstrap2.3.2": "~2.3.2", - "jquery": "1.11.1", - "json2": "*" - } -} diff --git a/code/controllers/ProcessScheduler/core/_stubs.dm b/code/controllers/ProcessScheduler/core/_stubs.dm deleted file mode 100644 index 3615c12f192..00000000000 --- a/code/controllers/ProcessScheduler/core/_stubs.dm +++ /dev/null @@ -1,19 +0,0 @@ -/** - * _stubs.dm - * - * This file contains constructs that the process scheduler expects to exist - * in a standard ss13 fork. - */ - -/** - * logTheThing - * - * In goonstation, this proc writes a message to either the world log or diary. - * - * Blame Keelin. - */ -/proc/logTheThing(type, source, target, text, diaryType) - if(diaryType) - world << "Diary: \[[diaryType]:[type]] [text]" - else - world << "Log: \[[type]] [text]" diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm deleted file mode 100644 index 52c7b8f08e8..00000000000 --- a/code/controllers/ProcessScheduler/core/process.dm +++ /dev/null @@ -1,377 +0,0 @@ -// Process - -/datum/controller/process - /** - * State vars - */ - // Main controller ref - var/tmp/datum/controller/processScheduler/main - - // 1 if process is not running or queued - var/tmp/idle = 1 - - // 1 if process is queued - var/tmp/queued = 0 - - // 1 if process is running - var/tmp/running = 0 - - // 1 if process is blocked up - var/tmp/hung = 0 - - // 1 if process was killed - var/tmp/killed = 0 - - // Status text var - var/tmp/status - - // Previous status text var - var/tmp/previousStatus - - // 1 if process is disabled - var/tmp/disabled = 0 - - /** - * Config vars - */ - // Process name - var/name - - // Process schedule interval - // This controls how often the process would run under ideal conditions. - // If the process scheduler sees that the process has finished, it will wait until - // this amount of time has elapsed from the start of the previous run to start the - // process running again. - var/tmp/schedule_interval = PROCESS_DEFAULT_SCHEDULE_INTERVAL // run every 50 ticks - - // Process tick allowance - // This controls what percentage a single tick (0 to 100) the process should be. - // allowed to run before sleeping. - var/tmp/tick_allowance = PROCESS_DEFAULT_TICK_ALLOWANCE - - // hang_warning_time - this is the time (in 1/10 seconds) after which the server will begin to show "maybe hung" in the context window - var/tmp/hang_warning_time = PROCESS_DEFAULT_HANG_WARNING_TIME - - // hang_alert_time - After this much time(in 1/10 seconds), the server will send an admin debug message saying the process may be hung - var/tmp/hang_alert_time = PROCESS_DEFAULT_HANG_ALERT_TIME - - // hang_restart_time - After this much time(in 1/10 seconds), the server will automatically kill and restart the process. - var/tmp/hang_restart_time = PROCESS_DEFAULT_HANG_RESTART_TIME - - // How many times in the current run has the process deferred work till the next tick? - var/tmp/cpu_defer_count = 0 - - // How many SCHECKs have been skipped (to limit btime calls) - var/tmp/calls_since_last_scheck = 0 - - /** - * recordkeeping vars - */ - - // Records the time (1/10s timeofday) at which the process last finished sleeping - var/tmp/last_slept = 0 - - // Records the time (1/10s timeofday) at which the process last began running - var/tmp/run_start = 0 - - // Records the world.tick_usage (0 to 100) at which the process last began running - var/tmp/tick_start = 0 - - // Records the number of times this process has been killed and restarted - var/tmp/times_killed - - // Tick count - var/tmp/ticks = 0 - - var/tmp/last_task = "" - - var/tmp/last_object - - // Counts the number of times an exception has occurred; gets reset after 10 - var/tmp/list/exceptions = list() - - // Number of deciseconds to delay before starting the process - var/start_delay = 0 - -/datum/controller/process/New(var/datum/controller/processScheduler/scheduler) - ..() - main = scheduler - previousStatus = "idle" - idle() - name = "process" - schedule_interval = 50 - last_slept = 0 - run_start = 0 - tick_start = 0 - ticks = 0 - last_task = 0 - last_object = null - -/datum/controller/process/proc/preStart() - -/datum/controller/process/proc/started() - var/timeofhour = TimeOfHour - // Initialize last_slept so we can record timing information - last_slept = timeofhour - - // Initialize run_start so we can detect hung processes. - run_start = timeofhour - - // Initialize tick_start so we can know when to sleep - tick_start = world.tick_usage - - // Initialize defer count - cpu_defer_count = 0 - - running() - main.processStarted(src) - - onStart() - -/datum/controller/process/proc/finished() - ticks++ - idle() - main.processFinished(src) - - onFinish() - -/datum/controller/process/proc/doWork() - -/datum/controller/process/proc/setup() - -/datum/controller/process/proc/process() - started() - doWork() - finished() - -/datum/controller/process/proc/running() - idle = 0 - queued = 0 - running = 1 - hung = 0 - setStatus(PROCESS_STATUS_RUNNING) - -/datum/controller/process/proc/idle() - queued = 0 - running = 0 - idle = 1 - hung = 0 - setStatus(PROCESS_STATUS_IDLE) - -/datum/controller/process/proc/queued() - idle = 0 - running = 0 - queued = 1 - hung = 0 - setStatus(PROCESS_STATUS_QUEUED) - -/datum/controller/process/proc/hung() - hung = 1 - setStatus(PROCESS_STATUS_HUNG) - -/datum/controller/process/proc/handleHung() - var/timeofhour = TimeOfHour - var/datum/lastObj = last_object - var/lastObjType = "null" - if(istype(lastObj)) - lastObjType = lastObj.type - - // If timeofhour has rolled over, then we need to adjust. - if (timeofhour < run_start) - run_start -= 36000 - var/msg = "[name] process hung at tick #[ticks]. Process was unresponsive for [(timeofhour - run_start) / 10] seconds and was restarted. Last task: [last_task]. Last Object Type: [lastObjType]" - logTheThing("debug", null, null, msg) - logTheThing("diary", null, null, msg, "debug") - message_admins(msg) - - main.restartProcess(src.name) - -/datum/controller/process/proc/kill() - if (!killed) - var/msg = "[name] process was killed at tick #[ticks]." - logTheThing("debug", null, null, msg) - logTheThing("diary", null, null, msg, "debug") - //finished() - - // Allow inheritors to clean up if needed - onKill() - - // This should del - del(src) - -// Do not call this directly - use SHECK or SCHECK_EVERY -/datum/controller/process/proc/sleepCheck(var/tickId = 0) - calls_since_last_scheck = 0 - if (killed) - // The kill proc is the only place where killed is set. - // The kill proc should have deleted this datum, and all sleeping procs that are - // owned by it. - CRASH("A killed process is still running somehow...") - if (hung) - // This will only really help if the doWork proc ends up in an infinite loop. - handleHung() - CRASH("Process [name] hung and was restarted.") - - if (world.tick_usage > 100 || (world.tick_usage - tick_start) > tick_allowance) - sleep(world.tick_lag) - cpu_defer_count++ - last_slept = TimeOfHour - tick_start = world.tick_usage - - return 1 - - return 0 - -/datum/controller/process/proc/update() - // Clear delta - if(previousStatus != status) - setStatus(status) - - var/elapsedTime = getElapsedTime() - - if (hung) - handleHung() - return - else if (elapsedTime > hang_restart_time) - hung() - else if (elapsedTime > hang_alert_time) - setStatus(PROCESS_STATUS_PROBABLY_HUNG) - else if (elapsedTime > hang_warning_time) - setStatus(PROCESS_STATUS_MAYBE_HUNG) - - -/datum/controller/process/proc/getElapsedTime() - var/timeofhour = TimeOfHour - if (timeofhour < run_start) - return timeofhour - (run_start - 36000) - return timeofhour - run_start - -/datum/controller/process/proc/tickDetail() - return - -/datum/controller/process/proc/getContext() - return "[name][main.averageRunTime(src)][main.last_run_time[src]][main.highest_run_time[src]][ticks]\n" - -/datum/controller/process/proc/getContextData() - return list( - "name" = name, - "averageRunTime" = main.averageRunTime(src), - "lastRunTime" = main.last_run_time[src], - "highestRunTime" = main.highest_run_time[src], - "ticks" = ticks, - "schedule" = schedule_interval, - "status" = getStatusText(), - "disabled" = disabled - ) - -/datum/controller/process/proc/getStatus() - return status - -/datum/controller/process/proc/getStatusText(var/s = 0) - if(!s) - s = status - switch(s) - if(PROCESS_STATUS_IDLE) - return "idle (-1)" - if(PROCESS_STATUS_QUEUED) - return "queued (0)" - if(PROCESS_STATUS_RUNNING) - return "running (1)" - if(PROCESS_STATUS_MAYBE_HUNG) - return "maybe hung (2)" - if(PROCESS_STATUS_PROBABLY_HUNG) - return "probably hung (3)" - if(PROCESS_STATUS_HUNG) - return "HUNG (4)" - else - return "UNKNOWN (?)" - -/datum/controller/process/proc/getPreviousStatus() - return previousStatus - -/datum/controller/process/proc/getPreviousStatusText() - return getStatusText(previousStatus) - -/datum/controller/process/proc/setStatus(var/newStatus) - previousStatus = status - status = newStatus - -/datum/controller/process/proc/setLastTask(var/task, var/object) - last_task = task - last_object = object - -/datum/controller/process/proc/_copyStateFrom(var/datum/controller/process/target) - main = target.main - name = target.name - schedule_interval = target.schedule_interval - last_slept = 0 - run_start = 0 - tick_start = 0 - times_killed = target.times_killed - ticks = target.ticks - last_task = target.last_task - last_object = target.last_object - copyStateFrom(target) - -/datum/controller/process/proc/copyStateFrom(var/datum/controller/process/target) - -/datum/controller/process/proc/onKill() - -/datum/controller/process/proc/onStart() - -/datum/controller/process/proc/onFinish() - -/datum/controller/process/proc/disable() - disabled = 1 - -/datum/controller/process/proc/enable() - disabled = 0 - -/datum/controller/process/proc/getAverageRunTime() - return main.averageRunTime(src) -/datum/controller/process/proc/getLastRunTime() - return main.getProcessLastRunTime(src) - -/datum/controller/process/proc/getHighestRunTime() - return main.getProcessHighestRunTime(src) - -/datum/controller/process/proc/getTicks() - return ticks - -/datum/controller/process/proc/statProcess() - var/averageRunTime = round(getAverageRunTime(), 0.1)/10 - var/lastRunTime = round(getLastRunTime(), 0.1)/10 - var/highestRunTime = round(getHighestRunTime(), 0.1)/10 - stat("[name]", "T#[getTicks()] | AR [averageRunTime] | LR [lastRunTime] | HR [highestRunTime] | D [cpu_defer_count]") - -/datum/controller/process/proc/catchException(var/exception/e, var/thrower) - var/etext = "[e]" - var/eid = "[e]" // Exception ID, for tracking repeated exceptions - var/ptext = "" // "processing..." text, for what was being processed (if known) - if(istype(e)) - etext += " in [e.file], line [e.line]" - eid = "[e.file]:[e.line]" - if(eid in exceptions) - if(exceptions[eid]++ >= 10) - return - else - exceptions[eid] = 1 - if(istype(thrower, /datum)) - var/datum/D = thrower - ptext = " processing [D.type]" - if(istype(thrower, /atom)) - var/atom/A = thrower - ptext += " ([A]) ([A.x],[A.y],[A.z])" - log_to_dd("\[[time_stamp()]\] Process [name] caught exception[ptext]: [etext]") - if(exceptions[eid] >= 10) - log_to_dd("This exception will now be ignored for ten minutes.") - spawn(6000) - exceptions[eid] = 0 - - e.time_stamp() - log_exception(e) - -/datum/controller/process/proc/catchBadType(var/datum/caught) - if(isnull(caught) || !istype(caught) || !isnull(caught.gcDestroyed)) - return // Only bother with types we can identify and that don't belong - catchException("Type [caught.type] does not belong in process' queue") diff --git a/code/controllers/ProcessScheduler/core/processScheduler.dm b/code/controllers/ProcessScheduler/core/processScheduler.dm deleted file mode 100644 index ad58468a0d9..00000000000 --- a/code/controllers/ProcessScheduler/core/processScheduler.dm +++ /dev/null @@ -1,351 +0,0 @@ -// Singleton instance of game_controller_new, setup in world.New() -var/global/datum/controller/processScheduler/processScheduler - -/datum/controller/processScheduler - // Processes known by the scheduler - var/tmp/datum/controller/process/list/processes = new - - // Processes that are currently running - var/tmp/datum/controller/process/list/running = new - - // Processes that are idle - var/tmp/datum/controller/process/list/idle = new - - // Processes that are queued to run - var/tmp/datum/controller/process/list/queued = new - - // Process name -> process object map - var/tmp/datum/controller/process/list/nameToProcessMap = new - - // Process last queued times (world time) - var/tmp/datum/controller/process/list/last_queued = new - - // Process last start times (real time) - var/tmp/datum/controller/process/list/last_start = new - - // Process last run durations - var/tmp/datum/controller/process/list/last_run_time = new - - // Per process list of the last 20 durations - var/tmp/datum/controller/process/list/last_twenty_run_times = new - - // Process highest run time - var/tmp/datum/controller/process/list/highest_run_time = new - - // How long to sleep between runs (set to tick_lag in New) - var/tmp/scheduler_sleep_interval - - // Controls whether the scheduler is running or not - var/tmp/isRunning = 0 - - // Setup for these processes will be deferred until all the other processes are set up. - var/tmp/list/deferredSetupList = new - - var/tmp/currentTick = 0 - - var/tmp/currentTickStart = 0 - - var/tmp/cpuAverage = 0 - -/datum/controller/processScheduler/New() - ..() - // When the process scheduler is first new'd, tick_lag may be wrong, so these - // get re-initialized when the process scheduler is started. - // (These are kept here for any processes that decide to process before round start) - scheduler_sleep_interval = world.tick_lag - -/** - * deferSetupFor - * @param path processPath - * If a process needs to be initialized after everything else, add it to - * the deferred setup list. On goonstation, only the ticker needs to have - * this treatment. - */ -/datum/controller/processScheduler/proc/deferSetupFor(var/processPath) - if (!(processPath in deferredSetupList)) - deferredSetupList += processPath - -/datum/controller/processScheduler/proc/setup() - // There can be only one - if(processScheduler && (processScheduler != src)) - del(src) - return 0 - - var/process - // Add all the processes we can find, except for the ticker - for (process in subtypesof(/datum/controller/process)) - if (!(process in deferredSetupList)) - addProcess(new process(src)) - - for (process in deferredSetupList) - addProcess(new process(src)) - -/datum/controller/processScheduler/proc/start() - isRunning = 1 - // tick_lag will have been set by now, so re-initialize these - scheduler_sleep_interval = world.tick_lag - callPreStart() - updateStartDelays() - spawn(0) - process() - -/datum/controller/processScheduler/proc/callPreStart() - for (var/datum/controller/process/P in processes) - if (!P.disabled) - P.preStart() - -/datum/controller/processScheduler/proc/process() - while(isRunning) - checkRunningProcesses() - queueProcesses() - runQueuedProcesses() - sleep(scheduler_sleep_interval) - -/datum/controller/processScheduler/proc/stop() - isRunning = 0 - -/datum/controller/processScheduler/proc/checkRunningProcesses() - for(var/datum/controller/process/p in running) - p.update() - - if (isnull(p)) // Process was killed - continue - - var/status = p.getStatus() - var/previousStatus = p.getPreviousStatus() - - // Check status changes - if(status != previousStatus) - //Status changed. - switch(status) - if(PROCESS_STATUS_PROBABLY_HUNG) - message_admins("Process '[p.name]' may be hung.") - if(PROCESS_STATUS_HUNG) - message_admins("Process '[p.name]' is hung and will be restarted.") - -/datum/controller/processScheduler/proc/queueProcesses() - for(var/datum/controller/process/p in processes) - // Don't double-queue, don't queue running processes - if (p.disabled || p.running || p.queued || !p.idle) - continue - - // If the process should be running by now, go ahead and queue it - if (world.time >= last_queued[p] + p.schedule_interval) - setQueuedProcessState(p) - -/datum/controller/processScheduler/proc/runQueuedProcesses() - for(var/datum/controller/process/p in queued) - runProcess(p) - -/datum/controller/processScheduler/proc/addProcess(var/datum/controller/process/process) - processes.Add(process) - process.idle() - idle.Add(process) - - // init recordkeeping vars - last_start.Add(process) - last_start[process] = 0 - last_run_time.Add(process) - last_run_time[process] = 0 - last_twenty_run_times.Add(process) - last_twenty_run_times[process] = list() - highest_run_time.Add(process) - highest_run_time[process] = 0 - - // init starts and stops record starts - recordStart(process, 0) - recordEnd(process, 0) - - // Set up process - process.setup() - - // Save process in the name -> process map - nameToProcessMap[process.name] = process - -/datum/controller/processScheduler/proc/replaceProcess(var/datum/controller/process/oldProcess, var/datum/controller/process/newProcess) - processes.Remove(oldProcess) - processes.Add(newProcess) - - newProcess.idle() - idle.Remove(oldProcess) - running.Remove(oldProcess) - queued.Remove(oldProcess) - idle.Add(newProcess) - - last_start.Remove(oldProcess) - last_start.Add(newProcess) - last_start[newProcess] = 0 - - last_run_time.Add(newProcess) - last_run_time[newProcess] = last_run_time[oldProcess] - last_run_time.Remove(oldProcess) - - last_twenty_run_times.Add(newProcess) - last_twenty_run_times[newProcess] = last_twenty_run_times[oldProcess] - last_twenty_run_times.Remove(oldProcess) - - highest_run_time.Add(newProcess) - highest_run_time[newProcess] = highest_run_time[oldProcess] - highest_run_time.Remove(oldProcess) - - recordStart(newProcess, 0) - recordEnd(newProcess, 0) - - nameToProcessMap[newProcess.name] = newProcess - -/datum/controller/processScheduler/proc/updateStartDelays() - for(var/datum/controller/process/p in processes) - if(p.start_delay) - last_queued[p] = world.time - p.start_delay - -/datum/controller/processScheduler/proc/runProcess(var/datum/controller/process/process) - spawn(0) - process.process() - -/datum/controller/processScheduler/proc/processStarted(var/datum/controller/process/process) - setRunningProcessState(process) - recordStart(process) - -/datum/controller/processScheduler/proc/processFinished(var/datum/controller/process/process) - setIdleProcessState(process) - recordEnd(process) - -/datum/controller/processScheduler/proc/setIdleProcessState(var/datum/controller/process/process) - if (process in running) - running -= process - if (process in queued) - queued -= process - if (!(process in idle)) - idle += process - -/datum/controller/processScheduler/proc/setQueuedProcessState(var/datum/controller/process/process) - if (process in running) - running -= process - if (process in idle) - idle -= process - if (!(process in queued)) - queued += process - - // The other state transitions are handled internally by the process. - process.queued() - -/datum/controller/processScheduler/proc/setRunningProcessState(var/datum/controller/process/process) - if (process in queued) - queued -= process - if (process in idle) - idle -= process - if (!(process in running)) - running += process - -/datum/controller/processScheduler/proc/recordStart(var/datum/controller/process/process, var/time = null) - if (isnull(time)) - time = TimeOfHour - last_queued[process] = world.time - last_start[process] = time - else - last_queued[process] = (time == 0 ? 0 : world.time) - last_start[process] = time - -/datum/controller/processScheduler/proc/recordEnd(var/datum/controller/process/process, var/time = null) - if (isnull(time)) - time = TimeOfHour - - // If world.timeofday has rolled over, then we need to adjust. - if (time < last_start[process]) - last_start[process] -= 36000 - - var/lastRunTime = time - last_start[process] - - if(lastRunTime < 0) - lastRunTime = 0 - - recordRunTime(process, lastRunTime) - -/** - * recordRunTime - * Records a run time for a process - */ -/datum/controller/processScheduler/proc/recordRunTime(var/datum/controller/process/process, time) - last_run_time[process] = time - if(time > highest_run_time[process]) - highest_run_time[process] = time - - var/list/lastTwenty = last_twenty_run_times[process] - if (lastTwenty.len == 20) - lastTwenty.Cut(1, 2) - lastTwenty.len++ - lastTwenty[lastTwenty.len] = time - -/** - * averageRunTime - * returns the average run time (over the last 20) of the process - */ -/datum/controller/processScheduler/proc/averageRunTime(var/datum/controller/process/process) - var/lastTwenty = last_twenty_run_times[process] - - var/t = 0 - var/c = 0 - for(var/time in lastTwenty) - t += time - c++ - - if(c > 0) - return t / c - return c - -/datum/controller/processScheduler/proc/getProcessLastRunTime(var/datum/controller/process/process) - return last_run_time[process] - -/datum/controller/processScheduler/proc/getProcessHighestRunTime(var/datum/controller/process/process) - return highest_run_time[process] - -/datum/controller/processScheduler/proc/getStatusData() - var/list/data = new - - for (var/datum/controller/process/p in processes) - data.len++ - data[data.len] = p.getContextData() - - return data - -/datum/controller/processScheduler/proc/getProcessCount() - return processes.len - -/datum/controller/processScheduler/proc/hasProcess(var/processName as text) - if (nameToProcessMap[processName]) - return 1 - -/datum/controller/processScheduler/proc/killProcess(var/processName as text) - restartProcess(processName) - -/datum/controller/processScheduler/proc/restartProcess(var/processName as text) - if (hasProcess(processName)) - var/datum/controller/process/oldInstance = nameToProcessMap[processName] - var/datum/controller/process/newInstance = new oldInstance.type(src) - newInstance._copyStateFrom(oldInstance) - replaceProcess(oldInstance, newInstance) - oldInstance.kill() - -/datum/controller/processScheduler/proc/enableProcess(var/processName as text) - if (hasProcess(processName)) - var/datum/controller/process/process = nameToProcessMap[processName] - process.enable() - -/datum/controller/processScheduler/proc/disableProcess(var/processName as text) - if (hasProcess(processName)) - var/datum/controller/process/process = nameToProcessMap[processName] - process.disable() - -/datum/controller/processScheduler/proc/sign(var/x) - if (x == 0) - return 1 - return x / abs(x) - -/datum/controller/processScheduler/proc/statProcesses() - if(!isRunning) - stat("Processes", "Scheduler not running") - return - stat("Processes", "[processes.len] (R [running.len] / Q [queued.len] / I [idle.len])") - stat(null, "[round(cpuAverage, 0.1)] CPU") - for(var/datum/controller/process/p in processes) - p.statProcess() diff --git a/code/controllers/ProcessScheduler/package.json b/code/controllers/ProcessScheduler/package.json deleted file mode 100644 index f699553fc61..00000000000 --- a/code/controllers/ProcessScheduler/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "ProcessScheduler", - "version": "1.0.0", - "description": "BYOND SS13 Process Scheduler", - "main": "processScheduler.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/goonstation/ProcessScheduler.git" - }, - "keywords": [ - "byond", - "ss13", - "process", - "scheduler" - ], - "author": "Volundr", - "license": "CC-BY-NC", - "bugs": { - "url": "https://github.com/goonstation/ProcessScheduler/issues" - }, - "homepage": "https://github.com/goonstation/ProcessScheduler", - "dependencies": { - "bower": "*" - } -} diff --git a/code/controllers/ProcessScheduler/test/processScheduler.js b/code/controllers/ProcessScheduler/test/processScheduler.js deleted file mode 100644 index 0a4f111355d..00000000000 --- a/code/controllers/ProcessScheduler/test/processScheduler.js +++ /dev/null @@ -1,56 +0,0 @@ -(function ($) { - function setRef(theRef) { - ref = theRef; - } - - function jax(action, data) { - if (typeof data === 'undefined') - data = {}; - var params = []; - for (var k in data) { - if (data.hasOwnProperty(k)) { - params.push(encodeURIComponent(k) + '=' + encodeURIComponent(data[k])); - } - } - var newLoc = '?src=' + ref + ';action=' + action + ';' + params.join(';'); - window.location = newLoc; - } - - function requestRefresh(e) { - jax("refresh", null); - } - - function handleRefresh(processTable) { - $('#processTable').html(processTable); - initProcessTableButtons(); - } - - function requestKill(e) { - var button = $(e.currentTarget); - jax("kill", {name: button.data("process-name")}); - } - - function requestEnable(e) { - var button = $(e.currentTarget); - jax("enable", {name: button.data("process-name")}); - } - - function requestDisable(e) { - var button = $(e.currentTarget); - jax("disable", {name: button.data("process-name")}); - } - - function initProcessTableButtons() { - $(".kill-btn").on("click", requestKill); - $(".enable-btn").on("click", requestEnable); - $(".disable-btn").on("click", requestDisable); - } - - window.setRef = setRef; - window.handleRefresh = handleRefresh; - - $(function() { - initProcessTableButtons(); - $('#btn-refresh').on("click", requestRefresh); - }); -}(jQuery)); \ No newline at end of file diff --git a/code/controllers/Processes/Shuttle.dm b/code/controllers/Processes/Shuttle.dm deleted file mode 100644 index a10586d76d9..00000000000 --- a/code/controllers/Processes/Shuttle.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/controller/process/Shuttle/setup() - name = "shuttle controller" - schedule_interval = 20 // every 2 seconds - - if(!shuttle_controller) - shuttle_controller = new - -/datum/controller/process/Shuttle/doWork() - shuttle_controller.process() diff --git a/code/controllers/Processes/air.dm b/code/controllers/Processes/air.dm deleted file mode 100644 index 64bda8c8d99..00000000000 --- a/code/controllers/Processes/air.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/controller/process/air/setup() - name = "air" - schedule_interval = 20 // every 2 seconds - start_delay = 4 - - if(!air_master) - air_master = new - air_master.Setup() - -/datum/controller/process/air/doWork() - if(!air_processing_killed) - if(!air_master.Tick()) //Runtimed. - air_master.failed_ticks++ - - if(air_master.failed_ticks > 5) - world << "RUNTIMES IN ATMOS TICKER. Killing air simulation!" - world.log << "### ZAS SHUTDOWN" - - message_admins("ZASALERT: Shutting down! status: [air_master.tick_progress]") - log_admin("ZASALERT: Shutting down! status: [air_master.tick_progress]",level=1) - - air_processing_killed = TRUE - air_master.failed_ticks = 0 diff --git a/code/controllers/Processes/alarm.dm b/code/controllers/Processes/alarm.dm deleted file mode 100644 index 707c5756418..00000000000 --- a/code/controllers/Processes/alarm.dm +++ /dev/null @@ -1,41 +0,0 @@ -// We manually initialize the alarm handlers instead of looping over all existing types -// to make it possible to write: camera.triggerAlarm() rather than alarm_manager.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof. -/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new() -/var/global/datum/alarm_handler/camera/camera_alarm = new() -/var/global/datum/alarm_handler/fire/fire_alarm = new() -/var/global/datum/alarm_handler/motion/motion_alarm = new() -/var/global/datum/alarm_handler/power/power_alarm = new() - -// Alarm Manager, the manager for alarms. -var/datum/controller/process/alarm/alarm_manager - -/datum/controller/process/alarm - var/list/datum/alarm/all_handlers - -/datum/controller/process/alarm/setup() - name = "alarm" - schedule_interval = 20 // every 2 seconds - all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) - alarm_manager = src - -/datum/controller/process/alarm/doWork() - for(last_object in all_handlers) - var/datum/alarm_handler/AH = last_object - AH.process() - F_SCHECK - -/datum/controller/process/alarm/proc/active_alarms() - var/list/all_alarms = new - for(var/datum/alarm_handler/AH in all_handlers) - var/list/alarms = AH.alarms - all_alarms += alarms - - return all_alarms - -/datum/controller/process/alarm/proc/number_of_active_alarms() - var/list/alarms = active_alarms() - return alarms.len - -/datum/controller/process/alarm/statProcess() - ..() - stat(null, "[number_of_active_alarms()] alarm\s") diff --git a/code/controllers/Processes/chemistry.dm b/code/controllers/Processes/chemistry.dm deleted file mode 100644 index 508bdba37fd..00000000000 --- a/code/controllers/Processes/chemistry.dm +++ /dev/null @@ -1,33 +0,0 @@ -var/datum/controller/process/chemistry/chemistryProcess - -/datum/controller/process/chemistry - var/list/active_holders - var/list/chemical_reactions - var/list/chemical_reagents - -/datum/controller/process/chemistry/setup() - name = "chemistry" - schedule_interval = 20 // every 2 seconds - chemistryProcess = src - active_holders = list() - chemical_reactions = chemical_reactions_list - chemical_reagents = chemical_reagents_list - -/datum/controller/process/chemistry/statProcess() - ..() - stat(null, "[active_holders.len] reagent holder\s") - -/datum/controller/process/chemistry/doWork() - for(last_object in active_holders) - var/datum/reagents/holder = last_object - if(!holder.process_reactions()) - active_holders -= holder - F_SCHECK - -/datum/controller/process/chemistry/proc/mark_for_update(var/datum/reagents/holder) - if(holder in active_holders) - return - - //Process once, right away. If we still need to continue then add to the active_holders list and continue later - if(holder.process_reactions()) - active_holders += holder diff --git a/code/controllers/Processes/disease.dm b/code/controllers/Processes/disease.dm deleted file mode 100644 index 2a1c2c9eb60..00000000000 --- a/code/controllers/Processes/disease.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/controller/process/disease - var/tmp/datum/updateQueue/updateQueueInstance - -/datum/controller/process/disease/setup() - name = "disease" - schedule_interval = 20 // every 2 seconds - -/datum/controller/process/disease/doWork() - for(last_object in active_diseases) - var/datum/disease/D = last_object - D.process() - F_SCHECK - -/datum/controller/process/disease/statProcess() - ..() - stat(null, "[active_diseases.len] disease\s") diff --git a/code/controllers/Processes/effects.dm b/code/controllers/Processes/effects.dm deleted file mode 100644 index a9e8efe2f62..00000000000 --- a/code/controllers/Processes/effects.dm +++ /dev/null @@ -1,92 +0,0 @@ -#define STAGE_IDLE 0 -#define STAGE_EFFECT 1 -#define STAGE_SUBEFFECT 2 - -var/datum/controller/process/effects/effect_master - -/var/list/datum/effect_system/effects_objects = list() // The effect-spawning objects. Shouldn't be many of these. -/var/list/obj/visual_effect/effects_visuals = list() // The visible component of an effect. May be created without an effect object. - -/datum/controller/process/effects - var/tmp/list/processing_effects = list() - var/tmp/list/processing_visuals = list() - var/tmp/stage = STAGE_IDLE - -/datum/controller/process/effects/setup() - effect_master = src - name = "effects" - schedule_interval = 2 - tick_allowance = 15 - -/datum/controller/process/effects/doWork() - if (stage == STAGE_IDLE) - // Start a new work cycle. - processing_effects = effects_objects - effects_objects = list() - stage = STAGE_EFFECT - - while (processing_effects.len) - var/datum/effect_system/E = processing_effects[processing_effects.len] - processing_effects.len-- - - if (!E || E.gcDestroyed) - continue - - switch (E.process()) - if (EFFECT_CONTINUE) - effects_objects += E - - if (EFFECT_DESTROY) - returnToPool(E) - - F_SCHECK - - if (stage == STAGE_EFFECT) - processing_visuals = effects_visuals - effects_visuals = list() - stage = STAGE_SUBEFFECT - - while (processing_visuals.len) - var/obj/visual_effect/V = processing_visuals[processing_visuals.len] - processing_visuals.len-- - - if (!V || V.gcDestroyed) - effects_visuals -= V - continue - - switch (V.tick()) - if (EFFECT_CONTINUE) - effects_visuals += V - - if (EFFECT_DESTROY) - effects_visuals -= V - V.end() - returnToPool(V) - - F_SCHECK - - stage = STAGE_IDLE - - // We're done. - if (!processing_effects.len && !processing_visuals.len && !effects_objects.len && !effects_visuals.len) - disable() - -/datum/controller/process/effects/proc/queue(var/datum/effect_system/E) - if (!E || E.gcDestroyed) - return - - effects_objects += E - enable() - -/datum/controller/process/effects/proc/queue_simple(var/obj/visual_effect/V) - if (!V || V.gcDestroyed) - return - - effects_visuals += V - enable() - -/datum/controller/process/effects/statProcess() - ..() - stat(null, "Effect process is [disabled ? "sleeping" : "processing"].") - stat(null, "[effects_objects.len] effects queued, [processing_effects.len] processing") - stat(null, "[effects_visuals.len] visuals queued, [processing_visuals.len] processing") diff --git a/code/controllers/Processes/emergencyShuttle.dm b/code/controllers/Processes/emergencyShuttle.dm deleted file mode 100644 index e7289311b95..00000000000 --- a/code/controllers/Processes/emergencyShuttle.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/controller/process/emergencyShuttle/setup() - name = "emergency shuttle" - schedule_interval = 20 // every 2 seconds - - if(!emergency_shuttle) - emergency_shuttle = new - -/datum/controller/process/emergencyShuttle/doWork() - emergency_shuttle.process() diff --git a/code/controllers/Processes/event.dm b/code/controllers/Processes/event.dm deleted file mode 100644 index 404c71f0aee..00000000000 --- a/code/controllers/Processes/event.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/controller/process/event/setup() - name = "event controller" - schedule_interval = 20 // every 2 seconds - -/datum/controller/process/event/doWork() - for(last_object in event_manager.active_events) - var/datum/event/E = last_object - E.process() - F_SCHECK - - for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR) - last_object = event_manager.event_containers[i] - var/list/datum/event_container/EC = last_object - EC.process() - F_SCHECK diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm deleted file mode 100644 index 26fe73a8f54..00000000000 --- a/code/controllers/Processes/garbage.dm +++ /dev/null @@ -1,253 +0,0 @@ -// The time a datum was destroyed by the GC, or null if it hasn't been -/datum/var/gcDestroyed - -#define GC_COLLECTIONS_PER_RUN 300 -#define GC_COLLECTION_TIMEOUT (30 SECONDS) -#define GC_FORCE_DEL_PER_RUN 30 - -var/datum/controller/process/garbage_collector/garbage_collector -var/list/delayed_garbage = list() - -/datum/controller/process/garbage_collector - var/garbage_collect = 1 // Whether or not to actually do work - var/total_dels = 0 // number of total del()'s - var/tick_dels = 0 // number of del()'s we've done this tick - var/soft_dels = 0 - var/hard_dels = 0 // number of hard dels in total - var/list/destroyed = list() // list of refID's of things that should be garbage collected - // refID's are associated with the time at which they time out and need to be manually del() - // we do this so we aren't constantly locating them and preventing them from being gc'd - - var/list/logging = list() // list of all types that have failed to GC associated with the number of times that's happened. - // the types are stored as strings - -/datum/controller/process/garbage_collector/setup() - name = "garbage" - schedule_interval = 5 SECONDS - start_delay = 3 - - if(!garbage_collector) - garbage_collector = src - - for(var/garbage in delayed_garbage) - qdel(garbage) - delayed_garbage.Cut() - delayed_garbage = null - -#ifdef GC_FINDREF -world/loop_checks = 0 -#endif - -/datum/controller/process/garbage_collector/doWork() - if(!garbage_collect) - return - - tick_dels = 0 - var/time_to_kill = world.time - GC_COLLECTION_TIMEOUT - var/checkRemain = GC_COLLECTIONS_PER_RUN - var/remaining_force_dels = GC_FORCE_DEL_PER_RUN - - while(destroyed.len && --checkRemain >= 0) - if(remaining_force_dels <= 0) - #ifdef GC_DEBUG - testing("GC: Reached max force dels per tick [dels] vs [maxDels]") - #endif - break // Server's already pretty pounded, everything else can wait 2 seconds - var/refID = destroyed[1] - var/GCd_at_time = destroyed[refID] - if(GCd_at_time > time_to_kill) - #ifdef GC_DEBUG - testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + collection_timeout]") - #endif - break // Everything else is newer, skip them - var/datum/A = locate(refID) - #ifdef GC_DEBUG - testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]") - #endif - if(A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake - // Something's still referring to the qdel'd object. Kill it. - log_hard_delete(A) - logging["[A.type]"]++ - del(A) - - hard_dels++ - remaining_force_dels-- - else - #ifdef GC_DEBUG - testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]") - #endif - soft_dels++ - tick_dels++ - total_dels++ - destroyed.Cut(1, 2) - F_SCHECK - -#undef GC_FORCE_DEL_PER_TICK -#undef GC_COLLECTION_TIMEOUT -#undef GC_COLLECTIONS_PER_TICK - -#ifdef GC_FINDREF -/datum/controller/process/garbage_collector/proc/LookForRefs(var/datum/D, var/list/targ) - . = 0 - for(var/V in D.vars) - if(V == "contents") - continue - if(istype(D.vars[V], /atom)) - var/atom/A = D.vars[V] - if(A in targ) - testing("GC: [A] | [A.type] referenced by [D] | [D.type], var [V]") - . += 1 - else if(islist(D.vars[V])) - . += LookForListRefs(D.vars[V], targ, D, V) - -/datum/controller/process/garbage_collector/proc/LookForListRefs(var/list/L, var/list/targ, var/datum/D, var/V) - . = 0 - for(var/F in L) - if(istype(F, /atom)) - var/atom/A = F - if(A in targ) - testing("GC: [A] | [A.type] referenced by [D] | [D.type], list [V]") - . += 1 - if(islist(F)) - . += LookForListRefs(F, targ, D, "[F] in list [V]") -#endif - -/datum/controller/process/garbage_collector/proc/AddTrash(datum/A) - if(!istype(A) || !isnull(A.gcDestroyed)) - return - #ifdef GC_DEBUG - testing("GC: AddTrash(\ref[A] - [A.type])") - #endif - A.gcDestroyed = world.time - destroyed -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list. - destroyed["\ref[A]"] = world.time - -/datum/controller/process/garbage_collector/statProcess() - ..() - stat(null, "[garbage_collect ? "On" : "Off"], [destroyed.len] queued") - stat(null, "Dels: [total_dels], [soft_dels] soft, [hard_dels] hard, [tick_dels] last run") - -// Should be treated as a replacement for the 'del' keyword. -// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(var/datum/A) - if(!A) - return - if(!istype(A)) - warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") - del(A) - if(garbage_collector) - garbage_collector.total_dels++ - garbage_collector.hard_dels++ - else if(isnull(A.gcDestroyed)) - // Let our friend know they're about to get collected - . = !A.Destroy() - if(. && A) - A.finalize_qdel() - -/datum/proc/finalize_qdel() - if(IsPooled(src)) - returnToPool(src) - else - del(src) - -/atom/finalize_qdel() - if (IsPooled(src)) - returnToPool(src) - else - if(garbage_collector) - garbage_collector.AddTrash(src) - else - delayed_garbage |= src - -/icon/finalize_qdel() - del(src) - -/image/finalize_qdel() - del(src) - -/mob/finalize_qdel() - del(src) - -/turf/finalize_qdel() - del(src) - -// Default implementation of clean-up code. -// This should be overridden to remove all references pointing to the object being destroyed. -// Return true if the the GC controller should allow the object to continue existing. (Useful if pooling objects.) -/datum/proc/Destroy() - nanomanager.close_uis(src) - tag = null - return - -#ifdef TESTING -/client/var/running_find_references - -/mob/verb/create_thing() - set category = "Debug" - set name = "Create Thing" - - var/path = input("Enter path") - var/atom/thing = new path(loc) - thing.find_references() - -/atom/verb/find_references() - set category = "Debug" - set name = "Find References" - set background = 1 - set src in world - - if(!usr || !usr.client) - return - - if(usr.client.running_find_references) - testing("CANCELLED search for references to a [usr.client.running_find_references].") - usr.client.running_find_references = null - return - - if(alert("Running this will create a lot of lag until it finishes. You can cancel it by running it again. Would you like to begin the search?", "Find References", "Yes", "No") == "No") - return - - // Remove this object from the list of things to be auto-deleted. - if(garbage_collector) - garbage_collector.destroyed -= "\ref[src]" - - usr.client.running_find_references = type - testing("Beginning search for references to a [type].") - var/list/things = list() - for(var/client/thing) - things += thing - for(var/datum/thing) - things += thing - for(var/atom/thing) - things += thing - testing("Collected list of things in search for references to a [type]. ([things.len] Thing\s)") - for(var/datum/thing in things) - if(!usr.client.running_find_references) return - for(var/varname in thing.vars) - var/variable = thing.vars[varname] - if(variable == src) - testing("Found [src.type] \ref[src] in [thing.type]'s [varname] var.") - else if(islist(variable)) - if(src in variable) - testing("Found [src.type] \ref[src] in [thing.type]'s [varname] list var.") - testing("Completed search for references to a [type].") - usr.client.running_find_references = null - -/client/verb/purge_all_destroyed_objects() - set category = "Debug" - if(garbage_collector) - while(garbage_collector.destroyed.len) - var/datum/o = locate(garbage_collector.destroyed[1]) - if(istype(o) && o.gcDestroyed) - del(o) - garbage_collector.dels++ - garbage_collector.destroyed.Cut(1, 2) -#endif - -#ifdef GC_DEBUG -#undef GC_DEBUG -#endif - -#ifdef GC_FINDREF -#undef GC_FINDREF -#endif diff --git a/code/controllers/Processes/inactivity.dm b/code/controllers/Processes/inactivity.dm deleted file mode 100644 index 137bcb6e0b2..00000000000 --- a/code/controllers/Processes/inactivity.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/controller/process/inactivity/setup() - name = "inactivity" - schedule_interval = 600 // Once every minute (approx.) - -/datum/controller/process/inactivity/doWork() - if(config.kick_inactive) - for(last_object in clients) - var/client/C = last_object - if(!C.holder && C.is_afk(config.kick_inactive MINUTES)) - if(!istype(C.mob, /mob/dead)) - log_access("AFK: [key_name(C)]") - C << "You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected." - del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients. - F_SCHECK diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm deleted file mode 100644 index e9dd98b16e7..00000000000 --- a/code/controllers/Processes/lighting.dm +++ /dev/null @@ -1,75 +0,0 @@ -#define STAGE_NONE 0 -#define STAGE_SOURCE 1 -#define STAGE_CORNER 2 -#define STAGE_OVERLAY 3 - -/var/list/lighting_update_lights = list() // List of lighting sources queued for update. -/var/list/lighting_update_corners = list() // List of lighting corners queued for update. -/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. - -// Probably slow. -/var/lighting_profiling = FALSE - -/var/datum/controller/process/lighting/lighting_process - -/datum/controller/process/lighting - schedule_interval = LIGHTING_INTERVAL - -/datum/controller/process/lighting/setup() - name = "lighting" - lighting_process = src - -/datum/controller/process/lighting/statProcess() - ..() - stat(null, "Server tick usage is [world.tick_usage].") - stat(null, "[all_lighting_overlays.len] overlays ([all_lighting_corners.len] corners)") - stat(null, "Lights: [lighting_update_lights.len] queued") - stat(null, "Corners: [lighting_update_corners.len] queued") - stat(null, "Overlays: [lighting_update_overlays.len] queued") - -/datum/controller/process/lighting/doWork() - var/list/curr_lights = lighting_update_lights - var/list/curr_corners = lighting_update_corners - var/list/curr_overlays = lighting_update_overlays - - while (curr_lights.len) - var/datum/light_source/L = curr_lights[curr_lights.len] - curr_lights.len-- - - if(L.destroyed || L.check() || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - - F_SCHECK - - while (curr_corners.len) - var/datum/lighting_corner/C = curr_corners[curr_corners.len] - curr_corners.len-- - - C.update_overlays() - - C.needs_update = FALSE - - F_SCHECK - - while (curr_overlays.len) - var/atom/movable/lighting_overlay/O = curr_overlays[curr_overlays.len] - curr_overlays.len-- - - O.update_overlay() - O.needs_update = FALSE - - F_SCHECK - -#undef STAGE_NONE -#undef STAGE_SOURCE -#undef STAGE_CORNER -#undef STAGE_OVERLAY diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm deleted file mode 100644 index 856444bdb04..00000000000 --- a/code/controllers/Processes/machinery.dm +++ /dev/null @@ -1,149 +0,0 @@ -/var/global/machinery_sort_required = 0 -var/global/list/power_using_machines = list() -var/global/list/ticking_machines = list() - -#define STAGE_NONE 0 -#define STAGE_MACHINERY_PROCESS 1 -#define STAGE_MACHINERY_POWER 2 -#define STAGE_POWERNET 3 -#define STAGE_POWERSINK 4 -#define STAGE_PIPENET 5 - -/proc/add_machine(var/obj/machinery/M) - if (QDELETED(M)) - return - - var/type = M.get_process_type() - if (type) - machines += M - - if (type & M_PROCESSES) - ticking_machines += M - - if (type & M_USES_POWER) - power_using_machines += M - -/proc/remove_machine(var/obj/machinery/M) - machines -= M - power_using_machines -= M - ticking_machines -= M - -/datum/controller/process/machinery - var/tmp/list/processing_machinery = list() - var/tmp/list/processing_power_users = list() - var/tmp/list/processing_powernets = list() - var/tmp/list/processing_powersinks = list() - var/tmp/list/processing_pipenets = list() - var/stage = STAGE_NONE - -/datum/controller/process/machinery/setup() - name = "machinery" - schedule_interval = 2 SECONDS - start_delay = 12 - -/datum/controller/process/machinery/doWork() - // If we're starting a new tick, setup. - if (stage == STAGE_NONE) - processing_machinery = ticking_machines.Copy() - stage = STAGE_MACHINERY_PROCESS - - // Process machinery. - while (processing_machinery.len) - var/obj/machinery/M = processing_machinery[processing_machinery.len] - processing_machinery.len-- - - if (QDELETED(M)) - remove_machine(M) - continue - - switch (M.process()) - if (PROCESS_KILL) - remove_machine(M) - - if (M_NO_PROCESS) - ticking_machines -= M - - F_SCHECK - - if (stage == STAGE_MACHINERY_PROCESS) - processing_power_users = power_using_machines.Copy() - stage = STAGE_MACHINERY_POWER - - while (processing_power_users.len) - var/obj/machinery/M = processing_power_users[processing_power_users.len] - processing_power_users.len-- - - if (QDELETED(M)) - remove_machine(M) - continue - - if (M.use_power) - M.auto_use_power() - - F_SCHECK - - if (stage == STAGE_MACHINERY_POWER) - processing_powernets = powernets.Copy() - stage = STAGE_POWERNET - - while (processing_powernets.len) - var/datum/powernet/PN = processing_powernets[processing_powernets.len] - processing_powernets.len-- - - if (QDELETED(PN)) - powernets -= PN - continue - - PN.reset() - F_SCHECK - - if (stage == STAGE_POWERNET) - processing_powersinks = processing_power_items.Copy() - stage = STAGE_POWERSINK - - while (processing_powersinks.len) - var/obj/item/I = processing_powersinks[processing_powersinks.len] - processing_powersinks.len-- - - if (QDELETED(I) || !I.pwr_drain()) - processing_power_items -= I - - F_SCHECK - - if (stage == STAGE_POWERSINK) - processing_pipenets = pipe_networks.Copy() - stage = STAGE_PIPENET - - while (processing_pipenets.len) - var/datum/pipe_network/PN = processing_pipenets[processing_pipenets.len] - processing_pipenets.len-- - - if (QDELETED(PN)) - pipe_networks -= PN - continue - - PN.process() - F_SCHECK - - stage = STAGE_NONE - -/datum/controller/process/machinery/proc/internal_sort() - if(machinery_sort_required) - machinery_sort_required = 0 - machines = dd_sortedObjectList(machines) - -/datum/controller/process/machinery/statProcess() - ..() - stat(null, "[machines.len] total machines") - stat(null, "[ticking_machines.len] ticking machines, [processing_machinery.len] queued") - stat(null, "[power_using_machines.len] power-using machines, [processing_power_users.len] queued") - stat(null, "[powernets.len] powernets, [processing_powernets.len] queued") - stat(null, "[processing_power_items.len] power items, [processing_powersinks.len] queued") - stat(null, "[pipe_networks.len] pipenets, [processing_pipenets.len] queued") - -#undef STAGE_NONE -#undef STAGE_MACHINERY_PROCESS -#undef STAGE_MACHINERY_POWER -#undef STAGE_POWERNET -#undef STAGE_POWERSINK -#undef STAGE_PIPENET diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm deleted file mode 100644 index ead2791dd69..00000000000 --- a/code/controllers/Processes/mob.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/controller/process/mob - var/tmp/datum/updateQueue/updateQueueInstance - var/tmp/list/queue = list() - var/normal_exit = TRUE - -/datum/controller/process/mob/setup() - name = "mob" - schedule_interval = 2 SECONDS // every 2 seconds - start_delay = 16 - -/datum/controller/process/mob/started() - ..() - if(!mob_list) - mob_list = list() - -/datum/controller/process/mob/doWork() - if (normal_exit) - queue = mob_list.Copy() - - normal_exit = FALSE - - while (queue.len) - var/mob/M = queue[queue.len] - queue.len-- - - if (!M || M.gcDestroyed) - mob_list -= M - continue - - M.Life() - F_SCHECK - - normal_exit = TRUE - -/datum/controller/process/mob/statProcess() - ..() - stat(null, "[mob_list.len] mobs, [queue.len] queued") diff --git a/code/controllers/Processes/modifier.dm b/code/controllers/Processes/modifier.dm deleted file mode 100644 index 7bbb181d120..00000000000 --- a/code/controllers/Processes/modifier.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/controller/process/modifier/setup() - name = "modifiers" - schedule_interval = 10 - start_delay = 8 - -/datum/controller/process/modifier/started() - ..() - if(!processing_modifiers) - processing_modifiers = list() - -/datum/controller/process/modifier/doWork() - for(last_object in processing_modifiers) - var/datum/modifier/O = last_object - if(isnull(O.gcDestroyed)) - O.process() - else - catchBadType(O) - processing_objects -= O - -/datum/controller/process/modifier/statProcess() - ..() - stat(null, "[processing_modifiers.len] modifiers") diff --git a/code/controllers/Processes/nanoui.dm b/code/controllers/Processes/nanoui.dm deleted file mode 100644 index fb43970709d..00000000000 --- a/code/controllers/Processes/nanoui.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/controller/process/nanoui - var/is_idle = TRUE - var/list/queued_uis = list() - -/datum/controller/process/nanoui/setup() - name = "nanoui" - schedule_interval = 2 SECONDS - -/datum/controller/process/nanoui/statProcess() - ..() - stat(null, "[nanomanager.processing_uis.len] UIs, [queued_uis.len] processing") - -/datum/controller/process/nanoui/doWork() - if (is_idle) - queued_uis = nanomanager.processing_uis.Copy() - is_idle = FALSE - - while (queued_uis.len) - var/datum/nanoui/UI = queued_uis[queued_uis.len] - queued_uis.len-- - - if (!UI || UI.gcDestroyed) - catchBadType(UI) - nanomanager.processing_uis -= UI - continue - - UI.process() - F_SCHECK - - is_idle = TRUE - -/*datum/controller/process/nanoui/doWork() - for(last_object in nanomanager.processing_uis) - var/datum/nanoui/NUI = last_object - if(istype(NUI) && isnull(NUI.gcDestroyed)) - try - NUI.process() - catch(var/exception/e) - catchException(e, NUI) - else - catchBadType(NUI) - nanomanager.processing_uis -= NUI -*/ diff --git a/code/controllers/Processes/news.dm b/code/controllers/Processes/news.dm deleted file mode 100644 index e56a424000e..00000000000 --- a/code/controllers/Processes/news.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/controller/process/news/setup() - name = "news" - schedule_interval = 600 // every 60 seconds - - if(!news_controller) - news_controller = new - -/datum/controller/process/news/doWork() - news_controller.process() - -/datum/controller/process/news/getStatName() - return ..()+"(STAT:[news_controller.running] FLS:[news_controller.fails])" diff --git a/code/controllers/Processes/night_lighting.dm b/code/controllers/Processes/night_lighting.dm deleted file mode 100644 index d421aef941a..00000000000 --- a/code/controllers/Processes/night_lighting.dm +++ /dev/null @@ -1,71 +0,0 @@ -var/datum/controller/process/night_lighting/nl_ctrl - -/datum/controller/process/night_lighting/ - var/isactive = 0 - var/firstrun = 1 - var/manual_override = 0 - // 0 -> No manual override - // 1 -> Override via. player-set nightmode setting (like CE console) - // 2 -> Red-alert override. - -/datum/controller/process/night_lighting/proc/is_active() - return isactive - -/datum/controller/process/night_lighting/setup() - name = "night lighting controller" - schedule_interval = 5 MINUTES - - nl_ctrl = src - - if (!config.night_lighting) - // Stop trying to delete processes. Not how it goes. - disabled = 1 - -/datum/controller/process/night_lighting/preStart() - doWork(FALSE) - -/datum/controller/process/night_lighting/doWork(announce = TRUE) - if (manual_override) // don't automatically change lighting if it was manually changed in-game - return - - var/time = worldtime2hours() - if (time <= config.nl_finish || time >= config.nl_start) - if (!isactive) - activate() - if (announce) - command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') - else - if (isactive) - deactivate() - if (announce) - command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') - -// 'whitelisted' areas are areas that have nightmode explicitly enabled - -/datum/controller/process/night_lighting/proc/activate(var/whitelisted_only = 1) - isactive = 1 - for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only)) - APC.toggle_nightlight("on") - - F_SCHECK - -/datum/controller/process/night_lighting/proc/deactivate(var/whitelisted_only = 1) - isactive = 0 - for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only)) - APC.toggle_nightlight("off") - - F_SCHECK - -/datum/controller/process/night_lighting/proc/get_apc_list(var/whitelisted_only = 1) - var/list/obj/machinery/power/apc/lighting_apcs = list() - - for (var/A in all_areas) - var/area/B = A - if (B.no_light_control || (!(B.allow_nightmode) && whitelisted_only)) - continue - if (B.apc && !B.apc.aidisabled) - lighting_apcs += B.apc - - F_SCHECK - - return lighting_apcs diff --git a/code/controllers/Processes/obj.dm b/code/controllers/Processes/obj.dm deleted file mode 100644 index b0cea9c2ed0..00000000000 --- a/code/controllers/Processes/obj.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/controller/process/obj - var/normal_exit = TRUE - var/list/queue = list() - -/datum/controller/process/obj/setup() - name = "obj" - schedule_interval = 2 SECONDS - start_delay = 8 - -/datum/controller/process/obj/started() - ..() - if(!processing_objects) - processing_objects = list() - -/datum/controller/process/obj/doWork() - if (normal_exit) - queue = processing_objects.Copy() - normal_exit = FALSE - - while (queue.len) - var/datum/O = queue[queue.len] - queue.len-- - - if (!O || O.gcDestroyed) - processing_objects -= O - continue - - O:process() - F_SCHECK - - normal_exit = TRUE - -/datum/controller/process/obj/statProcess() - ..() - stat(null, "[processing_objects.len] objects, [queue.len] queued") diff --git a/code/controllers/Processes/scheduler.dm b/code/controllers/Processes/scheduler.dm deleted file mode 100644 index 35146686fcc..00000000000 --- a/code/controllers/Processes/scheduler.dm +++ /dev/null @@ -1,166 +0,0 @@ -/var/datum/controller/process/scheduler/scheduler - -/************ -* Scheduler * -************/ -/datum/controller/process/scheduler - var/list/datum/scheduled_task/tasks = list() - var/datum/scheduled_task/head - -/datum/controller/process/scheduler/setup() - name = "scheduler" - schedule_interval = 2 - scheduler = src - -/datum/controller/process/scheduler/doWork() - while (head && !PSCHED_CHECK_TICK) - if (head.destroyed) - head.kill() - head = head.next - tasks -= head - continue - if (head.trigger_time >= world.time) - return // Nothing after this will be ready to fire. - - // This one's ready to fire, process it. - var/datum/scheduled_task/task = head - head = task.next - task.pre_process() - task.process() - task.post_process() - if (task.destroyed) // post_process probably destroyed it. - tasks -= task - task.kill() - -/datum/controller/process/scheduler/proc/queue(datum/scheduled_task/task) - if (!task || !task.trigger_time) - warning("scheduler: Invalid task queued! Ignoring.") - return - // Reset this in-case we're doing a rebuild. - task.next = null - if (!head && !tasks.len) - head = task - tasks += task - return - - if (!head) // Head's missing but we still have tasks, rebuild. - tasks += task - rebuild_queue() - return - - var/datum/scheduled_task/curr = head - while (curr.next && curr.trigger_time < task.trigger_time) - curr = curr.next - - if (!curr.next) - // We're at the end of the queue, just append. - curr.next = task - tasks += task - return - - // Inserting midway into the list. - var/old_next = curr.next - curr.next = task - task.next = old_next - tasks += task - -// Rebuilds the queue linked-list, removing invalid or destroyed entries. -/datum/controller/process/scheduler/proc/rebuild_queue() - log_debug("scheduler: Rebuilding queue.") - var/list/old_tasks = tasks - tasks = list() - if (!old_tasks.len) - log_debug("scheduler: rebuild was called on empty queue! Aborting.") - return - - // Find the head. - for (var/thing in old_tasks) - var/datum/scheduled_task/task = thing - if (QDELETED(task)) - old_tasks -= task - continue - - if (task.destroyed) - old_tasks -= task - task.kill() - continue - - if (!head || task.trigger_time < head.trigger_time) - head = task - - if (!head) - log_debug("scheduler: unable to find head! Purging task queue.") - for (var/thing in old_tasks) - var/datum/scheduled_task/task = thing - if (QDELETED(task)) - continue - - task.kill() - - head = null - return - - // Don't queue the head. - tasks += head - old_tasks -= head - - // Now rebuild the queue. - for (var/thing in old_tasks) - var/datum/scheduled_task/task = thing - - queue(task) - - log_debug("scheduler: Queue diff is [old_tasks.len - tasks.len].") - -/datum/controller/process/scheduler/statProcess() - ..() - stat(null, "[tasks.len] task\s") - -/datum/controller/process/scheduler/proc/schedule(var/datum/scheduled_task/st) - queue(st) - -/datum/controller/process/scheduler/proc/unschedule(var/datum/scheduled_task/st) - st.destroyed = TRUE - -/********** -* Helpers * -**********/ -/proc/schedule(source, the_proc, time, ...) - if (time < 0) - return - time += world.time - var/list/the_args - if (length(args) > 3) - the_args = args.Copy(4) - else - the_args = list() - if (source) - return schedule_task_with_source(time, the_proc, the_args) - else - return schedule_task(time, the_proc, the_args) - -/proc/schedule_task_in(var/in_time, var/procedure, var/list/arguments = list()) - return schedule_task(world.time + in_time, procedure, arguments) - -/proc/schedule_task_with_source_in(var/in_time, var/source, var/procedure, var/list/arguments = list()) - return schedule_task_with_source(world.time + in_time, source, procedure, arguments) - -/proc/schedule_task(var/trigger_time, var/procedure, var/list/arguments) - var/datum/scheduled_task/st = new/datum/scheduled_task(trigger_time, procedure, arguments, /proc/destroy_scheduled_task, list()) - scheduler.schedule(st) - return st - -/proc/schedule_task_with_source(var/trigger_time, var/source, var/procedure, var/list/arguments) - var/datum/scheduled_task/st = new/datum/scheduled_task/source(trigger_time, source, procedure, arguments, /proc/destroy_scheduled_task, list()) - scheduler.schedule(st) - return st - -/proc/schedule_repeating_task(var/trigger_time, var/repeat_interval, var/procedure, var/list/arguments) - var/datum/scheduled_task/st = new/datum/scheduled_task(trigger_time, procedure, arguments, /proc/repeat_scheduled_task, list(repeat_interval)) - scheduler.schedule(st) - return st - -/proc/schedule_repeating_task_with_source(var/trigger_time, var/repeat_interval, var/source, var/procedure, var/list/arguments) - var/datum/scheduled_task/st = new/datum/scheduled_task/source(trigger_time, source, procedure, arguments, /proc/repeat_scheduled_task, list(repeat_interval)) - scheduler.schedule(st) - return st diff --git a/code/controllers/Processes/sun.dm b/code/controllers/Processes/sun.dm deleted file mode 100644 index f09806cef53..00000000000 --- a/code/controllers/Processes/sun.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/controller/process/sun/setup() - name = "sun" - schedule_interval = 20 // every second - sun = new - -/datum/controller/process/sun/doWork() - sun.calc_position() diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm deleted file mode 100644 index 891a511ec6d..00000000000 --- a/code/controllers/Processes/supply.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/controller/process/supply/setup() - name = "supply controller" - schedule_interval = 300 // every 30 seconds - -/datum/controller/process/supply/doWork() - supply_controller.process() \ No newline at end of file diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm deleted file mode 100644 index b7c45ba91a4..00000000000 --- a/code/controllers/Processes/ticker.dm +++ /dev/null @@ -1,35 +0,0 @@ -var/global/datum/controller/process/ticker/tickerProcess - -/datum/controller/process/ticker - var/lastTickerTimeDuration - var/lastTickerTime - -/datum/controller/process/ticker/setup() - name = "ticker" - schedule_interval = 20 // every 2 seconds - - lastTickerTime = world.timeofday - - if(!ticker) - ticker = new - - tickerProcess = src - - spawn(0) - if(ticker) - ticker.pregame() - -/datum/controller/process/ticker/doWork() - var/currentTime = world.timeofday - - if(currentTime < lastTickerTime) // check for midnight rollover - lastTickerTimeDuration = (currentTime - (lastTickerTime - TICKS_IN_DAY)) / TICKS_IN_SECOND - else - lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND - - lastTickerTime = currentTime - - ticker.process() - -/datum/controller/process/ticker/proc/getLastTickerTimeDuration() - return lastTickerTimeDuration diff --git a/code/controllers/Processes/turf.dm b/code/controllers/Processes/turf.dm deleted file mode 100644 index 57ed82ca648..00000000000 --- a/code/controllers/Processes/turf.dm +++ /dev/null @@ -1,16 +0,0 @@ -var/global/list/turf/processing_turfs = list() - -/datum/controller/process/turf/setup() - name = "turf" - schedule_interval = 20 // every 2 seconds - -/datum/controller/process/turf/doWork() - for(last_object in processing_turfs) - var/turf/T = last_object - if(T.process() == PROCESS_KILL) - processing_turfs.Remove(T) - F_SCHECK - -/datum/controller/process/turf/statProcess() - ..() - stat(null, "[processing_turfs.len] turf\s") diff --git a/code/controllers/Processes/vote.dm b/code/controllers/Processes/vote.dm deleted file mode 100644 index 5df5ce69792..00000000000 --- a/code/controllers/Processes/vote.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/controller/process/vote/setup() - name = "vote" - schedule_interval = 10 // every second - -/datum/controller/process/vote/doWork() - vote.process() diff --git a/code/controllers/Processes/wireless.dm b/code/controllers/Processes/wireless.dm deleted file mode 100644 index 9c997d70947..00000000000 --- a/code/controllers/Processes/wireless.dm +++ /dev/null @@ -1,72 +0,0 @@ -//------------------------------- -/* - Wireless controller - - Used for connecting devices to each other (i.e. machinery, doors, emitters, etc.) - Unlike the radio controller, the wireless controller does not pass communications between devices. Once the devices - have been connected they call each others procs directly, they do not use the wireless controller to communicate. - - See code\modules\wireless\interfaces.dm for details of how to connect devices. -*/ -//------------------------------- - -var/datum/controller/process/wireless/wirelessProcess - -/datum/controller/process/wireless - var/list/receiver_list - var/list/pending_connections - var/list/retry_connections - var/list/failed_connections - -/datum/controller/process/wireless/setup() - name = "wireless" - schedule_interval = 50 - pending_connections = new() - retry_connections = new() - failed_connections = new() - receiver_list = new() - wirelessProcess = src - -/datum/controller/process/wireless/proc/add_device(var/datum/wifi/receiver/R) - if(receiver_list) - receiver_list |= R - else - receiver_list = new() - receiver_list |= R - -/datum/controller/process/wireless/proc/remove_device(var/datum/wifi/receiver/R) - if(receiver_list) - receiver_list -= R - -/datum/controller/process/wireless/proc/add_request(var/datum/connection_request/C) - if(pending_connections) - pending_connections += C - else - pending_connections = new() - pending_connections += C - -/datum/controller/process/wireless/doWork() - //process any connection requests waiting to be retried - if(retry_connections.len > 0) - //any that fail are moved into the failed connections list - process_queue(retry_connections, failed_connections) - - //process any pending connection requests - if(pending_connections.len > 0) - //any that fail are moved to the retry queue - process_queue(pending_connections, retry_connections) - -/datum/controller/process/wireless/proc/process_queue(var/list/process_conections, var/list/unsuccesful_connections) - for(last_object in process_conections) - var/datum/connection_request/C = last_object - var/target_found = 0 - for(var/datum/wifi/receiver/R in receiver_list) - if(R.id == C.id) - var/datum/wifi/sender/S = C.source - S.connect_device(R) - R.connect_device(S) - target_found = 1 - process_conections -= C - if(!target_found) - unsuccesful_connections += C - F_SCHECK diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm deleted file mode 100644 index 597b7f607c4..00000000000 --- a/code/controllers/autotransfer.dm +++ /dev/null @@ -1,17 +0,0 @@ -var/datum/controller/transfer_controller/transfer_controller - -datum/controller/transfer_controller - var/timerbuffer = 0 //buffer for time check - var/currenttick = 0 -datum/controller/transfer_controller/New() - timerbuffer = config.vote_autotransfer_initial - processing_objects += src - -datum/controller/transfer_controller/Destroy() - processing_objects -= src - -datum/controller/transfer_controller/proc/process() - currenttick = currenttick + 1 - if (world.time >= timerbuffer - 600) - vote.autotransfer() - timerbuffer = timerbuffer + config.vote_autotransfer_interval \ No newline at end of file diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm deleted file mode 100644 index 045f4781953..00000000000 --- a/code/controllers/communications.dm +++ /dev/null @@ -1,347 +0,0 @@ -/* - HOW IT WORKS - - The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether". - Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way. - procs: - - add_object(obj/device as obj, var/new_frequency as num, var/filter as text|null = null) - Adds listening object. - parameters: - device - device receiving signals, must have proc receive_signal (see description below). - one device may listen several frequencies, but not same frequency twice. - new_frequency - see possibly frequencies below; - filter - thing for optimization. Optional, but recommended. - All filters should be consolidated in this file, see defines later. - Device without listening filter will receive all signals (on specified frequency). - Device with filter will receive any signals sent without filter. - Device with filter will not receive any signals sent with different filter. - returns: - Reference to frequency object. - - remove_object (obj/device, old_frequency) - Obliviously, after calling this proc, device will not receive any signals on old_frequency. - Other frequencies will left unaffected. - - return_frequency(var/frequency as num) - returns: - Reference to frequency object. Use it if you need to send and do not need to listen. - - radio_frequency is a global object maintaining list of devices that listening specific frequency. - procs: - - post_signal(obj/source as obj|null, datum/signal/signal, var/filter as text|null = null, var/range as num|null = null) - Sends signal to all devices that wants such signal. - parameters: - source - object, emitted signal. Usually, devices will not receive their own signals. - signal - see description below. - filter - described above. - range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels. - - obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param) - Handler from received signals. By default does nothing. Define your own for your object. - Avoid of sending signals directly from this proc, use spawn(-1). DO NOT use sleep() here or call procs that sleep please. If you must, use spawn() - parameters: - signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return! - receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO. - TRANSMISSION_WIRE is currently unused. - receive_param - for TRANSMISSION_RADIO here comes frequency. - - datum/signal - vars: - source - an object that emitted signal. Used for debug and bearing. - data - list with transmitting data. Usual use pattern: - data["msg"] = "hello world" - encryption - Some number symbolizing "encryption key". - Note that game actually do not use any cryptography here. - If receiving object don't know right key, it must ignore encrypted signal in its receive_signal. - -*/ - -/* -Frequency range: 1200 to 1600 -Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency, even during mapmaking) - -Radio: -1459 - standard radio chat -1351 - Science -1353 - Command -1355 - Medical -1357 - Engineering -1359 - Security -1341 - deathsquad -1443 - Confession Intercom -1347 - Cargo techs -1349 - Service people - -Devices: -1451 - tracking implant -1457 - RSD default - -On the map: -1311 for prison shuttle console (in fact, it is not used) -1435 for status displays -1437 for atmospherics/fire alerts -1438 for engine components -1439 for air pumps, air scrubbers, atmo control -1441 for atmospherics - supply tanks -1443 for atmospherics - distribution loop/mixed air tank -1445 for bot nav beacons -1447 for mulebot, secbot and ed209 control -1449 for airlock controls, electropack, magnets -1451 for toxin lab access -1453 for engineering access -1455 for AI access -*/ - -var/const/RADIO_LOW_FREQ = 1200 -var/const/PUBLIC_LOW_FREQ = 1441 -var/const/PUBLIC_HIGH_FREQ = 1489 -var/const/RADIO_HIGH_FREQ = 1600 - -var/const/BOT_FREQ = 1447 -var/const/COMM_FREQ = 1353 -var/const/ERT_FREQ = 1345 -var/const/AI_FREQ = 1343 -var/const/DTH_FREQ = 1341 -var/const/SYND_FREQ = 1213 -var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency. - -// department channels -var/const/PUB_FREQ = 1459 -var/const/SEC_FREQ = 1359 -var/const/ENG_FREQ = 1357 -var/const/MED_FREQ = 1355 -var/const/SCI_FREQ = 1351 -var/const/SRV_FREQ = 1349 -var/const/SUP_FREQ = 1347 - -// internal department channels -var/const/MED_I_FREQ = 1485 -var/const/SEC_I_FREQ = 1475 - -var/list/radiochannels = list( - "Common" = PUB_FREQ, - "Science" = SCI_FREQ, - "Command" = COMM_FREQ, - "Medical" = MED_FREQ, - "Engineering" = ENG_FREQ, - "Security" = SEC_FREQ, - "Response Team" = ERT_FREQ, - "Special Ops" = DTH_FREQ, - "Mercenary" = SYND_FREQ, - "Supply" = SUP_FREQ, - "Service" = SRV_FREQ, - "AI Private" = AI_FREQ, - "Entertainment" = ENT_FREQ, - "Medical(I)" = MED_I_FREQ, - "Security(I)" = SEC_I_FREQ -) - -// central command channels, i.e deathsquid & response teams -var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ) - -// Antag channels, i.e. Syndicate -var/list/ANTAG_FREQS = list(SYND_FREQ) - -//Department channels, arranged lexically -var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ, ENT_FREQ) - -#define TRANSMISSION_WIRE 0 -#define TRANSMISSION_RADIO 1 - -/proc/frequency_span_class(var/frequency) - // Antags! - if (frequency in ANTAG_FREQS) - return "syndradio" - // centcomm channels (deathsquid and ert) - if(frequency in CENT_FREQS) - return "centradio" - // command channel - if(frequency == COMM_FREQ) - return "comradio" - // AI private channel - if(frequency == AI_FREQ) - return "airadio" - // department radio formatting (poorly optimized, ugh) - if(frequency == SEC_FREQ) - return "secradio" - if (frequency == ENG_FREQ) - return "engradio" - if(frequency == SCI_FREQ) - return "sciradio" - if(frequency == MED_FREQ) - return "medradio" - if(frequency == SUP_FREQ) // cargo - return "supradio" - if(frequency == SRV_FREQ) // service - return "srvradio" - if(frequency == ENT_FREQ) //entertainment - return "entradio" - if(frequency in DEPT_FREQS) - return "deptradio" - - return "radio" - -/* filters */ -//When devices register with the radio controller, they might register under a certain filter. -//Other devices can then choose to send signals to only those devices that belong to a particular filter. -//This is done for performance, so we don't send signals to lots of machines unnecessarily. - -//This filter is special because devices belonging to default also recieve signals sent to any other filter. -var/const/RADIO_DEFAULT = "radio_default" - -var/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms -var/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms -var/const/RADIO_CHAT = "radio_telecoms" -var/const/RADIO_ATMOSIA = "radio_atmos" -var/const/RADIO_NAVBEACONS = "radio_navbeacon" -var/const/RADIO_AIRLOCK = "radio_airlock" -var/const/RADIO_SECBOT = "radio_secbot" -var/const/RADIO_MULEBOT = "radio_mulebot" -var/const/RADIO_MAGNETS = "radio_magnet" - -var/global/datum/controller/radio/radio_controller - -/hook/startup/proc/createRadioController() - radio_controller = new /datum/controller/radio() - return 1 - -//callback used by objects to react to incoming radio signals -/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param) - return null - -//The global radio controller -/datum/controller/radio - var/list/datum/radio_frequency/frequencies = list() - -/datum/controller/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/filter = null as text|null) - var/f_text = num2text(new_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - - frequency.add_listener(device, filter) - return frequency - -/datum/controller/radio/proc/remove_object(obj/device, old_frequency) - var/f_text = num2text(old_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(frequency) - frequency.remove_listener(device) - - if(frequency.devices.len == 0) - qdel(frequency) - frequencies -= f_text - - return 1 - -/datum/controller/radio/proc/return_frequency(var/new_frequency as num) - var/f_text = num2text(new_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - - return frequency - -/datum/radio_frequency - var/frequency as num - var/list/list/obj/devices = list() - -/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null) - var/turf/start_point - if(range) - start_point = get_turf(source) - if(!start_point) - qdel(signal) - return 0 - if (filter) - send_to_filter(source, signal, filter, start_point, range) - send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) - else - //Broadcast the signal to everyone! - for (var/next_filter in devices) - send_to_filter(source, signal, next_filter, start_point, range) - -//Sends a signal to all machines belonging to a given filter. Should be called by post_signal() -/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null) - if (range && !start_point) - return - - for(var/obj/device in devices[filter]) - if(device == source) - continue - if(range) - var/turf/end_point = get_turf(device) - if(!end_point) - continue - if(start_point.z!=end_point.z || get_dist(start_point, end_point) > range) - continue - - device.receive_signal(signal, TRANSMISSION_RADIO, frequency) - -/datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) - if (!filter) - filter = RADIO_DEFAULT - //log_debug("add_listener(device=[device],filter=[filter]) frequency=[frequency]") - var/list/obj/devices_line = devices[filter] - if (!devices_line) - devices_line = new - devices[filter] = devices_line - devices_line+=device -// var/list/obj/devices_line___ = devices[filter_str] -// var/l = devices_line___.len - //log_debug("DEBUG: devices_line.len=[devices_line.len]") - //log_debug("DEBUG: devices(filter_str).len=[l]") - -/datum/radio_frequency/proc/remove_listener(obj/device) - for (var/devices_filter in devices) - var/list/devices_line = devices[devices_filter] - devices_line-=device - while (null in devices_line) - devices_line -= null - if (devices_line.len==0) - devices -= devices_filter - del(devices_line) - -/datum/signal - var/obj/source - - var/transmission_method = 0 //unused at the moment - //0 = wire - //1 = radio transmission - //2 = subspace transmission - - var/list/data = list() - var/encryption - - var/frequency = 0 - -/datum/signal/proc/copy_from(datum/signal/model) - source = model.source - transmission_method = model.transmission_method - data = model.data - encryption = model.encryption - frequency = model.frequency - -/datum/signal/proc/debug_print() - if (source) - . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" - else - . = "signal = {source = '[source]' ()\n" - for (var/i in data) - . += "data\[\"[i]\"\] = \"[data[i]]\"\n" - if(islist(data[i])) - var/list/L = data[i] - for(var/t in L) - . += "data\[\"[i]\"\] list has: [t]" diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 1c874a92e47..97f614c50f5 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -253,6 +253,12 @@ var/list/gamemode_cache = list() var/api_rate_limit = 50 var/list/api_rate_limit_whitelist = list() + // Subsystems. + var/obj/effect/statclick/statclick + + // Master Controller settings. + var/mc_init_tick_limit = TICK_LIMIT_MC_INIT_DEFAULT + //UDP GELF Logging var/log_gelf_enabled = 0 var/log_gelf_ip = "" @@ -796,6 +802,10 @@ var/list/gamemode_cache = list() if("api_rate_limit_whitelist") config.api_rate_limit_whitelist = text2list(value, ";") + + if("mc_ticklimit_init") + config.mc_init_tick_limit = text2num(value) || TICK_LIMIT_MC_INIT_DEFAULT + if("log_gelf_enabled") config.log_gelf_enabled = text2num(value) diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm new file mode 100644 index 00000000000..71657470398 --- /dev/null +++ b/code/controllers/controller.dm @@ -0,0 +1,19 @@ +/datum/controller + var/name + // The object used for the clickable stat() button. + var/obj/effect/statclick/statclick + +/datum/controller/proc/Initialize() + +//cleanup actions +/datum/controller/proc/Shutdown() + +/datum/controller/proc/Recover() + +/datum/controller/proc/stat_entry() + +// Called when SSexplosives begins processing explosions. +/datum/controller/proc/ExplosionStart() + +// Called when SSexplosives finishes processing all queued explosions. +/datum/controller/proc/ExplosionEnd() diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm deleted file mode 100644 index 6e379540873..00000000000 --- a/code/controllers/failsafe.dm +++ /dev/null @@ -1,50 +0,0 @@ -var/datum/controller/failsafe/Failsafe - -/datum/controller/failsafe // This thing pretty much just keeps poking the master controller - var/processing = 0 - var/processing_interval = 100 //poke the MC every 10 seconds - - var/MC_iteration = 0 - var/MC_defcon = 0 //alert level. For every poke that fails this is raised by 1. When it reaches 5 the MC is replaced with a new one. (effectively killing any master_controller.process() and starting a new one) - - var/lighting_iteration = 0 - var/lighting_defcon = 0 //alert level for lighting controller. - -/datum/controller/failsafe/New() - //There can be only one failsafe. Out with the old in with the new (that way we can restart the Failsafe by spawning a new one) - if(Failsafe != src) - if(istype(Failsafe)) - qdel(Failsafe) - Failsafe = src - Failsafe.process() - - -/datum/controller/failsafe/proc/process() - processing = 1 - spawn(0) - set background = 1 - while(1) //more efficient than recursivly calling ourself over and over. background = 1 ensures we do not trigger an infinite loop - if(!master_controller) new /datum/controller/game_controller() //replace the missing master_controller! This should never happen. - - if(processing) - if(lighting_controller.processing) - if(lighting_iteration == lighting_controller.iteration) //master_controller hasn't finished processing in the defined interval - switch(lighting_defcon) - if(0 to 3) - lighting_defcon++ - if(4) - admins << "Warning. The Lighting Controller has not fired in the last [lighting_defcon*processing_interval] ticks. Automatic restart in [processing_interval] ticks." - lighting_defcon = 5 - if(5) - admins << "Warning. The Lighting Controller has still not fired within the last [lighting_defcon*processing_interval] ticks. Killing and restarting..." - new /datum/controller/lighting() //replace the old lighting_controller (hence killing the old one's process) - lighting_controller.process() //Start it rolling again - lighting_defcon = 0 - else - lighting_defcon = 0 - lighting_iteration = lighting_controller.iteration - else - MC_defcon = 0 - lighting_defcon = 0 - - sleep(processing_interval) \ No newline at end of file diff --git a/code/controllers/master/admin.dm b/code/controllers/master/admin.dm new file mode 100644 index 00000000000..76e39a915c6 --- /dev/null +++ b/code/controllers/master/admin.dm @@ -0,0 +1,107 @@ +// Clickable stat() button. +/obj/effect/statclick + name = "Initializing..." + var/target + +/obj/effect/statclick/New(loc, text, target) + ..() + name = text + src.target = target + +/obj/effect/statclick/proc/update(text) + name = text + return src + +/obj/effect/statclick/debug + var/class + +/obj/effect/statclick/debug/Click(location, control, params) + if(!usr.client.holder || !target) + return + + var/permit_mark = TRUE + + if(!class) + if(istype(target, /datum/controller/subsystem)) + class = "subsystem" + else if(istype(target, /datum/controller)) + class = "controller" + else if(istype(target, /datum)) + class = "datum" + permit_mark = FALSE + else + class = "unknown" + permit_mark = FALSE + + var/list/paramlist = params2list(params) + if (paramlist["shift"] && permit_mark && target) + if (target in usr.client.holder.watched_processes) + usr << span("notice", "[target] removed from watchlist.") + LAZYREMOVE(usr.client.holder.watched_processes, target) + else + usr << span("notice", "[target] added to watchlist.") + LAZYADD(usr.client.holder.watched_processes, target) + else + usr.client.debug_variables(target) + message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") + +// Debug verbs. +/client/proc/restart_controller(controller in list("Master", "Failsafe")) + set category = "Debug" + set name = "Restart Controller" + set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" + + if(!check_rights(R_DEBUG|R_SERVER)) + return + + switch(controller) + if("Master") + new/datum/controller/master() + feedback_add_details("admin_verb","RMC") + if("Failsafe") + new /datum/controller/failsafe() + feedback_add_details("admin_verb","RFailsafe") + + message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") + +// Subsystems that cmd_ss_panic can hard-restart. +// *MUST* have New() use NEW_SS_GLOBAL. +var/list/panic_targets = list( + "Garbage" = /datum/controller/subsystem/garbage_collector, + "Air" = /datum/controller/subsystem/air, + "Explosives" = /datum/controller/subsystem/explosives, + "Game Ticker" = /datum/controller/subsystem/ticker +) + +// Subsystems that might do funny things or lose data if hard-restarted. +// Makes subsystem require an additional confirmation to restart. +var/list/panic_targets_data_loss = list( + "Game Ticker" = TRUE +) + +/client/proc/cmd_ss_panic(controller in panic_targets) + set category = "Server" + set name = "Force-Restart Subsystem" + set desc = "Hard-restarts a subsystem. May break things, use with caution." + + if (!check_rights(R_DEBUG | R_SERVER)) + return + + if (alert("Hard-Restart [controller]? Use with caution, this may break things.", "Subsystem Restart", "No", "No", "Yes") != "Yes") + usr << "Aborted." + return + + // If it's marked as potentially causing data-loss (like SStimer), require another confirmation. + if (panic_targets_data_loss[controller]) + if (alert("This subsystem ([controller]) may cause data loss or strange behavior if restarted! Continue?", "AAAAAA", "No", "No", "Yes") != "Yes") + usr << "Aborted." + return + + log_and_message_admins(span("danger", "hard-restarted the [controller] subsystem.")) + log_debug("SS PANIC: [controller] hard-restart by [usr]!") + + // NEW_SS_GLOBAL will handle destruction of old controller & data transfer, just create a new one and add it to the MC. + var/ctype = panic_targets[controller] + Master.subsystems += new ctype + + sortTim(Master.subsystems, /proc/cmp_subsystem_display) diff --git a/code/controllers/master/failsafe.dm b/code/controllers/master/failsafe.dm new file mode 100644 index 00000000000..4040e981f7f --- /dev/null +++ b/code/controllers/master/failsafe.dm @@ -0,0 +1,106 @@ + /** + * Failsafe + * + * Pretty much pokes the MC to make sure it's still alive. + **/ + +#define FAILSAFE_MSG(msg) admin_notice("FAILSAFE: [msg]", R_DEBUG|R_ADMIN|R_DEV) + +var/datum/controller/failsafe/Failsafe + +/datum/controller/failsafe // This thing pretty much just keeps poking the master controller + name = "Failsafe" + + // The length of time to check on the MC (in deciseconds). + // Set to 0 to disable. + var/processing_interval = 20 + // The alert level. For every failed poke, we drop a DEFCON level. Once we hit DEFCON 1, restart the MC. + var/defcon = 5 + //the world.time of the last check, so the mc can restart US if we hang. + // (Real friends look out for *eachother*) + var/lasttick = 0 + + // Track the MC iteration to make sure its still on track. + var/master_iteration = 0 + +/datum/controller/failsafe/New() + // Highlander-style: there can only be one! Kill off the old and replace it with the new. + if(Failsafe != src) + if(istype(Failsafe)) + qdel(Failsafe) + Failsafe = src + Initialize() + +/datum/controller/failsafe/Initialize() + set waitfor = 0 + Failsafe.Loop() + qdel(Failsafe) //when Loop() returns, we delete ourselves and let the mc recreate us + +/datum/controller/failsafe/Destroy() + ..() + return QDEL_HINT_HARDDEL_NOW + +/datum/controller/failsafe/proc/Loop() + while(1) + lasttick = world.time + if(!Master) + // Replace the missing Master! This should never, ever happen. + new /datum/controller/master() + // Only poke it if overrides are not in effect. + if(processing_interval > 0) + if(Master.processing && Master.iteration) + // Check if processing is done yet. + if(Master.iteration == master_iteration) + switch(defcon) + if(4,5) + --defcon + if(3) + FAILSAFE_MSG("Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") + --defcon + if(2) + FAILSAFE_MSG("Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") + --defcon + if(1) + + FAILSAFE_MSG("Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") + log_failsafe("MC has not fired within last [(5-defcon) * processing_interval] ticks, killing and restarting.") + --defcon + var/rtn = Recreate_MC() + if(rtn > 0) + defcon = 4 + master_iteration = 0 + log_failsafe("MC restarted successfully.") + FAILSAFE_MSG("Master Controller restarted successfully!") + else if(rtn < 0) + log_failsafe("Could not restart MC, runtime encountered. Entering defcon 0!") + FAILSAFE_MSG("ERROR: DEFCON [defcon_pretty()]. Unable to restart Master Controller, runtime encountered. Silently retrying.") + //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again + //no need to handle that specially when defcon 0 can handle it + if(0) //DEFCON 0! (mc failed to restart) + var/rtn = Recreate_MC() + if(rtn > 0) + defcon = 4 + master_iteration = 0 + log_failsafe("MC restarted successfully.") + FAILSAFE_MSG("Master Controller restarted successfully!") + else + defcon = min(defcon + 1,5) + master_iteration = Master.iteration + if (defcon <= 1) + sleep(processing_interval*2) + else + sleep(processing_interval) + else + defcon = 5 + sleep(initial(processing_interval)) + +/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])")) + +#undef FAILSAFE_MSG diff --git a/code/controllers/master/master.dm b/code/controllers/master/master.dm new file mode 100644 index 00000000000..025627fee50 --- /dev/null +++ b/code/controllers/master/master.dm @@ -0,0 +1,550 @@ + /** + * StonedMC + * + * Designed to properly split up a given tick among subsystems + * Note: if you read parts of this code and think "why is it doing it that way" + * Odds are, there is a reason + * + **/ +var/datum/controller/master/Master = new() +var/MC_restart_clear = 0 +var/MC_restart_timeout = 0 +var/MC_restart_count = 0 + + +//current tick limit, assigned by the queue controller before running a subsystem. +//used by check_tick as well so that the procs subsystems call can obey that SS's tick limits +var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + +/datum/controller/master + name = "Master" + + // Are we processing (higher values increase the processing delay by n ticks) + var/processing = 1 + // How many times have we ran + var/iteration = 0 + + // world.time of last fire, for tracking lag outside of the mc + var/last_run + + // List of subsystems to process(). + var/list/subsystems + + // Vars for keeping track of tick drift. + var/init_timeofday + var/init_time + var/tickdrift = 0 + + var/sleep_delta + + var/make_runtime = 0 + + var/initialization_time_taken + var/initializations_finished_with_no_players_logged_in //I wonder what this could be? + // Has round started? (So we know what subsystems to run) + var/round_started = 0 + + var/initializing = FALSE + + // The type of the last subsystem to be process()'d. + var/last_type_processed + + var/datum/controller/subsystem/queue_head //Start of queue linked list + var/datum/controller/subsystem/queue_tail //End of queue linked list (used for appending to the list) + var/queue_priority_count = 0 //Running total so that we don't have to loop thru the queue each run to split up the tick + var/queue_priority_count_bg = 0 //Same, but for background subsystems + +/datum/controller/master/New() + // Highlander-style: there can only be one! Kill off the old and replace it with the new. + subsystems = list() + if (Master != src) + if (istype(Master)) + Recover() + qdel(Master) + else + init_subtypes(/datum/controller/subsystem, subsystems) + Master = src + +/datum/controller/master/Destroy() + ..() + // Tell qdel() to Del() this object. + return QDEL_HINT_HARDDEL_NOW + +/datum/controller/master/Shutdown() + processing = FALSE + for(var/datum/controller/subsystem/ss in subsystems) + ss.Shutdown() + +// Returns 1 if we created a new mc, 0 if we couldn't due to a recent restart, +// -1 if we encountered a runtime trying to recreate it +/proc/Recreate_MC() + . = -1 //so if we runtime, things know we failed + if (world.time < MC_restart_timeout) + return 0 + if (world.time < MC_restart_clear) + MC_restart_count *= 0.5 + + var/delay = 50 * ++MC_restart_count + MC_restart_timeout = world.time + delay + MC_restart_clear = world.time + (delay * 2) + Master.processing = 0 //stop ticking this one + try + new/datum/controller/master() + catch + return -1 + return 1 + + +/datum/controller/master/Recover() + var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" + for (var/varname in Master.vars) + switch (varname) + if("name", "tag", "bestF", "type", "parent_type", "vars", "statclick") // Built-in junk. + continue + else + var/varval = Master.vars[varname] + if (istype(varval, /datum)) // Check if it has a type var. + var/datum/D = varval + msg += "\t [varname] = [D]([D.type])\n" + else + msg += "\t [varname] = [varval]\n" + log_mc(msg) + + var/datum/controller/subsystem/BadBoy = Master.last_type_processed + var/FireHim = FALSE + if(istype(BadBoy)) + msg = null + switch(++BadBoy.failure_strikes) + if(2) + msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." + FireHim = TRUE + if(3) + msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." + BadBoy.flags |= SS_NO_FIRE + if(msg) + admin_notice("[msg]", R_DEBUG | R_DEV) + log_mc(msg) + + if (istype(Master.subsystems)) + if(FireHim) + Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one + subsystems = Master.subsystems + StartProcessing(10) + else + to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") + Initialize(20, TRUE) + +// Please don't stuff random bullshit here, +// Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize() +/datum/controller/master/Initialize(delay, init_sss) + set waitfor = 0 + + if(delay) + sleep(delay) + + if(init_sss) + init_subtypes(/datum/controller/subsystem, subsystems) + + world.log << "Initializing subsystems..." + log_mc("Initializing subsystems...") + + initializing = TRUE + + // Sort subsystems by init_order, so they initialize in the correct order. + sortTim(subsystems, /proc/cmp_subsystem_init) + + var/start_timeofday = REALTIMEOFDAY + // Initialize subsystems. + CURRENT_TICKLIMIT = TICK_LIMIT_MC_INIT + for (var/datum/controller/subsystem/SS in subsystems) + if (SS.flags & SS_NO_INIT) + continue + SS.StartInitialize(REALTIMEOFDAY) + CHECK_TICK + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + var/time = (REALTIMEOFDAY - start_timeofday) / 10 + + initializing = FALSE + initialization_time_taken = time + + var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" + log_mc(msg) + admin_notice(span("danger", msg), R_DEBUG) + world.log << msg + + // Sort subsystems by display setting for easy access. + sortTim(subsystems, /proc/cmp_subsystem_display) + // Set world options. +#ifndef UNIT_TEST + world.sleep_offline = 1 +#endif + world.tick_lag = config.Ticklag + var/initialized_tod = REALTIMEOFDAY + sleep(1) + initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10 + // Loop. + Master.StartProcessing(0) + +// Notify the MC that the round has started. +/datum/controller/master/proc/RoundStart() + round_started = 1 + var/timer = world.time + for (var/datum/controller/subsystem/SS in subsystems) + if (SS.flags & SS_FIRE_IN_LOBBY || SS.flags & SS_TICKER) + continue //already firing + // Stagger subsystems. + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + +// Starts the mc, and sticks around to restart it if the loop ever ends. +/datum/controller/master/proc/StartProcessing(delay) + set waitfor = 0 + if(delay) + sleep(delay) + var/rtn = Loop() + if (rtn > 0 || processing < 0) + return //this was suppose to happen. + //loop ended, restart the mc + log_game("MC crashed or runtimed, restarting") + message_admins("MC crashed or runtimed, restarting") + var/rtn2 = Recreate_MC() + if (rtn2 <= 0) + log_game("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") + message_admins("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") + Failsafe.defcon = 2 + +// Main loop. +/datum/controller/master/proc/Loop() + . = -1 + //Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because + // local vars rock + + // Schedule the first run of the Subsystems. + round_started = world.has_round_started() + //all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed) + var/list/tickersubsystems = list() + var/list/normalsubsystems = list() + var/list/lobbysubsystems = list() + var/timer = world.time + for (var/thing in subsystems) + var/datum/controller/subsystem/SS = thing + if (SS.flags & SS_NO_FIRE) + continue + SS.queued_time = 0 + SS.queue_next = null + SS.queue_prev = null + SS.state = SS_IDLE + if (SS.flags & SS_TICKER) + tickersubsystems += SS + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + continue + if (SS.flags & SS_FIRE_IN_LOBBY) + lobbysubsystems += SS + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + else if (round_started) + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + normalsubsystems += SS + + queue_head = null + queue_tail = null + //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue + //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) + sortTim(tickersubsystems, /proc/cmp_subsystem_priority) + sortTim(normalsubsystems, /proc/cmp_subsystem_priority) + sortTim(lobbysubsystems, /proc/cmp_subsystem_priority) + + normalsubsystems += tickersubsystems + lobbysubsystems += tickersubsystems + + init_timeofday = REALTIMEOFDAY + init_time = world.time + + iteration = 1 + var/error_level = 0 + var/sleep_delta = 0 + var/list/subsystems_to_check + //the actual loop. + while (1) + tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag))) + if (processing <= 0) + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + sleep(10) + continue + + //if there are mutiple sleeping procs running before us hogging the cpu, we have to run later + // because sleeps are processed in the order received, so longer sleeps are more likely to run first + if (world.tick_usage > TICK_LIMIT_MC) + sleep_delta += 2 + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5) + sleep(world.tick_lag * (processing + sleep_delta)) + continue + + sleep_delta = MC_AVERAGE_FAST(sleep_delta, 0) + if (last_run + (world.tick_lag * processing) > world.time) + sleep_delta += 1 + if (world.tick_usage > (TICK_LIMIT_MC*0.5)) + sleep_delta += 1 + + if (make_runtime) + var/datum/controller/subsystem/SS + SS.can_fire = 0 + if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time)) + new/datum/controller/failsafe() // (re)Start the failsafe. + if (!queue_head || !(iteration % 3)) + if (round_started) + subsystems_to_check = normalsubsystems + else + subsystems_to_check = lobbysubsystems + else + subsystems_to_check = tickersubsystems + if (CheckQueue(subsystems_to_check) <= 0) + if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + log_mc("SoftReset() failed, crashing") + return + if (!error_level) + iteration++ + error_level++ + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + sleep(10) + continue + + if (queue_head) + if (RunQueue() <= 0) + if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + log_mc("SoftReset() failed, crashing") + return + if (!error_level) + iteration++ + error_level++ + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + sleep(10) + continue + error_level-- + if (!queue_head) //reset the counts if the queue is empty, in the off chance they get out of sync + queue_priority_count = 0 + queue_priority_count_bg = 0 + + iteration++ + last_run = world.time + src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc. + sleep(world.tick_lag * (processing + sleep_delta)) + + + + +// This is what decides if something should run. +/datum/controller/master/proc/CheckQueue(list/subsystemstocheck) + . = 0 //so the mc knows if we runtimed + + //we create our variables outside of the loops to save on overhead + var/datum/controller/subsystem/SS + var/SS_flags + + for (var/thing in subsystemstocheck) + if (!thing) + subsystemstocheck -= thing + SS = thing + if (SS.state != SS_IDLE) + continue + if (SS.can_fire <= 0) + continue + if (SS.suspended > 0) + continue + if (SS.next_fire > world.time) + continue + SS_flags = SS.flags + if (SS_flags & SS_NO_FIRE) + subsystemstocheck -= SS + continue + if (!(SS_flags & SS_TICKER) && (SS_flags & SS_KEEP_TIMING) && SS.last_fire + (SS.wait * 0.75) > world.time) + continue + SS.enqueue() + . = 1 + + +// Run thru the queue of subsystems to run, running them while balancing out their allocated tick precentage +/datum/controller/master/proc/RunQueue() + . = 0 + var/datum/controller/subsystem/queue_node + var/queue_node_flags + var/queue_node_priority + var/queue_node_paused + + var/current_tick_budget + var/tick_precentage + var/tick_remaining + var/ran = TRUE //this is right + var/ran_non_ticker = FALSE + var/bg_calc //have we swtiched current_tick_budget to background mode yet? + var/tick_usage + + //keep running while we have stuff to run and we haven't gone over a tick + // this is so subsystems paused eariler can use tick time that later subsystems never used + while (ran && queue_head && world.tick_usage < TICK_LIMIT_MC) + ran = FALSE + bg_calc = FALSE + current_tick_budget = queue_priority_count + queue_node = queue_head + while (queue_node) + if (ran && world.tick_usage > TICK_LIMIT_RUNNING) + break + + queue_node_flags = queue_node.flags + queue_node_priority = queue_node.queued_priority + + //super special case, subsystems where we can't make them pause mid way through + //if we can't run them this tick (without going over a tick) + //we bump up their priority and attempt to run them next tick + //(unless we haven't even ran anything this tick, since its unlikely they will ever be able run + // in those cases, so we just let them run) + if (queue_node_flags & SS_NO_TICK_CHECK) + if (queue_node.tick_usage > TICK_LIMIT_RUNNING - world.tick_usage && ran_non_ticker) + queue_node.queued_priority += queue_priority_count * 0.10 + queue_priority_count -= queue_node_priority + queue_priority_count += queue_node.queued_priority + current_tick_budget -= queue_node_priority + queue_node = queue_node.queue_next + continue + + if ((queue_node_flags & SS_BACKGROUND) && !bg_calc) + current_tick_budget = queue_priority_count_bg + bg_calc = TRUE + + tick_remaining = TICK_LIMIT_RUNNING - world.tick_usage + + if (current_tick_budget > 0 && queue_node_priority > 0) + tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority) + else + tick_precentage = tick_remaining + + CURRENT_TICKLIMIT = world.tick_usage + tick_precentage + + if (!(queue_node_flags & SS_TICKER)) + ran_non_ticker = TRUE + ran = TRUE + tick_usage = world.tick_usage + queue_node_paused = (queue_node.state == SS_PAUSED || queue_node.state == SS_PAUSING) + last_type_processed = queue_node + + queue_node.state = SS_RUNNING + + var/state = queue_node.ignite(queue_node_paused) + if (state == SS_RUNNING) + state = SS_IDLE + current_tick_budget -= queue_node_priority + tick_usage = world.tick_usage - tick_usage + + if (tick_usage < 0) + tick_usage = 0 + + queue_node.state = state + + if (state == SS_PAUSED) + queue_node.paused_ticks++ + queue_node.paused_tick_usage += tick_usage + queue_node = queue_node.queue_next + continue + + queue_node.ticks = MC_AVERAGE(queue_node.ticks, queue_node.paused_ticks) + tick_usage += queue_node.paused_tick_usage + + queue_node.tick_usage = MC_AVERAGE_FAST(queue_node.tick_usage, tick_usage) + + queue_node.cost = MC_AVERAGE_FAST(queue_node.cost, TICK_DELTA_TO_MS(tick_usage)) + queue_node.paused_ticks = 0 + queue_node.paused_tick_usage = 0 + + if (queue_node_flags & SS_BACKGROUND) //update our running total + queue_priority_count_bg -= queue_node_priority + else + queue_priority_count -= queue_node_priority + + queue_node.last_fire = world.time + queue_node.times_fired++ + + if (queue_node_flags & SS_TICKER) + queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait) + else if (queue_node_flags & SS_POST_FIRE_TIMING) + queue_node.next_fire = world.time + queue_node.wait + else if (queue_node_flags & SS_KEEP_TIMING) + queue_node.next_fire += queue_node.wait + else + queue_node.next_fire = queue_node.queued_time + queue_node.wait + + queue_node.queued_time = 0 + + //remove from queue + queue_node.dequeue() + + queue_node = queue_node.queue_next + + . = 1 + +//resets the queue, and all subsystems, while filtering out the subsystem lists +// called if any mc's queue procs runtime or exit improperly. +/datum/controller/master/proc/SoftReset(list/ticker_SS, list/normal_SS, list/lobby_SS) + . = 0 + log_mc("SoftReset called, resetting MC queue state.") + if (!istype(subsystems) || !istype(ticker_SS) || !istype(normal_SS) || !istype(lobby_SS)) + log_mc("SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[normal_SS]' '[lobby_SS]' Crashing!") + return + var/subsystemstocheck = subsystems + ticker_SS + normal_SS + lobby_SS + + for (var/thing in subsystemstocheck) + var/datum/controller/subsystem/SS = thing + if (!SS || !istype(SS)) + //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents + subsystems -= list(SS) + ticker_SS -= list(SS) + normal_SS -= list(SS) + lobby_SS -= list(SS) + log_mc("SoftReset: Found bad entry in subsystem list, '[SS]'") + continue + if (SS.queue_next && !istype(SS.queue_next)) + log_mc("SoftReset: Found bad data in subsystem queue, queue_next = '[SS.queue_next]'") + SS.queue_next = null + if (SS.queue_prev && !istype(SS.queue_prev)) + log_mc("SoftReset: Found bad data in subsystem queue, queue_prev = '[SS.queue_prev]'") + SS.queue_prev = null + SS.queued_priority = 0 + SS.queued_time = 0 + SS.state = SS_IDLE + if (queue_head && !istype(queue_head)) + log_mc("SoftReset: Found bad data in subsystem queue, queue_head = '[queue_head]'") + queue_head = null + if (queue_tail && !istype(queue_tail)) + log_mc("SoftReset: Found bad data in subsystem queue, queue_tail = '[queue_tail]'") + queue_tail = null + queue_priority_count = 0 + queue_priority_count_bg = 0 + log_mc("SoftReset: Finished.") + . = 1 + + + +/datum/controller/master/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) + + stat("Byond:", "(TickLag:[world.tick_lag]|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)]%))") + stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration]) (SleepDelta:[round(sleep_delta, 0.1)])")) + + +/datum/controller/master/ExplosionStart() + for (var/thing in subsystems) + var/datum/controller/subsystem/SS = thing + SS.ExplosionStart() + +/datum/controller/master/ExplosionEnd() + for (var/thing in subsystems) + var/datum/controller/subsystem/SS = thing + SS.ExplosionEnd() + +/world/proc/has_round_started() + if (SSticker.current_state >= GAME_STATE_PLAYING) + return TRUE + return FALSE diff --git a/code/controllers/master/subsystem.dm b/code/controllers/master/subsystem.dm new file mode 100644 index 00000000000..c327db5cec3 --- /dev/null +++ b/code/controllers/master/subsystem.dm @@ -0,0 +1,276 @@ + + +/datum/controller/subsystem + // Metadata; you should define these. + name = "fire coderbus" //name of the subsystem + var/init_order = SS_INIT_MISC //order of initialization. Higher numbers are initialized first, lower numbers later. Can be decimal and negative values. + var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. + var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep + + var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) + + //set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later + // use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to the list + var/can_fire = TRUE + // Similar to can_fire, but intended explicitly for subsystems that are asleep. Using this var instead of can_fire + // allows admins to disable subsystems without them re-enabling themselves. + var/suspended = FALSE + + // Bookkeeping variables; probably shouldn't mess with these. + var/last_fire = 0 //last world.time we called fire() + var/next_fire = 0 //scheduled world.time for next fire() + var/cost = 0 //average time to execute + var/tick_usage = 0 //average tick usage + var/state = SS_IDLE //tracks the current state of the ss, running, paused, etc. + var/paused_ticks = 0 //ticks this ss is taking to run right now. + var/paused_tick_usage //total tick_usage of all of our runs while pausing this run + var/ticks = 1 //how many ticks does this ss take to run on avg. + var/times_fired = 0 //number of times we have called fire() + var/queued_time = 0 //time we entered the queue, (for timing and priority reasons) + var/queued_priority //we keep a running total to make the math easier, if priority changes mid-fire that would break our running total, so we store it here + + // Subsystem startup accounting. + var/init_state = FALSE + var/init_time = 0 + var/init_start = 0 + var/init_finish + + //linked list stuff for the queue + var/datum/controller/subsystem/queue_next + var/datum/controller/subsystem/queue_prev + + var/static/failure_strikes = 0 //How many times we suspect this subsystem has crashed the MC, 3 strikes and you're out! + +// Used to initialize the subsystem BEFORE the map has loaded +/datum/controller/subsystem/New() + +//This is used so the mc knows when the subsystem sleeps. do not override. +/datum/controller/subsystem/proc/ignite(resumed = 0) + set waitfor = 0 + . = SS_SLEEPING + fire(resumed) + . = state + if (state == SS_SLEEPING) + state = SS_IDLE + if (state == SS_PAUSING) + var/QT = queued_time + enqueue() + state = SS_PAUSED + queued_time = QT + +//previously, this would have been named 'process()' but that name is used everywhere for different things! +//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds. +//Sleeping in here prevents future fires until returned. +/datum/controller/subsystem/proc/fire(resumed = 0) + flags |= SS_NO_FIRE + throw EXCEPTION("Subsystem [src]([type]) does not fire() but did not set the SS_NO_FIRE flag. Please add the SS_NO_FIRE flag to any subsystem that doesn't fire so it doesn't get added to the processing list and waste cpu.") + +/datum/controller/subsystem/Destroy() + dequeue() + can_fire = 0 + flags |= SS_NO_FIRE + Master.subsystems -= src + + return QDEL_HINT_HARDDEL_NOW + +//Queue it to run. +// (we loop thru a linked list until we get to the end or find the right point) +// (this lets us sort our run order correctly without having to re-sort the entire already sorted list) +/datum/controller/subsystem/proc/enqueue() + var/SS_priority = priority + var/SS_flags = flags + var/datum/controller/subsystem/queue_node + var/queue_node_priority + var/queue_node_flags + + for (queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next) + queue_node_priority = queue_node.queued_priority + queue_node_flags = queue_node.flags + + if (queue_node_flags & SS_TICKER) + if (!(SS_flags & SS_TICKER)) + continue + if (queue_node_priority < SS_priority) + break + + else if (queue_node_flags & SS_BACKGROUND) + if (!(SS_flags & SS_BACKGROUND)) + break + if (queue_node_priority < SS_priority) + break + + else + if (SS_flags & SS_BACKGROUND) + continue + if (SS_flags & SS_TICKER) + break + if (queue_node_priority < SS_priority) + break + + queued_time = world.time + queued_priority = SS_priority + state = SS_QUEUED + if (SS_flags & SS_BACKGROUND) //update our running total + Master.queue_priority_count_bg += SS_priority + else + Master.queue_priority_count += SS_priority + + queue_next = queue_node + if (!queue_node)//we stopped at the end, add to tail + queue_prev = Master.queue_tail + if (Master.queue_tail) + Master.queue_tail.queue_next = src + else //empty queue, we also need to set the head + Master.queue_head = src + Master.queue_tail = src + + else if (queue_node == Master.queue_head)//insert at start of list + Master.queue_head.queue_prev = src + Master.queue_head = src + queue_prev = null + else + queue_node.queue_prev.queue_next = src + queue_prev = queue_node.queue_prev + queue_node.queue_prev = src + + +/datum/controller/subsystem/proc/dequeue() + if (queue_next) + queue_next.queue_prev = queue_prev + if (queue_prev) + queue_prev.queue_next = queue_next + if (src == Master.queue_tail) + Master.queue_tail = queue_prev + if (src == Master.queue_head) + Master.queue_head = queue_next + queued_time = 0 + if (state == SS_QUEUED) + state = SS_IDLE + + +/datum/controller/subsystem/proc/pause() + . = 1 + if (state == SS_RUNNING) + state = SS_PAUSED + else if (state == SS_SLEEPING) + state = SS_PAUSING + +// Do not override - Wrapper for Initialize() so initialization status can be shown for subsystems that do not return parent. +/datum/controller/subsystem/proc/StartInitialize(timeofday) + init_state = SS_INITSTATE_STARTED + init_start = timeofday + . = Initialize(timeofday) + init_finish = REALTIMEOFDAY + if (!init_time) + init_time = (init_finish - init_start) / 10 + init_state = SS_INITSTATE_DONE + +//used to initialize the subsystem AFTER the map has loaded +/datum/controller/subsystem/Initialize(start_timeofday, silent = FALSE) + var/time = (REALTIMEOFDAY - start_timeofday) / 10 + init_time = time + var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!" + if (!silent) + admin_notice(span("danger", msg), R_DEBUG) + world.log << "SS Init: [msg]" + log_ss_init(msg) + return time + +//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. +/datum/controller/subsystem/stat_entry(msg) + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) + + var/title = name + if (Master.initializing) + msg = "[stat_entry_init()]\t[msg]" + var/letter = init_state_letter() + if (letter) + title = "\[[letter]] [title]" + else + msg = "[stat_entry_run()]\t[msg]" + if (can_fire && !suspended && !(flags & SS_NO_FIRE)) + title = "\[[state_letter()]] [title]" + + stat(title, statclick.update(msg)) + +// Generates the message shown before a subsystem during MC initialization. +/datum/controller/subsystem/proc/stat_entry_init() + if (init_state == SS_INITSTATE_DONE) + . = "DONE ([init_time]s)" + else if (flags & SS_NO_INIT) + . = "NO INIT" + else if (init_state == SS_INITSTATE_STARTED) + if (init_start) + . = "LOAD ([(REALTIMEOFDAY - init_start)/10]s)" + else + . = "LOAD" + else + . = "WAIT" + +// Generates the message shown before a subsystem during normal MC operation. +/datum/controller/subsystem/proc/stat_entry_run() + if (flags & SS_NO_FIRE) + . = "NO FIRE" + else if (can_fire && !suspended) + . = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]" + else if (!can_fire) + . = "OFFLINE" + else + . = "SUSPEND" + +/datum/controller/subsystem/proc/init_state_letter() + if (flags & SS_NO_INIT) + return + switch (init_state) + if (SS_INITSTATE_NONE) + . = "W" + if (SS_INITSTATE_STARTED) + . = "L" + if (SS_INITSTATE_DONE) + . = "D" + +/datum/controller/subsystem/proc/state_letter() + switch (state) + if (SS_RUNNING) + . = "R" + if (SS_QUEUED) + . = "Q" + if (SS_PAUSED, SS_PAUSING) + . = "P" + if (SS_SLEEPING) + . = "S" + if (SS_IDLE) + . = " " + +//could be used to postpone a costly subsystem for (default one) var/cycles, cycles +//for instance, during cpu intensive operations like explosions +/datum/controller/subsystem/proc/postpone(cycles = 1) + if(next_fire - world.time < wait) + next_fire += (wait*cycles) + +//usually called via datum/controller/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) +//should attempt to salvage what it can from the old instance of subsystem +/datum/controller/subsystem/Recover() + +// Admin-disables this subsystem. Will show as OFFLINE in MC panel. +/datum/controller/subsystem/proc/disable() + can_fire = FALSE + +// Admin-enables this subsystem. +/datum/controller/subsystem/proc/enable() + if (!can_fire) + next_fire = world.time + wait + can_fire = TRUE + +// Suspends this subsystem. Functionally identical to disable(), but shows SUSPEND in MC panel. +// Preferred over disable() for self-disabling subsystems. +/datum/controller/subsystem/proc/suspend() + suspended = TRUE + +// Wakes a suspended subsystem. +/datum/controller/subsystem/proc/wake() + if (suspended) + suspended = FALSE + if (can_fire) + next_fire = world.time + wait diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm deleted file mode 100644 index 2a16ab94e76..00000000000 --- a/code/controllers/master_controller.dm +++ /dev/null @@ -1,101 +0,0 @@ -//simplified MC that is designed to fail when procs 'break'. When it fails it's just replaced with a new one. -//It ensures master_controller.process() is never doubled up by killing the MC (hence terminating any of its sleeping procs) -//WIP, needs lots of work still - -var/global/datum/controller/game_controller/master_controller //Set in world.New() - -var/global/controller_iteration = 0 -var/global/last_tick_duration = 0 - -var/global/air_processing_killed = 0 -var/global/pipe_processing_killed = 0 - -datum/controller/game_controller - var/list/shuttle_list // For debugging and VV - -datum/controller/game_controller/New() - //There can be only one master_controller. Out with the old and in with the new. - if(master_controller != src) - log_debug("Rebuilding Master Controller") - if(istype(master_controller)) - qdel(master_controller) - master_controller = src - - if(!job_master) - job_master = new /datum/controller/occupations() - job_master.SetupOccupations() - job_master.LoadJobs("config/jobs.txt") - admin_notice("Job setup complete", R_DEBUG) - - if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase() - if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() - -datum/controller/game_controller/proc/setup() - world.tick_lag = config.Ticklag - - spawn(20) - createRandomZlevel() - - setup_objects() - setupgenetics() - SetupXenoarch() - - transfer_controller = new - - -datum/controller/game_controller/proc/setup_objects() - admin_notice("Initializing objects", R_DEBUG) - sleep(-1) - objects_initialized = 1 - for(var/A in objects_init_list) - var/atom/movable/object = A - if(isnull(object.gcDestroyed)) - object.initialize() - - objects_init_list.Cut() - - admin_notice("Initializing areas", R_DEBUG) - sleep(-1) - for(var/A in all_areas) - var/area/area = A - area.initialize() - - admin_notice("Initializing pipe networks", R_DEBUG) - sleep(-1) - for(var/obj/machinery/atmospherics/machine in machines) - machine.build_network() - - admin_notice("Initializing atmos machinery.", R_DEBUG) - sleep(-1) - for(var/obj/machinery/atmospherics/unary/U in machines) - if(istype(U, /obj/machinery/atmospherics/unary/vent_pump)) - var/obj/machinery/atmospherics/unary/vent_pump/T = U - T.broadcast_status() - else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber)) - var/obj/machinery/atmospherics/unary/vent_scrubber/T = U - T.broadcast_status() - - - admin_notice(span("danger", "Caching space parallax.")) - create_global_parallax_icons() - admin_notice(span("danger", "Done.")) - - admin_notice(span("danger", "Setting up lighting.")) - initialize_lighting() - admin_notice(span("danger", "Lighting Setup Completed.")) - - //Spawn the contents of the cargo warehouse - sleep(-1) - spawn_cargo_stock() - - // Set up antagonists. - populate_antag_type_list() - - //Set up spawn points. - populate_spawn_points() - - // Setup laws. - global.corp_regs = new - - admin_notice("Initializations complete.", R_DEBUG) - sleep(-1) diff --git a/code/controllers/subsystems.dm b/code/controllers/subsystems.dm deleted file mode 100644 index 11025d8d535..00000000000 --- a/code/controllers/subsystems.dm +++ /dev/null @@ -1,46 +0,0 @@ -#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;} - -/datum/subsystem - //things you will want to define - var/name //name of the subsystem - var/priority = 0 //priority affects order of initialization. Higher priorities are initialized first, lower priorities later. Can be decimal and negative values. - var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. - - //things you will probably want to leave alone - var/can_fire = 0 //prevent fire() calls - var/last_fire = 0 //last world.time we called fire() - var/next_fire = 0 //scheduled world.time for next fire() - var/cpu = 0 //cpu-usage stats (somewhat vague) - var/cost = 0 //average time to execute - var/times_fired = 0 //number of times we have called fire() - -//used to initialize the subsystem BEFORE the map has loaded -/datum/subsystem/New() - -//previously, this would have been named 'process()' but that name is used everywhere for different things! -//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds. -//fire(), and the procs it calls, SHOULD NOT HAVE ANY SLEEP OPERATIONS in them! -//YE BE WARNED! -/datum/subsystem/proc/fire() - can_fire = 0 - -//used to initialize the subsystem AFTER the map has loaded -/datum/subsystem/proc/Initialize(start_timeofday) - var/time = (world.timeofday - start_timeofday) / 10 - var/msg = "Initialized [name] SubSystem within [time] seconds" - world << "[msg]" - world.log << msg - -//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. -/datum/subsystem/proc/stat_entry() - stat(name, "[round(cost,0.001)]ds\t(CPU:[round(cpu,1)]%)") - -//could be used to postpone a costly subsystem for one cycle -//for instance, during cpu intensive operations like explosions -/datum/subsystem/proc/postpone() - if(next_fire - world.time < wait) - next_fire += wait - -//usually called via datum/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) -//should attempt to salvage what it can from the old instance of subsystem -/datum/subsystem/proc/Recover() diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm new file mode 100644 index 00000000000..c86c07ebb96 --- /dev/null +++ b/code/controllers/subsystems/air.dm @@ -0,0 +1,436 @@ +/var/datum/controller/subsystem/air/SSair + +/* + +Overview: + The air controller does everything. There are tons of procs in here. + +Class Vars: + zones - All zones currently holding one or more turfs. + edges - All processing edges. + + tiles_to_update - Tiles scheduled to update next tick. + zones_to_update - Zones which have had their air changed and need air archival. + active_hotspots - All processing fire objects. + + active_zones - The number of zones which were archived last tick. Used in debug verbs. + next_id - The next UID to be applied to a zone. Mostly useful for debugging purposes as zones do not need UIDs to function. + +Class Procs: + + mark_for_update(turf/T) + Adds the turf to the update list. When updated, update_air_properties() will be called. + When stuff changes that might affect airflow, call this. It's basically the only thing you need. + + add_zone(zone/Z) and remove_zone(zone/Z) + Adds zones to the zones list. Does not mark them for update. + + air_blocked(turf/A, turf/B) + Returns a bitflag consisting of: + AIR_BLOCKED - The connection between turfs is physically blocked. No air can pass. + ZONE_BLOCKED - There is a door between the turfs, so zones cannot cross. Air may or may not be permeable. + + has_valid_zone(turf/T) + Checks the presence and validity of T's zone. + May be called on unsimulated turfs, returning 0. + + merge(zone/A, zone/B) + Called when zones have a direct connection and equivalent pressure and temperature. + Merges the zones to create a single zone. + + connect(turf/simulated/A, turf/B) + Called by turf/update_air_properties(). The first argument must be simulated. + Creates a connection between A and B. + + mark_zone_update(zone/Z) + Adds zone to the update list. Unlike mark_for_update(), this one is called automatically whenever + air is returned from a simulated turf. + + equivalent_pressure(zone/A, zone/B) + Currently identical to A.air.compare(B.air). Returns 1 when directly connected zones are ready to be merged. + + get_edge(zone/A, zone/B) + get_edge(zone/A, turf/B) + Gets a valid connection_edge between A and B, creating a new one if necessary. + + has_same_air(turf/A, turf/B) + Used to determine if an unsimulated edge represents a specific turf. + Simulated edges use connection_edge/contains_zone() for the same purpose. + Returns 1 if A has identical gases and temperature to B. + + remove_edge(connection_edge/edge) + Called when an edge is erased. Removes it from processing. + +*/ + +/datum/controller/subsystem/air + name = "Air" + priority = SS_PRIORITY_AIR + init_order = SS_INIT_AIR + + //Geometry lists + var/list/zones = list() + var/list/edges = list() + + //Geometry updates lists + var/list/tiles_to_update = list() + var/list/zones_to_update = list() + var/list/active_fire_zones = list() + var/list/active_hotspots = list() + var/list/active_edges = list() + + var/tmp/list/deferred = list() + var/tmp/list/processing_edges + var/tmp/list/processing_fires + var/tmp/list/processing_hotspots + var/tmp/list/processing_zones + + var/active_zones = 0 + var/next_id = 1 + +/datum/controller/subsystem/air/proc/reboot() + set waitfor = FALSE + + // Stop processing while we rebuild. + can_fire = FALSE + + // Make sure we don't rebuild mid-tick. + if (state != SS_IDLE) + admin_notice(span("danger", "ZAS Rebuild initiated. Waiting for current air tick to complete before continuing."), R_DEBUG) + UNTIL(state == SS_IDLE) + + while (zones.len) + var/zone/zone = zones[zones.len] + zones.len-- + + zone.c_invalidate() + + edges.Cut() + tiles_to_update.Cut() + zones_to_update.Cut() + active_fire_zones.Cut() + active_hotspots.Cut() + active_edges.Cut() + + // Re-run setup without air settling. + Initialize(REALTIMEOFDAY, simulate = FALSE) + + // Update next_fire so the MC doesn't try to make up for missed ticks. + next_fire = world.time + wait + can_fire = TRUE + +/datum/controller/subsystem/air/stat_entry() + ..("TtU:[tiles_to_update.len] ZtU:[zones_to_update.len] AFZ:[active_fire_zones.len] AH:[active_hotspots.len] AE:[active_edges.len]") + +/datum/controller/subsystem/air/New() + NEW_SS_GLOBAL(SSair) + +/datum/controller/subsystem/air/Initialize(timeofday, simulate = TRUE) + + var/starttime = REALTIMEOFDAY + admin_notice(span("danger", "Processing Geometry..."), R_DEBUG) + + var/simulated_turf_count = 0 + for(var/turf/simulated/S in world) + simulated_turf_count++ + S.update_air_properties() + + CHECK_TICK + + admin_notice({" +Total Simulated Turfs: [simulated_turf_count] +Total Zones: [zones.len] +Total Edges: [edges.len] +Total Active Edges: [active_edges.len ? "[active_edges.len]" : "None"] +Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count] +"}, R_DEBUG) + + admin_notice(span("danger", "Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"), R_DEBUG) + + if (simulate) + admin_notice(span("danger", "Settling air..."), R_DEBUG) + + starttime = REALTIMEOFDAY + fire(FALSE, TRUE) + + admin_notice(span("danger", "Air settling completed in [(REALTIMEOFDAY - starttime)/10] seconds!"), R_DEBUG) + + ..() + +/datum/controller/subsystem/air/fire(resumed = FALSE, no_mc_tick = FALSE) + if (!resumed) + processing_edges = active_edges.Copy() + processing_fires = active_fire_zones.Copy() + processing_hotspots = active_hotspots.Copy() + + var/list/curr_tiles = tiles_to_update + var/list/curr_defer = deferred + var/list/curr_edges = processing_edges + var/list/curr_fire = processing_fires + var/list/curr_hotspot = processing_hotspots + var/list/curr_zones = zones_to_update + + while (curr_tiles.len) + var/turf/T = curr_tiles[curr_tiles.len] + curr_tiles.len-- + + if (QDELETED(T)) + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + + continue + + //check if the turf is self-zone-blocked + if(T.c_airblock(T) & ZONE_BLOCKED) + deferred += T + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + continue + + T.update_air_properties() + T.post_update_air_properties() + T.needs_air_update = 0 + #ifdef ZASDBG + T.overlays -= mark + updated++ + #endif + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + + while (curr_defer.len) + var/turf/T = curr_defer[curr_defer.len] + curr_defer.len-- + + T.update_air_properties() + T.post_update_air_properties() + T.needs_air_update = 0 + #ifdef ZASDBG + T.overlays -= mark + updated++ + #endif + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + + while (curr_edges.len) + var/connection_edge/edge = curr_edges[curr_edges.len] + curr_edges.len-- + + if (!edge) + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + continue + + edge.tick() + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + + while (curr_fire.len) + var/zone/Z = curr_fire[curr_fire.len] + curr_fire.len-- + + Z.process_fire() + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + + while (curr_hotspot.len) + var/obj/fire/F = curr_hotspot[curr_hotspot.len] + curr_hotspot.len-- + + F.process() + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + + while (curr_zones.len) + var/zone/Z = curr_zones[curr_zones.len] + curr_zones.len-- + + Z.tick() + Z.needs_update = FALSE + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/add_zone(zone/z) + zones += z + z.name = "Zone [next_id++]" + mark_zone_update(z) + +/datum/controller/subsystem/air/proc/remove_zone(zone/z) + zones -= z + zones_to_update -= z + if (processing_zones) + processing_zones -= z + +/datum/controller/subsystem/air/proc/air_blocked(turf/A, turf/B) + #ifdef ZASDBG + ASSERT(isturf(A)) + ASSERT(isturf(B)) + #endif + var/ablock = A.c_airblock(B) + if(ablock == BLOCKED) return BLOCKED + return ablock | B.c_airblock(A) + +/datum/controller/subsystem/air/proc/has_valid_zone(turf/simulated/T) + #ifdef ZASDBG + ASSERT(istype(T)) + #endif + return istype(T) && T.zone && !T.zone.invalid + +/datum/controller/subsystem/air/proc/merge(zone/A, zone/B) + #ifdef ZASDBG + ASSERT(istype(A)) + ASSERT(istype(B)) + ASSERT(!A.invalid) + ASSERT(!B.invalid) + ASSERT(A != B) + #endif + if(A.contents.len < B.contents.len) + A.c_merge(B) + mark_zone_update(B) + else + B.c_merge(A) + mark_zone_update(A) + +/datum/controller/subsystem/air/proc/connect(turf/simulated/A, turf/simulated/B) + #ifdef ZASDBG + ASSERT(istype(A)) + ASSERT(isturf(B)) + ASSERT(A.zone) + ASSERT(!A.zone.invalid) + //ASSERT(B.zone) + ASSERT(A != B) + #endif + + var/block = air_blocked(A,B) + if(block & AIR_BLOCKED) return + + var/direct = !(block & ZONE_BLOCKED) + var/space = !istype(B) + + if(!space) + if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0))) + merge(A.zone,B.zone) + return + + var + a_to_b = get_dir(A,B) + b_to_a = get_dir(B,A) + + if(!A.connections) A.connections = new + if(!B.connections) B.connections = new + + if(A.connections.get(a_to_b)) + return + if(B.connections.get(b_to_a)) + return + if(!space) + if(A.zone == B.zone) return + + + var/connection/c = new /connection(A,B) + + A.connections.place(c, a_to_b) + B.connections.place(c, b_to_a) + + if(direct) c.mark_direct() + +/datum/controller/subsystem/air/proc/mark_for_update(turf/T) + #ifdef ZASDBG + ASSERT(isturf(T)) + #endif + if(T.needs_air_update) + return + tiles_to_update += T + #ifdef ZASDBG + T.overlays += mark + #endif + T.needs_air_update = 1 + +/datum/controller/subsystem/air/proc/mark_zone_update(zone/Z) + #ifdef ZASDBG + ASSERT(istype(Z)) + #endif + if(Z.needs_update) + return + zones_to_update += Z + Z.needs_update = 1 + +/datum/controller/subsystem/air/proc/mark_edge_sleeping(connection_edge/E) + #ifdef ZASDBG + ASSERT(istype(E)) + #endif + if(E.sleeping) + return + active_edges -= E + E.sleeping = 1 + +/datum/controller/subsystem/air/proc/mark_edge_active(connection_edge/E) + #ifdef ZASDBG + ASSERT(istype(E)) + #endif + if(!E.sleeping) + return + active_edges += E + E.sleeping = 0 + +/datum/controller/subsystem/air/proc/equivalent_pressure(zone/A, zone/B) + return A.air.compare(B.air) + +/datum/controller/subsystem/air/proc/get_edge(zone/A, zone/B) + if(istype(B)) + for(var/connection_edge/zone/edge in A.edges) + if(edge.contains_zone(B)) + return edge + var/connection_edge/edge = new/connection_edge/zone(A,B) + edges += edge + edge.recheck() + return edge + else + for(var/connection_edge/unsimulated/edge in A.edges) + if(has_same_air(edge.B,B)) + return edge + var/connection_edge/edge = new/connection_edge/unsimulated(A,B) + edges += edge + edge.recheck() + return edge + +/datum/controller/subsystem/air/proc/has_same_air(turf/A, turf/B) + if(A.oxygen != B.oxygen) + return 0 + if(A.nitrogen != B.nitrogen) + return 0 + if(A.phoron != B.phoron) + return 0 + if(A.carbon_dioxide != B.carbon_dioxide) + return 0 + if(A.temperature != B.temperature) + return 0 + return 1 + +/datum/controller/subsystem/air/proc/remove_edge(connection_edge/E) + edges -= E + if(!E.sleeping) + active_edges -= E diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm new file mode 100644 index 00000000000..a8664191db9 --- /dev/null +++ b/code/controllers/subsystems/alarm.dm @@ -0,0 +1,47 @@ +var/datum/controller/subsystem/alarm/SSalarm + +/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new() +/var/global/datum/alarm_handler/camera/camera_alarm = new() +/var/global/datum/alarm_handler/fire/fire_alarm = new() +/var/global/datum/alarm_handler/motion/motion_alarm = new() +/var/global/datum/alarm_handler/power/power_alarm = new() + +/datum/controller/subsystem/alarm + name = "Alarms" + priority = SS_PRIORITY_ALARMS + + var/list/datum/alarm/all_handlers + var/tmp/list/current = list() + + var/tmp/list/active_alarm_cache = list() + +/datum/controller/subsystem/alarm/New() + NEW_SS_GLOBAL(SSalarm) + +/datum/controller/subsystem/alarm/Initialize(timeofday) + all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) + +/datum/controller/subsystem/alarm/fire(resumed = FALSE) + if (!resumed) + current = all_handlers.Copy() + active_alarm_cache.Cut() + + while (current.len) + var/datum/alarm_handler/AH = current[current.len] + current.len-- + + AH.process() + + active_alarm_cache += AH.alarms + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/alarm/proc/active_alarms() + return active_alarm_cache.Copy() + +/datum/controller/subsystem/alarm/proc/number_of_active_alarms() + return active_alarm_cache.len + +/datum/controller/subsystem/alarm/stat_entry() + ..("A:[active_alarm_cache.len]") diff --git a/code/controllers/subsystems/arrivals.dm b/code/controllers/subsystems/arrivals.dm new file mode 100644 index 00000000000..9da5846178e --- /dev/null +++ b/code/controllers/subsystems/arrivals.dm @@ -0,0 +1,78 @@ +/var/datum/controller/subsystem/arrivals/SSarrivals + +/datum/controller/subsystem/arrivals + name = "Arrivals" + flags = SS_NO_INIT | SS_BACKGROUND + priority = SS_PRIORITY_ARRIVALS + + var/datum/shuttle/ferry/arrival/shuttle + + var/launch_time //the time at which the shuttle will be launched + var/wait_for_launch = 0 //if the shuttle is waiting to launch + +/datum/controller/subsystem/arrivals/New() + NEW_SS_GLOBAL(SSarrivals) + +/datum/controller/subsystem/arrivals/fire() + post_signal("arrivals") + if (wait_for_launch) + // Timing. + if (world.time >= launch_time) //time to launch the shuttle + stop_launch_countdown() + shuttle.launch(src) + else + // Sleep, we ain't doin' shit. on_hotzone_enter() will wake us. + suspend() + +// Called when a living mob enters the shuttle area. +/datum/controller/subsystem/arrivals/proc/on_hotzone_enter() + if (!shuttle.location) + return + + wake() // Wake the process. + + if (!wait_for_launch && shuttle.location == 1 && shuttle.moving_status == SHUTTLE_IDLE) + set_launch_countdown(30) + +//called when the shuttle has arrived. + +/datum/controller/subsystem/arrivals/proc/shuttle_arrived() + if (!shuttle.location) //at station + set_launch_countdown(30) //get ready to return + +/datum/controller/subsystem/arrivals/proc/forbidden_atoms_check(atom/A) + if(istype(A,/mob/living)) + return 1 + if(istype(A,/obj/item/weapon/disk/nuclear)) + return 1 + if(istype(A,/obj/machinery/nuclearbomb)) + return 1 + if(istype(A,/obj/item/device/radio/beacon)) + return 1 + + for(var/i=1, i<=A.contents.len, i++) + var/atom/B = A.contents[i] + if(.(B)) + return 1 + +//begins the launch countdown and sets the amount of time left until launch +/datum/controller/subsystem/arrivals/proc/set_launch_countdown(var/seconds) + wait_for_launch = 1 + launch_time = world.time + seconds*10 + wake() + +/datum/controller/subsystem/arrivals/proc/stop_launch_countdown() + wait_for_launch = 0 + +/datum/controller/subsystem/arrivals/proc/post_signal(var/command) + + var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) + + if(!frequency) return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = 1 + status_signal.data["command"] = command + + frequency.post_signal(src, status_signal, RADIO_ARRIVALS) diff --git a/code/controllers/subsystems/assets.dm b/code/controllers/subsystems/assets.dm new file mode 100644 index 00000000000..06673355a66 --- /dev/null +++ b/code/controllers/subsystems/assets.dm @@ -0,0 +1,20 @@ + +/var/datum/controller/subsystem/assets/SSassets + +/datum/controller/subsystem/assets + name = "Assets" + init_order = SS_INIT_MISC_FIRST + flags = SS_NO_FIRE + var/list/cache = list() + +/datum/controller/subsystem/assets/New() + NEW_SS_GLOBAL(SSassets) + +/datum/controller/subsystem/assets/Initialize(timeofday) + for(var/type in typesof(/datum/asset) - list(/datum/asset, /datum/asset/simple)) + var/datum/asset/A = new type() + A.register() + + for(var/client/C in global.clients) + addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, cache, FALSE), 10) + ..() diff --git a/code/controllers/subsystems/chemistry.dm b/code/controllers/subsystems/chemistry.dm new file mode 100644 index 00000000000..f0a6b07eabd --- /dev/null +++ b/code/controllers/subsystems/chemistry.dm @@ -0,0 +1,55 @@ +var/datum/controller/subsystem/chemistry/SSchemistry + +/datum/controller/subsystem/chemistry + name = "Chemistry" + flags = SS_NO_INIT + priority = SS_PRIORITY_CHEMISTRY + + var/list/active_holders + var/list/chemical_reactions + var/list/chemical_reagents + + var/tmp/list/processing_holders = list() + +/datum/controller/subsystem/chemistry/stat_entry() + ..("AH:[active_holders.len]") + +/datum/controller/subsystem/chemistry/New() + NEW_SS_GLOBAL(SSchemistry) + active_holders = list() + chemical_reactions = chemical_reactions_list + chemical_reagents = chemical_reagents_list + +/datum/controller/subsystem/chemistry/fire(resumed = FALSE) + if (!resumed) + processing_holders = active_holders.Copy() + + while (processing_holders.len) + var/datum/reagents/holder = processing_holders[processing_holders.len] + processing_holders.len-- + + if (QDELETED(holder)) + active_holders -= holder + log_debug("SSchemistry: QDELETED holder found in processing list!") + if (MC_TICK_CHECK) + return + continue + + if (!holder.process_reactions()) + active_holders -= holder + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/chemistry/proc/mark_for_update(var/datum/reagents/holder) + if (holder in active_holders) + return + + //Process once, right away. If we still need to continue then add to the active_holders list and continue later + if (holder.process_reactions()) + active_holders += holder + +/datum/controller/subsystem/chemistry/Recover() + src.active_holders = SSchemistry.active_holders + src.chemical_reactions = SSchemistry.chemical_reactions + src.chemical_reagents = SSchemistry.chemical_reagents diff --git a/code/controllers/subsystems/effects.dm b/code/controllers/subsystems/effects.dm new file mode 100644 index 00000000000..8dc6b253225 --- /dev/null +++ b/code/controllers/subsystems/effects.dm @@ -0,0 +1,83 @@ +var/datum/controller/subsystem/effects/SSeffects + +/datum/controller/subsystem/effects + name = "Effects Master" + wait = 2 // Deciseconds. + flags = SS_BACKGROUND | SS_NO_INIT + priority = SS_PRIORITY_EFFECTS + + var/list/datum/effect_system/effect_systems = list() // The effect-spawning objects. Shouldn't be many of these. + var/list/obj/visual_effect/visuals = list() // The visible component of an effect. May be created without an effect object. + + var/tmp/list/processing_effects = list() + var/tmp/list/processing_visuals = list() + +/datum/controller/subsystem/effects/New() + NEW_SS_GLOBAL(SSeffects) + +/datum/controller/subsystem/effects/fire(resumed = FALSE) + if (!resumed) + processing_effects = effect_systems + effect_systems = list() + processing_visuals = visuals.Copy() + + var/list/current_effects = processing_effects + var/list/current_visuals = processing_visuals + + // Most of the time these only exist for 1 cycle, so optimize for removal-on-first-fire. + while (current_effects.len) + var/datum/effect_system/E = current_effects[current_effects.len] + current_effects.len-- + + if (QDELETED(E) || !E.isprocessing) + if (MC_TICK_CHECK) + return + continue + + STOP_EFFECT(E) + E.last_fire = world.time + switch (E.process(world.time - E.last_fire)) + if (EFFECT_CONTINUE) + QUEUE_EFFECT(E) + + if (EFFECT_DESTROY) + qdel(E) + + if (MC_TICK_CHECK) + return + + // Most often these will be continuing to tick, so assume that we're going to keep poking the effect. + while (current_visuals.len) + var/obj/visual_effect/V = current_visuals[current_visuals.len] + current_visuals.len-- + + if (QDELETED(V) || !V.isprocessing) + visuals -= V + if (MC_TICK_CHECK) + return + continue + + switch (V.tick()) + if (EFFECT_HALT) + STOP_VISUAL(V) + + if (EFFECT_DESTROY) + STOP_VISUAL(V) + qdel(V) + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/effects/stat_entry() + ..("E:[effect_systems.len] V:[visuals.len]") + +/datum/controller/subsystem/effects/Recover() + if (istype(SSeffects)) + src.effect_systems = SSeffects.effect_systems + src.visuals = SSeffects.visuals + + src.effect_systems |= SSeffects.processing_effects + src.visuals |= SSeffects.processing_visuals + +/datum/effect_system + var/last_fire diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/subsystems/emergency_shuttle.dm similarity index 78% rename from code/controllers/emergency_shuttle_controller.dm rename to code/controllers/subsystems/emergency_shuttle.dm index 10e620beed9..f09195d08f7 100644 --- a/code/controllers/emergency_shuttle_controller.dm +++ b/code/controllers/subsystems/emergency_shuttle.dm @@ -1,10 +1,9 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +var/datum/controller/subsystem/emergency_shuttle/emergency_shuttle -// Controls the emergency shuttle +/datum/controller/subsystem/emergency_shuttle + name = "Emergency Shuttle" + flags = SS_NO_TICK_CHECK | SS_NO_INIT -var/global/datum/emergency_shuttle_controller/emergency_shuttle - -/datum/emergency_shuttle_controller var/datum/shuttle/ferry/emergency/shuttle var/list/escape_pods @@ -22,7 +21,22 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle var/datum/announcement/priority/emergency_shuttle_called = new(0, new_sound = sound('sound/AI/shuttlecalled.ogg')) var/datum/announcement/priority/emergency_shuttle_recalled = new(0, new_sound = sound('sound/AI/shuttlerecalled.ogg')) -/datum/emergency_shuttle_controller/proc/process() +/datum/controller/subsystem/emergency_shuttle/Recover() + // Just copy all the stuff over. + src.shuttle = emergency_shuttle.shuttle + src.escape_pods = emergency_shuttle.escape_pods + src.launch_time = emergency_shuttle.launch_time + src.auto_recall = emergency_shuttle.auto_recall + src.auto_recall_time = emergency_shuttle.auto_recall_time + src.evac = emergency_shuttle.evac + src.wait_for_launch = emergency_shuttle.wait_for_launch + src.autopilot = emergency_shuttle.autopilot + src.deny_shuttle = emergency_shuttle.deny_shuttle + +/datum/controller/subsystem/emergency_shuttle/New() + NEW_SS_GLOBAL(emergency_shuttle) + +/datum/controller/subsystem/emergency_shuttle/fire() if (wait_for_launch) if (evac && auto_recall && world.time >= auto_recall_time) recall() @@ -38,9 +52,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle if (autopilot) shuttle.launch(src) -//called when the shuttle has arrived. - -/datum/emergency_shuttle_controller/proc/shuttle_arrived() +/datum/controller/subsystem/emergency_shuttle/proc/shuttle_arrived() if (!shuttle.location) //at station if (autopilot) set_launch_countdown(SHUTTLE_LEAVETIME) //get ready to return @@ -57,15 +69,15 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle pod.arming_controller.arm() //begins the launch countdown and sets the amount of time left until launch -/datum/emergency_shuttle_controller/proc/set_launch_countdown(var/seconds) +/datum/controller/subsystem/emergency_shuttle/proc/set_launch_countdown(var/seconds) wait_for_launch = 1 launch_time = world.time + seconds*10 -/datum/emergency_shuttle_controller/proc/stop_launch_countdown() +/datum/controller/subsystem/emergency_shuttle/proc/stop_launch_countdown() wait_for_launch = 0 //calls the shuttle for an emergency evacuation -/datum/emergency_shuttle_controller/proc/call_evac() +/datum/controller/subsystem/emergency_shuttle/proc/call_evac() if(!can_call()) return //set the launch timer @@ -83,7 +95,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle A.readyalert() //calls the shuttle for a routine crew transfer -/datum/emergency_shuttle_controller/proc/call_transfer() +/datum/controller/subsystem/emergency_shuttle/proc/call_transfer() if(!can_call()) return //set the launch timer @@ -97,7 +109,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle priority_announcement.Announce("A crew transfer to [dock_name] has been scheduled. The shuttle has been called. It will arrive in approximately [round(estimate_arrival_time()/60)] minutes.") //recalls the shuttle -/datum/emergency_shuttle_controller/proc/recall() +/datum/controller/subsystem/emergency_shuttle/proc/recall() if (!can_recall()) return wait_for_launch = 0 @@ -113,7 +125,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle else priority_announcement.Announce("The scheduled crew transfer has been cancelled.") -/datum/emergency_shuttle_controller/proc/can_call() +/datum/controller/subsystem/emergency_shuttle/proc/can_call() if (!universe.OnShuttleCall(null)) return 0 if (deny_shuttle) @@ -127,7 +139,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle //this only returns 0 if it would absolutely make no sense to recall //e.g. the shuttle is already at the station or wasn't called to begin with //other reasons for the shuttle not being recallable should be handled elsewhere -/datum/emergency_shuttle_controller/proc/can_recall() +/datum/controller/subsystem/emergency_shuttle/proc/can_recall() if (shuttle.moving_status == SHUTTLE_INTRANSIT) //if the shuttle is already in transit then it's too late return 0 if (!shuttle.location) //already at the station. @@ -136,10 +148,10 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle return 0 return 1 -/datum/emergency_shuttle_controller/proc/get_shuttle_prep_time() +/datum/controller/subsystem/emergency_shuttle/proc/get_shuttle_prep_time() // During mutiny rounds, the shuttle takes twice as long. - if(ticker && ticker.mode) - return SHUTTLE_PREPTIME * ticker.mode.shuttle_delay + if(SSticker.mode) + return SHUTTLE_PREPTIME * SSticker.mode.shuttle_delay return SHUTTLE_PREPTIME @@ -149,19 +161,19 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle */ //returns 1 if the shuttle is docked at the station and waiting to leave -/datum/emergency_shuttle_controller/proc/waiting_to_leave() +/datum/controller/subsystem/emergency_shuttle/proc/waiting_to_leave() if (shuttle.location) return 0 //not at station return (wait_for_launch || shuttle.moving_status != SHUTTLE_INTRANSIT) //so we don't have emergency_shuttle.shuttle.location everywhere -/datum/emergency_shuttle_controller/proc/location() +/datum/controller/subsystem/emergency_shuttle/proc/location() if (!shuttle) return 1 //if we dont have a shuttle datum, just act like it's at centcom return shuttle.location //returns the time left until the shuttle arrives at it's destination, in seconds -/datum/emergency_shuttle_controller/proc/estimate_arrival_time() +/datum/controller/subsystem/emergency_shuttle/proc/estimate_arrival_time() var/eta if (shuttle.has_arrive_time()) //we are in transition and can get an accurate ETA @@ -172,19 +184,19 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle return (eta - world.time)/10 //returns the time left until the shuttle launches, in seconds -/datum/emergency_shuttle_controller/proc/estimate_launch_time() +/datum/controller/subsystem/emergency_shuttle/proc/estimate_launch_time() return (launch_time - world.time)/10 -/datum/emergency_shuttle_controller/proc/has_eta() +/datum/controller/subsystem/emergency_shuttle/proc/has_eta() return (wait_for_launch || shuttle.moving_status != SHUTTLE_IDLE) //returns 1 if the shuttle has gone to the station and come back at least once, //used for game completion checking purposes -/datum/emergency_shuttle_controller/proc/returned() +/datum/controller/subsystem/emergency_shuttle/proc/returned() return (departed && shuttle.moving_status == SHUTTLE_IDLE && shuttle.location) //we've gone to the station at least once, no longer in transit and are idle back at centcom //returns 1 if the shuttle is not idle at centcom -/datum/emergency_shuttle_controller/proc/online() +/datum/controller/subsystem/emergency_shuttle/proc/online() if (!shuttle.location) //not at centcom return 1 if (wait_for_launch || shuttle.moving_status != SHUTTLE_IDLE) @@ -192,15 +204,15 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle return 0 //returns 1 if the shuttle is currently in transit (or just leaving) to the station -/datum/emergency_shuttle_controller/proc/going_to_station() +/datum/controller/subsystem/emergency_shuttle/proc/going_to_station() return (!shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE) //returns 1 if the shuttle is currently in transit (or just leaving) to centcom -/datum/emergency_shuttle_controller/proc/going_to_centcom() +/datum/controller/subsystem/emergency_shuttle/proc/going_to_centcom() return (shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE) -/datum/emergency_shuttle_controller/proc/get_status_panel_eta() +/datum/controller/subsystem/emergency_shuttle/proc/get_status_panel_eta() if (online()) if (shuttle.has_arrive_time()) var/timeleft = emergency_shuttle.estimate_arrival_time() @@ -263,4 +275,4 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle var/obj/effect/bgstar/S = new/obj/effect/bgstar(locate(x,y,z)) S.direction = spawndir spawn() - S.startmove() \ No newline at end of file + S.startmove() diff --git a/code/controllers/subsystems/event.dm b/code/controllers/subsystems/event.dm new file mode 100644 index 00000000000..2bdb6aafcc1 --- /dev/null +++ b/code/controllers/subsystems/event.dm @@ -0,0 +1,33 @@ +/datum/controller/subsystem/events + name = "Event Controller" + + flags = SS_NO_INIT + priority = SS_PRIORITY_EVENT + + var/tmp/list/processing_events = list() + var/tmp/pos = EVENT_LEVEL_MUNDANE + +/datum/controller/subsystem/events/fire(resumed = FALSE) + if (!resumed) + processing_events = event_manager.active_events.Copy() + pos = EVENT_LEVEL_MUNDANE + + while (processing_events.len) + var/datum/event/E = processing_events[processing_events.len] + processing_events.len-- + + E.process() + + if (MC_TICK_CHECK) + return + + while (pos <= EVENT_LEVEL_MAJOR) + var/list/datum/event_container/EC = event_manager.event_containers[pos] + EC.process() + pos++ + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/events/stat_entry() + ..("P:[processing_events.len]") diff --git a/code/controllers/Processes/explosives.dm b/code/controllers/subsystems/explosives.dm similarity index 85% rename from code/controllers/Processes/explosives.dm rename to code/controllers/subsystems/explosives.dm index 81e70577bf4..b496311f8ad 100644 --- a/code/controllers/Processes/explosives.dm +++ b/code/controllers/subsystems/explosives.dm @@ -1,28 +1,34 @@ -var/datum/controller/process/explosives/bomb_processor +var/datum/controller/subsystem/explosives/SSexplosives // yes, let's move the laggiest part of the game to a process // nothing could go wrong -- Lohikar -/datum/controller/process/explosives +/datum/controller/subsystem/explosives + name = "Explosives" + wait = 5 + flags = SS_NO_INIT | SS_BACKGROUND | SS_POST_FIRE_TIMING + priority = SS_PRIORITY_EXPLOSIVES + + suspended = TRUE // Start disabled, explosions will wake us if need be. + var/list/work_queue var/ticks_without_work = 0 var/list/explosion_turfs var/explosion_in_progress var/powernet_update_pending = 0 -/datum/controller/process/explosives/setup() - name = "explosives" - schedule_interval = 5 // every half-second - tick_allowance = 25 // 25% of a tick - work_queue = list() - bomb_processor = src + var/mc_notified = FALSE - // Kill it until we have an explosion to run. - disable() +/datum/controller/subsystem/explosives/New() + NEW_SS_GLOBAL(SSexplosives) + LAZYINITLIST(work_queue) -/datum/controller/process/explosives/doWork() - if (!work_queue) - setup() // fix for process failing to re-init after termination +/datum/controller/subsystem/explosives/Recover() + work_queue = SSexplosives.work_queue + explosion_in_progress = SSexplosives.explosion_in_progress + explosion_turfs = SSexplosives.explosion_turfs + powernet_update_pending = SSexplosives.powernet_update_pending +/datum/controller/subsystem/explosives/fire(resumed = FALSE) if (!(work_queue.len)) ticks_without_work++ if (powernet_update_pending && ticks_without_work > 5) @@ -31,14 +37,20 @@ var/datum/controller/process/explosives/bomb_processor // All explosions handled, powernet rebuilt. // We can sleep now. - disable() + suspend() + + mc_notified = FALSE + Master.ExplosionEnd() return ticks_without_work = 0 powernet_update_pending = 1 + if (!mc_notified) + Master.ExplosionStart() + mc_notified = TRUE + for (var/A in work_queue) - lighting_process.disable() var/datum/explosiondata/data = A if (data.is_rec) @@ -46,13 +58,10 @@ var/datum/controller/process/explosives/bomb_processor else explosion(data) - F_SCHECK - work_queue -= data - lighting_process.enable() // Handle a non-recusrive explosion. -/datum/controller/process/explosives/proc/explosion(var/datum/explosiondata/data) +/datum/controller/subsystem/explosives/proc/explosion(var/datum/explosiondata/data) var/turf/epicenter = data.epicenter var/devastation_range = data.devastation_range var/heavy_impact_range = data.heavy_impact_range @@ -110,7 +119,7 @@ var/datum/controller/process/explosives/bomb_processor if (vibration) for(var/mob/M in player_list) - F_SCHECK + CHECK_TICK // Double check for client var/reception = 2//Whether the person can be shaken or hear sound //2 = BOTH @@ -119,8 +128,6 @@ var/datum/controller/process/explosives/bomb_processor if(M && M.client) var/turf/M_turf = get_turf(M) - - if(M_turf && M_turf.z == epicenter.z) if (istype(M_turf,/turf/space)) //If the person is standing in space, they wont hear @@ -170,18 +177,24 @@ var/datum/controller/process/explosives/bomb_processor for(var/turf/T in trange(max_range, epicenter)) var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2) - if(dist < devastation_range) dist = 1 - else if(dist < heavy_impact_range) dist = 2 - else if(dist < light_impact_range) dist = 3 - else continue + if (dist < devastation_range) + dist = 1 + else if (dist < heavy_impact_range) + dist = 2 + else if (dist < light_impact_range) + dist = 3 + else + continue T.ex_act(dist) - F_SCHECK + CHECK_TICK if(T) for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway var/atom/movable/AM = atom_movable - if(AM && AM.simulated) AM.ex_act(dist) - F_SCHECK + if(AM && AM.simulated) + AM.ex_act(dist) + + CHECK_TICK var/took = (world.timeofday-start)/10 //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare @@ -194,7 +207,7 @@ var/datum/controller/process/explosives/bomb_processor Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took) // Handle a recursive explosion. -/datum/controller/process/explosives/proc/explosion_rec(turf/epicenter, power) +/datum/controller/subsystem/explosives/proc/explosion_rec(turf/epicenter, power) if(power <= 0) return epicenter = get_turf(epicenter) if(!epicenter) return @@ -214,12 +227,14 @@ var/datum/controller/process/explosives/bomb_processor for(var/direction in cardinal) var/turf/T = get_step(epicenter, direction) explosion_spread(T, power - epicenter.explosion_resistance, direction) - F_SCHECK + CHECK_TICK //This step applies the ex_act effects for the explosion, as planned in the previous step. for(var/turf/T in explosion_turfs) - if(explosion_turfs[T] <= 0) continue - if(!T) continue + if(explosion_turfs[T] <= 0) + continue + if(!T) + continue //Wow severity looks confusing to calculate... Fret not, I didn't leave you with any additional instructions or help. (just kidding, see the line under the calculation) var/severity = 4 - round(max(min( 3, ((explosion_turfs[T] - T.explosion_resistance) / (max(3,(power/3)))) ) ,1), 1) //sanity effective power on tile divided by either 3 or one third the total explosion power @@ -233,13 +248,13 @@ var/datum/controller/process/explosives/bomb_processor T = locate(x,y,z) for(var/atom/A in T) A.ex_act(severity) - F_SCHECK + CHECK_TICK explosion_in_progress = 0 // A proc used by recursive explosions. (The actually recursive bit.) -/datum/controller/process/explosives/proc/explosion_spread(turf/s, power, direction) - F_SCHECK +/datum/controller/subsystem/explosives/proc/explosion_spread(turf/s, power, direction) + CHECK_TICK if (istype(s, /turf/unsimulated)) return if(power <= 0) @@ -262,19 +277,18 @@ var/datum/controller/process/explosives/bomb_processor explosion_spread(T, spread_power, turn(direction,90)) // Add an explosion to the queue for processing. -/datum/controller/process/explosives/proc/queue(var/datum/explosiondata/data) +/datum/controller/subsystem/explosives/proc/queue(var/datum/explosiondata/data) if (!data || !istype(data)) return work_queue += data // Wake it up from sleeping if necessary. - if (disabled) - enable() + if (suspended) + wake() -/datum/controller/process/explosives/statProcess() - ..() - stat(null, "[work_queue.len] items in explosion queue") +/datum/controller/subsystem/explosives/stat_entry() + ..("P:[work_queue.len]") // The data datum for explosions. /datum/explosiondata diff --git a/code/controllers/subsystems/garbage-debug.dm b/code/controllers/subsystems/garbage-debug.dm new file mode 100644 index 00000000000..88f38b45379 --- /dev/null +++ b/code/controllers/subsystems/garbage-debug.dm @@ -0,0 +1,929 @@ +#ifdef TESTING + +/datum/var/running_find_references +/datum/var/last_find_references = 0 + +/datum/verb/find_refs() + set category = "Debug" + set name = "Find References" + set background = 1 + set src in world + + find_references(FALSE) + +/datum/proc/find_references(skip_alert) + running_find_references = type + if(usr && usr.client) + if(usr.client.running_find_references) + testing("CANCELLED search for references to a [usr.client.running_find_references].") + usr.client.running_find_references = null + running_find_references = null + //restart the garbage collector + SSgarbage.can_fire = 1 + SSgarbage.next_fire = world.time + world.tick_lag + return + + if(!skip_alert) + if(alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") == "No") + running_find_references = null + return + + //this keeps the garbage collector from failing to collect objects being searched for in here + SSgarbage.can_fire = 0 + + if(usr && usr.client) + usr.client.running_find_references = type + + testing("Beginning search for references to a [type].") + last_find_references = world.time + find_references_in_globals() + for(var/datum/thing in world) + DoSearchVar(thing, "WorldRef: [thing]") + testing("Completed search for references to a [type].") + if(usr && usr.client) + usr.client.running_find_references = null + running_find_references = null + + //restart the garbage collector + SSgarbage.can_fire = 1 + SSgarbage.next_fire = world.time + world.tick_lag + +/client/verb/purge_all_destroyed_objects() + set category = "Debug" + if(SSgarbage) + while(SSgarbage.queue.len) + var/datum/o = locate(SSgarbage.queue[1]) + if(istype(o) && o.gcDestroyed) + del(o) + SSgarbage.totaldels++ + SSgarbage.queue.Cut(1, 2) + +/datum/verb/qdel_then_find_references(datum/thing in world) + set category = "Debug" + set name = "qdel() then Find References" + set background = 1 + + qdel(thing) + if(!thing.running_find_references) + thing.find_references(TRUE) + +/client/verb/show_qdeleted() + set category = "Debug" + set name = "Show qdel() Log" + set desc = "Render the qdel() log and display it" + + var/dat = "List of things that have been qdel()eted this round

" + + var/tmplist = list() + for(var/elem in SSgarbage.qdel_list) + if(!(elem in tmplist)) + tmplist[elem] = 0 + tmplist[elem]++ + + for(var/path in tmplist) + dat += "[path] - [tmplist[path]] times
" + + usr << browse(dat, "window=qdeletedlog") + +#define SearchVar(X) DoSearchVar(X, "Global: " + #X) + +/datum/proc/DoSearchVar(X, Xname) + if(usr && usr.client && !usr.client.running_find_references) return + if(istype(X, /datum)) + var/datum/D = X + if(D.last_find_references == last_find_references) + return + D.last_find_references = last_find_references + for(var/V in D.vars) + for(var/varname in D.vars) + var/variable = D.vars[varname] + if(variable == src) + testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]") + else if(islist(variable)) + if(src in variable) + testing("Found [src.type] \ref[src] in [D.type]'s [varname] list var. Global: [Xname]") +#ifdef GC_FAILURE_HARD_LOOKUP + for(var/I in variable) + DoSearchVar(I, TRUE) + else + DoSearchVar(variable, "[Xname]: [varname]") +#endif + else if(islist(X)) + if(src in X) + testing("Found [src.type] \ref[src] in list [Xname].") +#ifdef GC_FAILURE_HARD_LOOKUP + for(var/I in X) + DoSearchVar(I, Xname + ": list") +#else + CHECK_TICK +#endif + + +/datum/proc/find_references_in_globals() + SearchVar(data_core) + SearchVar(all_areas) + SearchVar(machines) + SearchVar(processing_objects) + SearchVar(processing_power_items) + SearchVar(med_hud_users) + SearchVar(sec_hud_users) + SearchVar(hud_icon_reference) + SearchVar(janitorial_supplies) + SearchVar(listening_objects) + SearchVar(global_mutations) + SearchVar(universe) + SearchVar(global_map) + SearchVar(hit_appends) + SearchVar(diary) + SearchVar(diary_runtime) + SearchVar(diary_date_string) + SearchVar(href_logfile) + SearchVar(station_name) + SearchVar(station_short) + SearchVar(dock_name) + SearchVar(boss_name) + SearchVar(boss_short) + SearchVar(company_name) + SearchVar(company_short) + SearchVar(game_version) + SearchVar(changelog_hash) + SearchVar(game_year) + SearchVar(round_progressing) + SearchVar(master_mode) + SearchVar(secret_force_mode) + SearchVar(host) + SearchVar(jobMax) + SearchVar(bombers) + SearchVar(admin_log) + SearchVar(lastsignalers) + SearchVar(lawchanges) + SearchVar(reg_dna) + SearchVar(monkeystart) + SearchVar(wizardstart) + SearchVar(newplayer_start) + SearchVar(latejoin) + SearchVar(latejoin_gateway) + SearchVar(latejoin_cryo) + SearchVar(latejoin_cyborg) + SearchVar(prisonwarp) + SearchVar(holdingfacility) + SearchVar(xeno_spawn) + SearchVar(tdome1) + SearchVar(tdome2) + SearchVar(tdomeobserve) + SearchVar(tdomeadmin) + SearchVar(prisonsecuritywarp) + SearchVar(prisonwarped) + SearchVar(ninjastart) + SearchVar(cardinal) + SearchVar(cornerdirs) + SearchVar(alldirs) + SearchVar(reverse_dir) + SearchVar(config) + SearchVar(combatlog) + SearchVar(IClog) + SearchVar(OOClog) + SearchVar(adminlog) + SearchVar(powernets) + SearchVar(Debug2) + SearchVar(debugobj) + SearchVar(mods) + SearchVar(gravity_is_on) + SearchVar(server_greeting) + SearchVar(forceblob) + SearchVar(nanomanager) + SearchVar(event_manager) + SearchVar(awaydestinations) + SearchVar(fileaccess_timer) + SearchVar(custom_event_msg) + SearchVar(dbcon) + SearchVar(alphabet_uppercase) + SearchVar(robot_module_types) + SearchVar(scarySounds) + SearchVar(max_explosion_range) + SearchVar(global_announcer) + SearchVar(station_departments) + SearchVar(TICKS_IN_DAY) + SearchVar(TICKS_IN_HOUR) + SearchVar(TICKS_IN_SECOND) + SearchVar(exo_beacons) + SearchVar(ai_names) + SearchVar(wizard_first) + SearchVar(wizard_second) + SearchVar(ninja_titles) + SearchVar(ninja_names) + SearchVar(commando_names) + SearchVar(first_names_male) + SearchVar(first_names_female) + SearchVar(last_names) + SearchVar(clown_names) + SearchVar(verbs) + SearchVar(adjectives) + SearchVar(init) + SearchVar(world_api_rate_limit) + SearchVar(inerror) + SearchVar(tachycardics) + SearchVar(bradycardics) + SearchVar(heartstopper) + SearchVar(cheartstopper) + SearchVar(BLINDBLOCK) + SearchVar(DEAFBLOCK) + SearchVar(HULKBLOCK) + SearchVar(TELEBLOCK) + SearchVar(FIREBLOCK) + SearchVar(XRAYBLOCK) + SearchVar(CLUMSYBLOCK) + SearchVar(FAKEBLOCK) + SearchVar(COUGHBLOCK) + SearchVar(GLASSESBLOCK) + SearchVar(EPILEPSYBLOCK) + SearchVar(TWITCHBLOCK) + SearchVar(NERVOUSBLOCK) + SearchVar(MONKEYBLOCK) + SearchVar(BLOCKADD) + SearchVar(DIFFMUT) + SearchVar(HEADACHEBLOCK) + SearchVar(NOBREATHBLOCK) + SearchVar(REMOTEVIEWBLOCK) + SearchVar(REGENERATEBLOCK) + SearchVar(INCREASERUNBLOCK) + SearchVar(REMOTETALKBLOCK) + SearchVar(MORPHBLOCK) + SearchVar(BLENDBLOCK) + SearchVar(HALLUCINATIONBLOCK) + SearchVar(NOPRINTSBLOCK) + SearchVar(SHOCKIMMUNITYBLOCK) + SearchVar(SMALLSIZEBLOCK) + SearchVar(restricted_camera_networks) + SearchVar(url_find_lazy) + SearchVar(markup_bold) + SearchVar(markup_italics) + SearchVar(markup_strike) + SearchVar(markup_underline) + SearchVar(markup_regex) + SearchVar(markup_tags) + SearchVar(clients) + SearchVar(admins) + SearchVar(directory) + SearchVar(player_list) + SearchVar(mob_list) + SearchVar(human_mob_list) + SearchVar(silicon_mob_list) + SearchVar(living_mob_list) + SearchVar(dead_mob_list) + SearchVar(topic_commands) + SearchVar(topic_commands_names) + SearchVar(cable_list) + SearchVar(chemical_reactions_list) + SearchVar(chemical_reagents_list) + SearchVar(landmarks_list) + SearchVar(surgery_steps) + SearchVar(side_effects) + SearchVar(mechas_list) + SearchVar(joblist) + SearchVar(turfs) + SearchVar(all_species) + SearchVar(all_languages) + SearchVar(language_keys) + SearchVar(whitelisted_species) + SearchVar(playable_species) + SearchVar(poster_designs) + SearchVar(world_uplinks) + SearchVar(hair_styles_list) + SearchVar(hair_styles_male_list) + SearchVar(hair_styles_female_list) + SearchVar(facial_hair_styles_list) + SearchVar(facial_hair_styles_male_list) + SearchVar(facial_hair_styles_female_list) + SearchVar(skin_styles_female_list) + SearchVar(underwear_m) + SearchVar(underwear_f) + SearchVar(undershirt_t) + SearchVar(socks_f) + SearchVar(socks_m) + SearchVar(backbaglist) + SearchVar(exclude_jobs) + SearchVar(visual_nets) + SearchVar(cameranet) + SearchVar(cultnet) + SearchVar(rune_list) + SearchVar(escape_list) + SearchVar(endgame_exits) + SearchVar(endgame_safespawns) + SearchVar(syndicate_access) + SearchVar(cloaking_devices) + SearchVar(church_name) + SearchVar(command_name) + SearchVar(religion_name) + SearchVar(syndicate_name) + SearchVar(syndicate_code_phrase) + SearchVar(syndicate_code_response) + SearchVar(roundstart_hour) + SearchVar(next_duration_update) + SearchVar(last_round_duration) + SearchVar(common_tools) + SearchVar(WALLITEMS) + SearchVar(sortInstance) + SearchVar(cmp_field) + SearchVar(tk_maxrange) + SearchVar(global_hud) + SearchVar(global_huds) + SearchVar(robot_inventory) + SearchVar(pipe_colors) + SearchVar(RADIO_LOW_FREQ) + SearchVar(PUBLIC_LOW_FREQ) + SearchVar(PUBLIC_HIGH_FREQ) + SearchVar(RADIO_HIGH_FREQ) + SearchVar(BOT_FREQ) + SearchVar(COMM_FREQ) + SearchVar(ERT_FREQ) + SearchVar(AI_FREQ) + SearchVar(DTH_FREQ) + SearchVar(SYND_FREQ) + SearchVar(ENT_FREQ) + SearchVar(PUB_FREQ) + SearchVar(SEC_FREQ) + SearchVar(ENG_FREQ) + SearchVar(MED_FREQ) + SearchVar(SCI_FREQ) + SearchVar(SRV_FREQ) + SearchVar(SUP_FREQ) + SearchVar(MED_I_FREQ) + SearchVar(SEC_I_FREQ) + SearchVar(radiochannels) + SearchVar(CENT_FREQS) + SearchVar(ANTAG_FREQS) + SearchVar(DEPT_FREQS) + SearchVar(RADIO_DEFAULT) + SearchVar(RADIO_TO_AIRALARM) + SearchVar(RADIO_FROM_AIRALARM) + SearchVar(RADIO_CHAT) + SearchVar(RADIO_ATMOSIA) + SearchVar(RADIO_NAVBEACONS) + SearchVar(RADIO_AIRLOCK) + SearchVar(RADIO_SECBOT) + SearchVar(RADIO_MULEBOT) + SearchVar(RADIO_MAGNETS) + SearchVar(radio_controller) + SearchVar(gamemode_cache) + SearchVar(vote) + SearchVar(round_voters) + SearchVar(panic_targets) + SearchVar(panic_targets_data_loss) + SearchVar(Failsafe) + SearchVar(Master) + SearchVar(MC_restart_clear) + SearchVar(MC_restart_timeout) + SearchVar(MC_restart_count) + SearchVar(CURRENT_TICKLIMIT) + SearchVar(SSalarm) + SearchVar(SSchemistry) + SearchVar(SSeffects) + SearchVar(emergency_shuttle) + SearchVar(SSexplosives) + SearchVar(SSgarbage) + SearchVar(SSicon_smooth) + SearchVar(SSlighting) + SearchVar(SSnanoui) + SearchVar(SSnightlight) + SearchVar(SSorbit) + SearchVar(SSparallax) + SearchVar(shuttle_controller) + SearchVar(sun) + SearchVar(SScargo) + SearchVar(SSticker) + SearchVar(SStimer) + SearchVar(SSvote) + SearchVar(SSwireless) + SearchVar(SSatoms) + SearchVar(SSxenoarch) + SearchVar(SScalamity) + SearchVar(SSdisease) + SearchVar(SSmodifiers) + SearchVar(SSoverlays) + SearchVar(SSpipenet) + SearchVar(SSprocessing) + SearchVar(base_law_type) + SearchVar(discord_bot) + SearchVar(diseases) + SearchVar(modules) + SearchVar(all_supply_groups) + SearchVar(archive_diseases) + SearchVar(advance_cures) + SearchVar(list_symptoms) + SearchVar(dictionary_symptoms) + SearchVar(SYMPTOM_ACTIVATION_PROB) + SearchVar(revdata) + SearchVar(all_observable_events) + SearchVar(destroyed_event) + SearchVar(moved_event) + SearchVar(task_triggered_event) + SearchVar(camera_repository) + SearchVar(crew_repository) + SearchVar(uplink) + SearchVar(AIRLOCK_WIRE_IDSCAN) + SearchVar(AIRLOCK_WIRE_MAIN_POWER1) + SearchVar(AIRLOCK_WIRE_MAIN_POWER2) + SearchVar(AIRLOCK_WIRE_DOOR_BOLTS) + SearchVar(AIRLOCK_WIRE_BACKUP_POWER1) + SearchVar(AIRLOCK_WIRE_BACKUP_POWER2) + SearchVar(AIRLOCK_WIRE_OPEN_DOOR) + SearchVar(AIRLOCK_WIRE_AI_CONTROL) + SearchVar(AIRLOCK_WIRE_ELECTRIFY) + SearchVar(AIRLOCK_WIRE_SAFETY) + SearchVar(AIRLOCK_WIRE_SPEED) + SearchVar(AIRLOCK_WIRE_LIGHT) + SearchVar(AALARM_WIRE_IDSCAN) + SearchVar(AALARM_WIRE_POWER) + SearchVar(AALARM_WIRE_SYPHON) + SearchVar(AALARM_WIRE_AI_CONTROL) + SearchVar(AALARM_WIRE_AALARM) + SearchVar(AUTOLATHE_HACK_WIRE) + SearchVar(AUTOLATHE_SHOCK_WIRE) + SearchVar(AUTOLATHE_DISABLE_WIRE) + SearchVar(CAMERA_WIRE_FOCUS) + SearchVar(CAMERA_WIRE_POWER) + SearchVar(CAMERA_WIRE_LIGHT) + SearchVar(CAMERA_WIRE_ALARM) + SearchVar(CAMERA_WIRE_NOTHING1) + SearchVar(CAMERA_WIRE_NOTHING2) + SearchVar(WIRE_EXPLODE) + SearchVar(WIRE_POWER1) + SearchVar(WIRE_POWER2) + SearchVar(WIRE_AVOIDANCE) + SearchVar(WIRE_LOADCHECK) + SearchVar(WIRE_MOTOR1) + SearchVar(WIRE_MOTOR2) + SearchVar(WIRE_REMOTE_RX) + SearchVar(WIRE_REMOTE_TX) + SearchVar(WIRE_BEACON_RX) + SearchVar(NUCLEARBOMB_WIRE_LIGHT) + SearchVar(NUCLEARBOMB_WIRE_TIMING) + SearchVar(NUCLEARBOMB_WIRE_SAFETY) + SearchVar(PARTICLE_TOGGLE_WIRE) + SearchVar(PARTICLE_STRENGTH_WIRE) + SearchVar(PARTICLE_INTERFACE_WIRE) + SearchVar(PARTICLE_LIMIT_POWER_WIRE) + SearchVar(WIRE_SIGNAL) + SearchVar(WIRE_RECEIVE) + SearchVar(WIRE_TRANSMIT) + SearchVar(BORG_WIRE_LAWCHECK) + SearchVar(BORG_WIRE_MAIN_POWER) + SearchVar(BORG_WIRE_LOCKED_DOWN) + SearchVar(BORG_WIRE_AI_CONTROL) + SearchVar(BORG_WIRE_CAMERA) + SearchVar(SMARTFRIDGE_WIRE_ELECTRIFY) + SearchVar(SMARTFRIDGE_WIRE_THROW) + SearchVar(SMARTFRIDGE_WIRE_IDSCAN) + SearchVar(SMES_WIRE_RCON) + SearchVar(SMES_WIRE_INPUT) + SearchVar(SMES_WIRE_OUTPUT) + SearchVar(SMES_WIRE_GROUNDING) + SearchVar(SMES_WIRE_FAILSAFES) + SearchVar(SUIT_STORAGE_WIRE_ELECTRIFY) + SearchVar(SUIT_STORAGE_WIRE_SAFETY) + SearchVar(SUIT_STORAGE_WIRE_LOCKED) + SearchVar(VENDING_WIRE_THROW) + SearchVar(VENDING_WIRE_CONTRABAND) + SearchVar(VENDING_WIRE_ELECTRIFY) + SearchVar(VENDING_WIRE_IDSCAN) + SearchVar(same_wires) + SearchVar(wireColours) + SearchVar(PDA_Manifest) + SearchVar(ManifestJSON) + SearchVar(accessible_z_levels) + SearchVar(base_turf_by_z) + SearchVar(newscaster_standard_feeds) + SearchVar(announced_news_types) + SearchVar(send_emergency_team) + SearchVar(ert_base_chance) + SearchVar(can_call_ert) + SearchVar(shatter_sound) + SearchVar(explosion_sound) + SearchVar(spark_sound) + SearchVar(rustle_sound) + SearchVar(punch_sound) + SearchVar(clown_sound) + SearchVar(swing_hit_sound) + SearchVar(hiss_sound) + SearchVar(page_sound) + SearchVar(defaultfootsteps) + SearchVar(concretefootsteps) + SearchVar(grassfootsteps) + SearchVar(dirtfootsteps) + SearchVar(waterfootsteps) + SearchVar(sandfootsteps) + SearchVar(gravelfootsteps) + SearchVar(footstepfx) + SearchVar(FALLOFF_SOUNDS) + SearchVar(all_antag_types) + SearchVar(all_antag_spawnpoints) + SearchVar(antag_names_to_ids) + SearchVar(borers) + SearchVar(xenomorphs) + SearchVar(actor) + SearchVar(commandos) + SearchVar(deathsquad) + SearchVar(ert) + SearchVar(mercs) + SearchVar(ninjas) + SearchVar(raiders) + SearchVar(wizards) + SearchVar(cult) + SearchVar(highlanders) + SearchVar(loyalists) + SearchVar(renegades) + SearchVar(revs) + SearchVar(malf) + SearchVar(vampire_thrall) + SearchVar(traitors) + SearchVar(vamp) + SearchVar(forced_ambiance_list) + SearchVar(teleportlocs) + SearchVar(ghostteleportlocs) + SearchVar(centcom_areas) + SearchVar(the_station_areas) + SearchVar(dna_activity_bounds) + SearchVar(assigned_blocks) + SearchVar(dna_genes) + SearchVar(eventchance) + SearchVar(hadevent) + SearchVar(antag_add_failed) + SearchVar(additional_antag_types) + SearchVar(all_objectives) + SearchVar(process_objectives) + SearchVar(possible_changeling_IDs) + SearchVar(hivemind_bank) + SearchVar(powers) + SearchVar(powerinstances) + SearchVar(narsie_behaviour) + SearchVar(narsie_cometh) + SearchVar(narsie_list) + SearchVar(cultwords) + SearchVar(runedec) + SearchVar(engwords) + SearchVar(rnwords) + SearchVar(sacrificed) + SearchVar(universe_has_ended) + SearchVar(Holiday) + SearchVar(nuke_disks) + SearchVar(vampirepower_types) + SearchVar(vampirepowers) + SearchVar(ghost_all_access) + SearchVar(job_master) + SearchVar(ENGSEC) + SearchVar(CAPTAIN) + SearchVar(HOS) + SearchVar(WARDEN) + SearchVar(DETECTIVE) + SearchVar(OFFICER) + SearchVar(CHIEF) + SearchVar(ENGINEER) + SearchVar(ATMOSTECH) + SearchVar(AI) + SearchVar(CYBORG) + SearchVar(INTERN_SEC) + SearchVar(INTERN_ENG) + SearchVar(MEDSCI) + SearchVar(RD) + SearchVar(SCIENTIST) + SearchVar(CHEMIST) + SearchVar(CMO) + SearchVar(DOCTOR) + SearchVar(GENETICIST) + SearchVar(VIROLOGIST) + SearchVar(PSYCHIATRIST) + SearchVar(ROBOTICIST) + SearchVar(XENOBIOLOGIST) + SearchVar(PARAMEDIC) + SearchVar(INTERN_MED) + SearchVar(INTERN_SCI) + SearchVar(CIVILIAN) + SearchVar(HOP) + SearchVar(BARTENDER) + SearchVar(BOTANIST) + SearchVar(CHEF) + SearchVar(JANITOR) + SearchVar(LIBRARIAN) + SearchVar(QUARTERMASTER) + SearchVar(CARGOTECH) + SearchVar(MINER) + SearchVar(LAWYER) + SearchVar(CHAPLAIN) + SearchVar(CLOWN) + SearchVar(MIME) + SearchVar(ASSISTANT) + SearchVar(assistant_occupations) + SearchVar(command_positions) + SearchVar(engineering_positions) + SearchVar(medical_positions) + SearchVar(science_positions) + SearchVar(cargo_positions) + SearchVar(civilian_positions) + SearchVar(security_positions) + SearchVar(nonhuman_positions) + SearchVar(whitelist) + SearchVar(captain_announcement) + SearchVar(doppler_arrays) + SearchVar(floor_light_cache) + SearchVar(HOLOPAD_MODE) + SearchVar(navbeacons) + SearchVar(news_network) + SearchVar(allCasters) + SearchVar(bomb_set) + SearchVar(turret_icons) + SearchVar(req_console_assistance) + SearchVar(req_console_supplies) + SearchVar(req_console_information) + SearchVar(allConsoles) + SearchVar(ai_status_emotions) + SearchVar(station_networks) + SearchVar(engineering_networks) + SearchVar(priority_air_alarms) + SearchVar(minor_air_alarms) + SearchVar(air_alarm_topic) + SearchVar(specops_shuttle_moving_to_station) + SearchVar(specops_shuttle_moving_to_centcom) + SearchVar(specops_shuttle_at_station) + SearchVar(specops_shuttle_can_send) + SearchVar(specops_shuttle_time) + SearchVar(specops_shuttle_timeleft) + SearchVar(syndicate_elite_shuttle_moving_to_station) + SearchVar(syndicate_elite_shuttle_moving_to_mothership) + SearchVar(syndicate_elite_shuttle_at_station) + SearchVar(syndicate_elite_shuttle_can_send) + SearchVar(syndicate_elite_shuttle_time) + SearchVar(syndicate_elite_shuttle_timeleft) + SearchVar(recentmessages) + SearchVar(message_delay) + SearchVar(telecomms_list) + SearchVar(word_to_uristrune_table) + SearchVar(uristrune_cache) + SearchVar(slot_flags_enumeration) + SearchVar(BUMP_TELEPORTERS) + SearchVar(splatter_cache) + SearchVar(fluidtrack_cache) + SearchVar(active_radio_jammers) + SearchVar(default_uplink_selection) + SearchVar(chatrooms) + SearchVar(PDAs) + SearchVar(default_internal_channels) + SearchVar(default_medbay_channels) + SearchVar(NO_EMAG_ACT) + SearchVar(last_chew) + SearchVar(cached_icons) + SearchVar(hazard_overlays) + SearchVar(tape_roll_applications) + SearchVar(ashtray_cache) + SearchVar(MIN_ACTIVE_TIME) + SearchVar(MAX_ACTIVE_TIME) + SearchVar(stool_cache) + SearchVar(enterloopsanity) + SearchVar(flooring_types) + SearchVar(floor_decals) + SearchVar(random_junk) + SearchVar(flooring_cache) + SearchVar(js_byjax) + SearchVar(js_dropdowns) + SearchVar(BSACooldown) + SearchVar(floorIsLava) + SearchVar(admin_ranks) + SearchVar(admin_secrets) + SearchVar(admin_verbs_default) + SearchVar(admin_verbs_admin) + SearchVar(admin_verbs_ban) + SearchVar(admin_verbs_sounds) + SearchVar(admin_verbs_fun) + SearchVar(admin_verbs_spawn) + SearchVar(admin_verbs_server) + SearchVar(admin_verbs_debug) + SearchVar(admin_verbs_paranoid_debug) + SearchVar(admin_verbs_possess) + SearchVar(admin_verbs_permissions) + SearchVar(admin_verbs_rejuv) + SearchVar(admin_verbs_hideable) + SearchVar(admin_verbs_mod) + SearchVar(admin_verbs_dev) + SearchVar(admin_verbs_cciaa) + SearchVar(jobban_runonce) + SearchVar(jobban_keylist) + SearchVar(admin_datums) + SearchVar(CMinutes) + SearchVar(Banlist) + SearchVar(adminhelp_ignored_words) + SearchVar(checked_for_inactives) + SearchVar(inactive_keys) + SearchVar(camera_range_display_status) + SearchVar(intercom_range_display_status) + SearchVar(debug_verbs) + SearchVar(prevent_airgroup_regroup) + SearchVar(say_disabled) + SearchVar(movement_disabled) + SearchVar(movement_disabled_exception) + SearchVar(forbidden_varedit_object_types) + SearchVar(VVlocked) + SearchVar(VVicon_edit_lock) + SearchVar(VVckey_edit) + SearchVar(sounds_cache) + SearchVar(commandos_possible) + SearchVar(random_stock_common) + SearchVar(random_stock_uncommon) + SearchVar(random_stock_rare) + SearchVar(random_stock_large) + SearchVar(asset_datums) + SearchVar(preferences_datums) + SearchVar(seen_citizenships) + SearchVar(seen_systems) + SearchVar(seen_factions) + SearchVar(seen_religions) + SearchVar(citizenship_choices) + SearchVar(home_system_choices) + SearchVar(faction_choices) + SearchVar(religion_choices) + SearchVar(spawntypes) + SearchVar(uplink_locations) + SearchVar(valid_bloodtypes) + SearchVar(gear_tweak_free_color_choice) + SearchVar(loadout_categories) + SearchVar(gear_datums) + SearchVar(breach_brute_descriptors) + SearchVar(breach_burn_descriptors) + SearchVar(FINGERPRINT_COMPLETE) + SearchVar(current_date_string) + SearchVar(vendor_account) + SearchVar(station_account) + SearchVar(department_accounts) + SearchVar(num_financial_terminals) + SearchVar(next_account_number) + SearchVar(all_money_accounts) + SearchVar(economy_init) + SearchVar(weighted_randomevent_locations) + SearchVar(weighted_mundaneevent_locations) + SearchVar(severity_to_string) + SearchVar(event_last_fired) + SearchVar(dreams) + SearchVar(non_fakeattack_weapons) + SearchVar(ghost_traps) + SearchVar(holodeck_programs) + SearchVar(fruit_icon_cache) + SearchVar(plant_seed_sprites) + SearchVar(wax_recipes) + SearchVar(admin_verbs_lighting) + SearchVar(liquid_delay) + SearchVar(puddles) + SearchVar(maploader) + SearchVar(_preloader) + SearchVar(swapmaps_iconcache) + SearchVar(SWAPMAPS_SAV) + SearchVar(SWAPMAPS_TEXT) + SearchVar(swapmaps_mode) + SearchVar(swapmaps_compiled_maxx) + SearchVar(swapmaps_compiled_maxy) + SearchVar(swapmaps_compiled_maxz) + SearchVar(swapmaps_initialized) + SearchVar(swapmaps_loaded) + SearchVar(swapmaps_byname) + SearchVar(name_to_material) + SearchVar(ore_data) + SearchVar(dview_mob) + SearchVar(holder_mob_icon_cache) + SearchVar(slot_equipment_priority) + SearchVar(base_miss_chance) + SearchVar(organ_rel_size) + SearchVar(intents) + SearchVar(humanoid_mobs_specific) + SearchVar(humanoid_mobs_inclusive) + SearchVar(synthetic_mobs_specific) + SearchVar(synthetic_mobs_inclusive) + SearchVar(wierd_mobs_specific) + SearchVar(wierd_mobs_inclusive) + SearchVar(ghost_darkness_images) + SearchVar(ghost_sightless_images) + SearchVar(department_radio_keys) + SearchVar(channel_to_radio_key) + SearchVar(cleanbot_types) + SearchVar(diona_banned_languages) + SearchVar(alcohol_clumsy) + SearchVar(sparring_attack_cache) + SearchVar(human_icon_cache) + SearchVar(tail_icon_cache) + SearchVar(light_overlay_cache) + SearchVar(damage_icon_parts) + SearchVar(MAXIMUM_MEME_POINTS) + SearchVar(host_brain) + SearchVar(controlling) + SearchVar(ai_list) + SearchVar(ai_verbs_default) + SearchVar(default_ai_icon) + SearchVar(ai_icons) + SearchVar(empty_playable_ai_cores) + SearchVar(pai_emotions) + SearchVar(robot_custom_icons) + SearchVar(robot_modules) + SearchVar(mob_hat_cache) + SearchVar(protected_objects) + SearchVar(SKILL_NONE) + SearchVar(SKILL_BASIC) + SearchVar(SKILL_ADEPT) + SearchVar(SKILL_EXPERT) + SearchVar(SKILLS) + SearchVar(SKILL_ENGINEER) + SearchVar(SKILL_ORGAN_ROBOTICIST) + SearchVar(SKILL_SECURITY_OFFICER) + SearchVar(SKILL_CHEMIST) + SearchVar(SKILL_PRE) + SearchVar(file_uid) + SearchVar(comm_message_listeners) + SearchVar(global_message_listener) + SearchVar(last_message_id) + SearchVar(nttransfer_uid) + SearchVar(warrant_uid) + SearchVar(ntnet_card_uid) + SearchVar(ntnet_global) + SearchVar(ntnrc_uid) + SearchVar(z_levels) + SearchVar(BLOOD_VOLUME_SAFE) + SearchVar(BLOOD_VOLUME_OKAY) + SearchVar(BLOOD_VOLUME_BAD) + SearchVar(BLOOD_VOLUME_SURVIVE) + SearchVar(organ_cache) + SearchVar(limb_icon_cache) + SearchVar(all_robolimbs) + SearchVar(chargen_robolimbs) + SearchVar(basic_robolimb) + SearchVar(moving_levels) + SearchVar(cached_space) + SearchVar(map_sectors) + SearchVar(ship_engines) + SearchVar(allfaxes) + SearchVar(arrived_faxes) + SearchVar(sent_faxes) + SearchVar(alldepartments) + SearchVar(admin_departments) + SearchVar(photo_count) + SearchVar(possible_cable_coil_colours) + SearchVar(rad_collectors) + SearchVar(blacklisted_tesla_types) + SearchVar(random_maps) + SearchVar(map_count) + SearchVar(supply_drop) + SearchVar(maze_cell_count) + SearchVar(lunchables_lunches_) + SearchVar(lunchables_snacks_) + SearchVar(lunchables_drinks_) + SearchVar(lunchables_drink_reagents_) + SearchVar(lunchables_ethanol_reagents_) + SearchVar(message_servers) + SearchVar(blackbox) + SearchVar(responsive_carriers) + SearchVar(finds_as_strings) + SearchVar(ascii_A) + SearchVar(ascii_Z) + SearchVar(ascii_a) + SearchVar(ascii_z) + SearchVar(ascii_DOLLAR) + SearchVar(ascii_ZERO) + SearchVar(ascii_NINE) + SearchVar(ascii_UNDERSCORE) + SearchVar(OOP_OR) + SearchVar(OOP_AND) + SearchVar(OOP_BIT) + SearchVar(OOP_EQUAL) + SearchVar(OOP_COMPARE) + SearchVar(OOP_ADD) + SearchVar(OOP_MULTIPLY) + SearchVar(OOP_POW) + SearchVar(OOP_UNARY) + SearchVar(OOP_GROUP) + SearchVar(KW_FAIL) + SearchVar(KW_PASS) + SearchVar(KW_ERR) + SearchVar(KW_WARN) + SearchVar(maint_all_access) + SearchVar(spells) + SearchVar(artefact_feedback) + SearchVar(GPS_list) + SearchVar(gps_by_type) + SearchVar(ventcrawl_machinery) + SearchVar(can_enter_vent_with) + SearchVar(ALL_ANTIGENS) + SearchVar(virusDB) + SearchVar(all_unit_tests_passed) + SearchVar(failed_unit_tests) + SearchVar(total_unit_tests) + SearchVar(ascii_esc) + SearchVar(ascii_red) + SearchVar(ascii_green) + SearchVar(ascii_reset) + SearchVar(assigned) + SearchVar(created) + SearchVar(merged) + SearchVar(invalid_zone) + SearchVar(air_blocked) + SearchVar(zone_blocked) + SearchVar(blocked) + SearchVar(mark) + SearchVar(contamination_overlay) + SearchVar(vsc) + +#endif diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm new file mode 100644 index 00000000000..02dd8edf5c6 --- /dev/null +++ b/code/controllers/subsystems/garbage.dm @@ -0,0 +1,263 @@ +var/datum/controller/subsystem/garbage_collector/SSgarbage + +/datum/controller/subsystem/garbage_collector + name = "Garbage" + priority = SS_PRIORITY_GARBAGE + wait = 5 + flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + + var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object + var/delslasttick = 0 // number of del()'s we've done this tick + var/gcedlasttick = 0 // number of things that gc'ed last tick + var/totaldels = 0 + var/totalgcs = 0 + + var/highest_del_time = 0 + var/highest_del_tickusage = 0 + + var/list/queue = list() // list of refID's of things that should be garbage collected + // refID's are associated with the time at which they time out and need to be manually del() + // we do this so we aren't constantly locating them and preventing them from being gc'd + + var/list/tobequeued = list() //We store the references of things to be added to the queue seperately so we can spread out GC overhead over a few ticks + + var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened. + // the types are stored as strings + var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call + + var/list/noqdelhint = list()// list of all types that do not return a QDEL_HINT + // all types that did not respect qdel(A, force=TRUE) and returned one + // of the immortality qdel hints + var/list/noforcerespect = list() + +#ifdef TESTING + var/list/qdel_list = list() // list of all types that have been qdel()eted +#endif + +/datum/controller/subsystem/garbage_collector/New() + NEW_SS_GLOBAL(SSgarbage) + +/datum/controller/subsystem/garbage_collector/stat_entry(msg) + msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|" + msg += "GR:" + if (!(delslasttick+gcedlasttick)) + msg += "n/a|" + else + msg += "[round((gcedlasttick/(delslasttick+gcedlasttick))*100, 0.01)]%|" + + msg += "TD:[totaldels]|TG:[totalgcs]|" + if (!(totaldels+totalgcs)) + msg += "n/a|" + else + msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" + ..(msg) + +/datum/controller/subsystem/garbage_collector/fire() + HandleToBeQueued() + if(state == SS_RUNNING) + HandleQueue() + + if (state == SS_PAUSED) + state = SS_RUNNING + +//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. +//Don't attempt to optimize, not worth the effort. +/datum/controller/subsystem/garbage_collector/proc/HandleToBeQueued() + var/list/tobequeued = src.tobequeued + var/starttime = world.time + var/starttimeofday = world.timeofday + while(tobequeued.len && starttime == world.time && starttimeofday == world.timeofday) + if (MC_TICK_CHECK) + break + var/ref = tobequeued[1] + Queue(ref) + tobequeued.Cut(1, 2) + +/datum/controller/subsystem/garbage_collector/proc/HandleQueue() + delslasttick = 0 + gcedlasttick = 0 + var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del() + var/list/queue = src.queue + var/starttime = world.time + var/starttimeofday = world.timeofday + while(queue.len && starttime == world.time && starttimeofday == world.timeofday) + if (MC_TICK_CHECK) + break + var/refID = queue[1] + if (!refID) + queue.Cut(1, 2) + continue + + var/GCd_at_time = queue[refID] + if(GCd_at_time > time_to_kill) + break // Everything else is newer, skip them + queue.Cut(1, 2) + var/datum/A + A = locate(refID) + if (A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake + #ifdef GC_FAILURE_HARD_LOOKUP + A.find_references() + #endif + + // Something's still referring to the qdel'd object. Kill it. + var/type = A.type + log_gc("-- \ref[A] | [type] was unable to be GC'd and was deleted --", type) + didntgc["[type]"]++ + + HardDelete(A) + + ++delslasttick + ++totaldels + else + ++gcedlasttick + ++totalgcs + +/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A) + if (istype(A) && A.gcDestroyed == GC_CURRENTLY_BEING_QDELETED) + tobequeued += A + A.gcDestroyed = GC_QUEUED_FOR_QUEUING + +/datum/controller/subsystem/garbage_collector/proc/Queue(datum/A) + if (!istype(A) || (!isnull(A.gcDestroyed) && A.gcDestroyed >= 0)) + return + if (A.gcDestroyed == GC_QUEUED_FOR_HARD_DEL) + HardDelete(A) + return + var/gctime = world.time + var/refid = "\ref[A]" + + A.gcDestroyed = gctime + + if (queue[refid]) + queue -= refid // Removing any previous references that were GC'd so that the current object will be at the end of the list. + + queue[refid] = gctime + +// For profiling. +/datum/controller/subsystem/garbage_collector/proc/HardDelete(datum/A) + var/time = world.timeofday + var/tick = world.tick_usage + var/ticktime = world.time + + var/type = A.type + var/refID = "\ref[A]" + + del(A) + + tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100)) + if (tick > highest_del_tickusage) + highest_del_tickusage = tick + time = world.timeofday - time + if (!time && TICK_DELTA_TO_MS(tick) > 1) + time = TICK_DELTA_TO_MS(tick)/100 + if (time > highest_del_time) + highest_del_time = time + if (time > 10) + log_gc("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)", type, TRUE) + message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).") + postpone(time/5) + +/datum/controller/subsystem/garbage_collector/proc/HardQueue(datum/A) + if (istype(A) && A.gcDestroyed == GC_CURRENTLY_BEING_QDELETED) + tobequeued += A + A.gcDestroyed = GC_QUEUED_FOR_HARD_DEL + +/datum/controller/subsystem/garbage_collector/Recover() + if (istype(SSgarbage.queue)) + queue |= SSgarbage.queue + if (istype(SSgarbage.tobequeued)) + tobequeued |= SSgarbage.tobequeued + +// Should be treated as a replacement for the 'del' keyword. +// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. +/proc/qdel(datum/D, force=FALSE) + if(!D) + return +#ifdef TESTING + SSgarbage.qdel_list += "[D.type]" +#endif + if(!istype(D)) + del(D) + else if(isnull(D.gcDestroyed)) + D.gcDestroyed = GC_CURRENTLY_BEING_QDELETED + var/start_time = world.time + var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up. + if(world.time != start_time) + SSgarbage.sleptDestroy["[D.type]"]++ + if(!D) + return + switch(hint) + if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. + SSgarbage.QueueForQueuing(D) + if (QDEL_HINT_IWILLGC) + D.gcDestroyed = world.time + return + if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. + if(!force) + D.gcDestroyed = null //clear the gc variable (important!) + return + // Returning LETMELIVE after being told to force destroy + // indicates the objects Destroy() does not respect force + if(!SSgarbage.noforcerespect["[D.type]"]) + SSgarbage.noforcerespect["[D.type]"] = "[D.type]" + testing("WARNING: [D.type] has been force deleted, but is \ + returning an immortal QDEL_HINT, indicating it does \ + not respect the force flag for qdel(). It has been \ + placed in the queue, further instances of this type \ + will also be queued.") + SSgarbage.QueueForQueuing(D) + if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate() + SSgarbage.HardQueue(D) + if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. + SSgarbage.HardDelete(D) + if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. + SSgarbage.QueueForQueuing(D) + #ifdef TESTING + D.find_references() + #endif + if (QDEL_HINT_POOL) + if (!force) + D.gcDestroyed = null + returnToPool(D) + return + // Returning POOL after being told to force destroy + // indicates the objects Destroy() does not respect force + if(!SSgarbage.noforcerespect["[D.type]"]) + SSgarbage.noforcerespect["[D.type]"] = "[D.type]" + testing("WARNING: [D.type] has been force deleted, but is \ + returning an immortal QDEL_HINT, indicating it does \ + not respect the force flag for qdel(). It has been \ + placed in the queue, further instances of this type \ + will also be queued.") + SSgarbage.QueueForQueuing(D) + else + if(!SSgarbage.noqdelhint["[D.type]"]) + SSgarbage.noqdelhint["[D.type]"] = "[D.type]" + testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") + SSgarbage.QueueForQueuing(D) + else if(D.gcDestroyed == GC_CURRENTLY_BEING_QDELETED) + CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + +// Default implementation of clean-up code. +// This should be overridden to remove all references pointing to the object being destroyed. +// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. +/datum/proc/Destroy(force=FALSE) + nanomanager.close_uis(src) + tag = null + var/list/timers = active_timers + active_timers = null + for(var/thing in timers) + var/datum/timedevent/timer = thing + if (timer.spent) + continue + qdel(timer) + return QDEL_HINT_QUEUE + +/datum/var/gcDestroyed //Time when this object was destroyed. + +/icon/Destroy() + return QDEL_HINT_HARDDEL + +/client/Destroy() + ..() + return QDEL_HINT_HARDDEL_NOW diff --git a/code/controllers/subsystems/icon_smooth.dm b/code/controllers/subsystems/icon_smooth.dm new file mode 100644 index 00000000000..fcd81994bd5 --- /dev/null +++ b/code/controllers/subsystems/icon_smooth.dm @@ -0,0 +1,52 @@ +var/datum/controller/subsystem/icon_smooth/SSicon_smooth + +/datum/controller/subsystem/icon_smooth + name = "Icon Smoothing" + init_order = SS_INIT_SMOOTHING + wait = 1 + priority = SS_PRIORITY_SMOOTHING + flags = SS_TICKER | SS_FIRE_IN_LOBBY + + var/list/smooth_queue = list() + + var/explosion_in_progress = FALSE + +/datum/controller/subsystem/icon_smooth/New() + NEW_SS_GLOBAL(SSicon_smooth) + +/datum/controller/subsystem/icon_smooth/Recover() + smooth_queue = SSicon_smooth.smooth_queue + +/datum/controller/subsystem/icon_smooth/fire() + if (explosion_in_progress) + return + + while(smooth_queue.len) + var/atom/A = smooth_queue[smooth_queue.len] + smooth_queue.len-- + smooth_icon(A) + if (MC_TICK_CHECK) + return + if (!smooth_queue.len) + suspend() + +/datum/controller/subsystem/icon_smooth/ExplosionStart() + explosion_in_progress = TRUE + +/datum/controller/subsystem/icon_smooth/ExplosionEnd() + explosion_in_progress = FALSE + +/datum/controller/subsystem/icon_smooth/Initialize() + for (var/zlevel = 1 to world.maxz) + smooth_zlevel(zlevel, FALSE) + + var/queue = smooth_queue + smooth_queue = list() + for(var/V in queue) + var/atom/A = V + if(!A) + continue + smooth_icon(A) + CHECK_TICK + + ..() diff --git a/code/controllers/subsystems/icon_updates.dm b/code/controllers/subsystems/icon_updates.dm new file mode 100644 index 00000000000..a5fe5941542 --- /dev/null +++ b/code/controllers/subsystems/icon_updates.dm @@ -0,0 +1,52 @@ +/var/datum/controller/subsystem/icon/SSicon_update + +/datum/controller/subsystem/icon + name = "Icon Updates" + flags = SS_BACKGROUND | SS_NO_INIT + wait = 1 // ds + priority = SS_PRIORITY_ICON_UPDATE + + var/list/queue = list() + var/list/currentrun + +/datum/controller/subsystem/icon/New() + NEW_SS_GLOBAL(SSicon_update) + +/datum/controller/subsystem/icon/stat_entry() + ..("Q:[queue.len] P:[LAZYLEN(currentrun)]") + +/datum/controller/subsystem/icon/fire(resumed = FALSE) + if (!resumed) + currentrun = queue + queue = list() + + var/list/curr = currentrun + + if (!curr.len) + suspend() + return + + while (curr.len) + var/atom/A = curr[curr.len] + curr.len-- + + A.icon_update_queued = FALSE + A.update_icon() + A.last_icon_update = world.time + + if (MC_TICK_CHECK) + return + +/atom + var/last_icon_update + var/icon_update_queued + var/icon_update_delay + +/atom/proc/update_icon() + +/atom/proc/queue_icon_update() + if (!icon_update_queued && (!icon_update_delay || (last_icon_update + icon_update_delay < world.time))) + icon_update_queued = TRUE + SSicon_update.queue += src + if (SSicon_update.suspended) + SSicon_update.wake() diff --git a/code/controllers/subsystems/initialization/asteroid.dm b/code/controllers/subsystems/initialization/asteroid.dm new file mode 100644 index 00000000000..a2af1c1d36d --- /dev/null +++ b/code/controllers/subsystems/initialization/asteroid.dm @@ -0,0 +1,30 @@ +/datum/controller/subsystem/asteroid + name = "Asteroid" + flags = SS_NO_FIRE | SS_NO_DISPLAY + init_order = SS_INIT_ASTEROID + +/datum/controller/subsystem/asteroid/Initialize(timeofday) + if(config.generate_asteroid) + // These values determine the specific area that the map is applied to. + // If you do not use the official Baycode moonbase map, you will need to change them. + // Create the chasms. + new /datum/random_map/automata/cave_system/chasms(null,0,0,3,255,255) + new /datum/random_map/automata/cave_system(null,0,0,3,255,255) + new /datum/random_map/automata/cave_system/chasms(null,0,0,4,255,255) + new /datum/random_map/automata/cave_system(null,0,0,4,255,255) + new /datum/random_map/automata/cave_system/chasms(null,0,0,5,255,255) + new /datum/random_map/automata/cave_system/high_yield(null,0,0,5,255,255) + new /datum/random_map/automata/cave_system/chasms/surface(null,0,0,6,255,255) + // Create the deep mining ore distribution map. + new /datum/random_map/noise/ore(null, 0, 0, 5, 64, 64) + new /datum/random_map/noise/ore(null, 0, 0, 4, 64, 64) + new /datum/random_map/noise/ore(null, 0, 0, 3, 64, 64) + var/counting_number + for(var/turf/simulated/open/chasm in world) + counting_number += 1 + chasm.update() + var/counting_result = "Total number of chasms: [counting_number]" + admin_notice(span("danger", counting_result)) + game_log("ASGEN", counting_result) + + ..() diff --git a/code/controllers/subsystems/initialization/atoms.dm b/code/controllers/subsystems/initialization/atoms.dm new file mode 100644 index 00000000000..8379415c251 --- /dev/null +++ b/code/controllers/subsystems/initialization/atoms.dm @@ -0,0 +1,151 @@ +var/datum/controller/subsystem/atoms/SSatoms + +#define BAD_INIT_QDEL_BEFORE 1 +#define BAD_INIT_DIDNT_INIT 2 +#define BAD_INIT_SLEPT 4 +#define BAD_INIT_NO_HINT 8 + +/datum/controller/subsystem/atoms + name = "Atoms" + init_order = SS_INIT_ATOMS + flags = SS_NO_FIRE + + var/initialized = INITIALIZATION_INSSATOMS + var/old_initialized + + var/list/late_loaders + var/list/created_atoms + var/list/late_qdel + + var/list/BadInitializeCalls = list() + +/datum/controller/subsystem/atoms/New() + NEW_SS_GLOBAL(SSatoms) + +/datum/controller/subsystem/atoms/Initialize(timeofday) + initialized = INITIALIZATION_INNEW_MAPLOAD + InitializeAtoms() + makepowernets() + return ..() + +/datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms) + if(initialized == INITIALIZATION_INSSATOMS) + return + + initialized = INITIALIZATION_INNEW_MAPLOAD + + LAZYINITLIST(late_loaders) + LAZYINITLIST(late_qdel) + + var/count + var/list/mapload_arg = list(TRUE) + if(atoms) + created_atoms = list() + count = atoms.len + for(var/I in atoms) + if(InitAtom(I, mapload_arg)) + atoms -= I + CHECK_TICK + else + count = 0 + for(var/atom/A in world) + if(!A.initialized) + InitAtom(A, mapload_arg) + ++count + CHECK_TICK + + admin_notice(span("danger", "Initialized [count] atoms."), R_DEBUG) + log_ss("atoms", "Initialized [count] atoms.") + + initialized = INITIALIZATION_INNEW_REGULAR + + if(late_loaders.len) + for(var/I in late_loaders) + var/atom/A = I + A.LateInitialize() + admin_notice(span("danger", "Late-initialized [late_loaders.len] atoms."), R_DEBUG) + log_ss("atoms", "Late initialized [late_loaders.len] atoms") + late_loaders.Cut() + + if(late_qdel.len) + var/num_qdels = late_qdel.len + for(var/thing in late_qdel) + qdel(thing) + + admin_notice(span("danger", "Late-qdeleted [num_qdels] atoms."), R_DEBUG) + log_ss("atoms", "Late qdeleted [num_qdels] atoms.") + + late_qdel.Cut() + + if(atoms) + . = created_atoms + atoms + created_atoms = null + +/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments) + var/the_type = A.type + if(QDELING(A)) + BadInitializeCalls[the_type] |= BAD_INIT_QDEL_BEFORE + return TRUE + + var/start_tick = world.time + + var/result = A.Initialize(arglist(arguments)) + + if(start_tick != world.time) + BadInitializeCalls[the_type] |= BAD_INIT_SLEPT + + if(result != INITIALIZE_HINT_NORMAL) + switch(result) + if(INITIALIZE_HINT_LATELOAD) + if(arguments[1]) //mapload + late_loaders += A + else + A.LateInitialize() + if(INITIALIZE_HINT_QDEL) + qdel(A) + return TRUE + if(INITIALIZE_HINT_LATEQDEL) + if(arguments[1]) //mapload + late_qdel += A + else + qdel(A) + return TRUE + else + BadInitializeCalls[the_type] |= BAD_INIT_NO_HINT + + if(!A) //possible harddel + return TRUE + else if(!A.initialized) + BadInitializeCalls[the_type] |= BAD_INIT_DIDNT_INIT + + return QDELETED(A) + +/datum/controller/subsystem/atoms/proc/InitLog() + . = "" + for(var/path in BadInitializeCalls) + . += "Path : [path] \n" + var/fails = BadInitializeCalls[path] + if(fails & BAD_INIT_DIDNT_INIT) + . += "- Didn't call atom/Initialize()\n" + if(fails & BAD_INIT_NO_HINT) + . += "- Didn't return an Initialize hint\n" + if(fails & BAD_INIT_QDEL_BEFORE) + . += "- Qdel'd in New()\n" + if(fails & BAD_INIT_SLEPT) + . += "- Slept during Initialize()\n" + +/*datum/controller/subsystem/atoms/Shutdown() + var/initlog = InitLog() + if(initlog) + world.log << initlog*/ + +/datum/controller/subsystem/atoms/Recover() + initialized = SSatoms.initialized + if(initialized == INITIALIZATION_INNEW_MAPLOAD) + InitializeAtoms() + old_initialized = SSatoms.old_initialized + +#undef BAD_INIT_QDEL_BEFORE +#undef BAD_INIT_DIDNT_INIT +#undef BAD_INIT_SLEPT +#undef BAD_INIT_NO_HINT diff --git a/code/controllers/subsystems/initialization/misc_early.dm b/code/controllers/subsystems/initialization/misc_early.dm new file mode 100644 index 00000000000..3d5c564eaa5 --- /dev/null +++ b/code/controllers/subsystems/initialization/misc_early.dm @@ -0,0 +1,45 @@ +// This is the first subsystem initialized by the MC. +// Stuff that should be loaded before everything else that isn't significant enough to get its own SS goes here. + +/datum/controller/subsystem/misc_early + name = "Early Miscellaneous Init" + init_order = SS_INIT_MISC_FIRST + flags = SS_NO_FIRE | SS_NO_DISPLAY + +/datum/controller/subsystem/misc_early/Initialize(timeofday) + // Create the data core, whatever that is. + data_core = new /datum/datacore() + + // Setup the global HUD. + global_hud = new + global_huds = list( + global_hud.druggy, + global_hud.blurry, + global_hud.vimpaired, + global_hud.darkMask, + global_hud.nvg, + global_hud.thermal, + global_hud.meson, + global_hud.science + ) + + // This is kinda important. Set up details of what the hell things are made of. + populate_material_list() + + // Create autolathe recipes, as above. + populate_lathe_recipes() + + // Create robolimbs for chargen. + populate_robolimb_list() + + if(config.ToRban) + ToRban_autoupdate() + + // Setup the job controller. + job_master = new /datum/controller/occupations() + job_master.SetupOccupations() + job_master.LoadJobs("config/jobs.txt") + + lobby_image = new/obj/effect/lobby_image() + + ..() diff --git a/code/controllers/subsystems/initialization/misc_late.dm b/code/controllers/subsystems/initialization/misc_late.dm new file mode 100644 index 00000000000..e0858bec7b3 --- /dev/null +++ b/code/controllers/subsystems/initialization/misc_late.dm @@ -0,0 +1,42 @@ +// This subsystem loads later in the init process. Not last, but after most major things are done. +// We sort the area list here because SSatoms needs to run first. + +/datum/controller/subsystem/misc_late + name = "Late Miscellaneous Init" + init_order = SS_INIT_MISC + flags = SS_NO_FIRE | SS_NO_DISPLAY + +/datum/controller/subsystem/misc_late/Initialize(timeofday) + // Sort the area list. + sortTim(all_areas, /proc/cmp_name_asc) + + var/turf/picked + // Setup the teleport locs. + for (var/thing in all_areas) + var/area/AR = thing + picked = null + if(!(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station) || istype(AR, /area/wizard_station))) + picked = pick_area_turf(AR.type, list(/proc/is_station_turf)) + if (picked) + teleportlocs += AR.name + teleportlocs[AR.name] = AR + + if(istype(AR, /area/turret_protected/aisat) || istype(AR, /area/derelict) || istype(AR, /area/tdome) || istype(AR, /area/shuttle/specops/centcom)) + ghostteleportlocs += AR.name + ghostteleportlocs[AR.name] = AR + + picked = pick_area_turf(AR.type, list(/proc/is_station_turf)) + if (picked) + ghostteleportlocs += AR.name + ghostteleportlocs[AR.name] = AR + + sortTim(teleportlocs, /proc/cmp_text_asc) + sortTim(ghostteleportlocs, /proc/cmp_text_asc) + + populate_antag_type_list() + populate_spawn_points() + setupgenetics() + + shuttle_controller.setup_shuttle_docks() + + ..(timeofday, TRUE) diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/controllers/subsystems/initialization/xenoarch.dm similarity index 90% rename from code/modules/research/xenoarchaeology/master_controller.dm rename to code/controllers/subsystems/initialization/xenoarch.dm index 332b1ce06ae..ff4cdea9c25 100644 --- a/code/modules/research/xenoarchaeology/master_controller.dm +++ b/code/controllers/subsystems/initialization/xenoarch.dm @@ -1,82 +1,93 @@ - -/datum/controller/game_controller - var/list/artifact_spawning_turfs = list() - var/list/digsite_spawning_turfs = list() - -#define XENOARCH_SPAWN_CHANCE 0.5 -#define DIGSITESIZE_LOWER 4 -#define DIGSITESIZE_UPPER 12 -#define ARTIFACTSPAWNNUM_LOWER 6 -#define ARTIFACTSPAWNNUM_UPPER 12 - -datum/controller/game_controller/proc/SetupXenoarch() - //create digsites - for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) - if(isnull(M.geologic_data)) - M.geologic_data = new/datum/geosample(M) - - if(!prob(XENOARCH_SPAWN_CHANCE)) - continue - - digsite_spawning_turfs.Add(M) - var/digsite = get_random_digsite_type() - var/target_digsite_size = rand(DIGSITESIZE_LOWER, DIGSITESIZE_UPPER) - var/list/processed_turfs = list() - var/list/turfs_to_process = list(M) - while(turfs_to_process.len) - var/turf/simulated/mineral/archeo_turf = pop(turfs_to_process) - - if(target_digsite_size > 1) - var/list/viable_adjacent_turfs = orange(1, archeo_turf) - for(var/turf/simulated/mineral/T in orange(1, archeo_turf)) - if(T.finds) - continue - if(T in processed_turfs) - continue - viable_adjacent_turfs.Add(T) - - for(var/turf/simulated/mineral/T in viable_adjacent_turfs) - if(prob(target_digsite_size/viable_adjacent_turfs.len)) - turfs_to_process.Add(T) - target_digsite_size -= 1 - if(target_digsite_size <= 0) - break - - processed_turfs.Add(archeo_turf) - if(isnull(archeo_turf.finds)) - archeo_turf.finds = list() - if(prob(50)) - archeo_turf.finds.Add(new /datum/find(digsite, rand(5,95))) - else if(prob(75)) - archeo_turf.finds.Add(new /datum/find(digsite, rand(5,45))) - archeo_turf.finds.Add(new /datum/find(digsite, rand(55,95))) - else - archeo_turf.finds.Add(new /datum/find(digsite, rand(5,30))) - archeo_turf.finds.Add(new /datum/find(digsite, rand(35,75))) - archeo_turf.finds.Add(new /datum/find(digsite, rand(75,95))) - - //sometimes a find will be close enough to the surface to show - var/datum/find/F = archeo_turf.finds[1] - if(F.excavation_required <= F.view_range) - archeo_turf.archaeo_overlay = "overlay_archaeo[rand(1,3)]" - archeo_turf.overlays += archeo_turf.archaeo_overlay - - //have a chance for an artifact to spawn here, but not in animal or plant digsites - if(isnull(M.artifact_find) && digsite != 1 && digsite != 2) - artifact_spawning_turfs.Add(archeo_turf) - - //create artifact machinery - var/num_artifacts_spawn = rand(ARTIFACTSPAWNNUM_LOWER, ARTIFACTSPAWNNUM_UPPER) - while(artifact_spawning_turfs.len > num_artifacts_spawn) - pick_n_take(artifact_spawning_turfs) - - var/list/artifacts_spawnturf_temp = artifact_spawning_turfs.Copy() - while(artifacts_spawnturf_temp.len > 0) - var/turf/simulated/mineral/artifact_turf = pop(artifacts_spawnturf_temp) - artifact_turf.artifact_find = new() - -#undef XENOARCH_SPAWN_CHANCE -#undef DIGSITESIZE_LOWER -#undef DIGSITESIZE_UPPER -#undef ARTIFACTSPAWNNUM_LOWER -#undef ARTIFACTSPAWNNUM_UPPER +var/datum/controller/subsystem/xenoarch/SSxenoarch + +#define XENOARCH_SPAWN_CHANCE 0.5 +#define DIGSITESIZE_LOWER 4 +#define DIGSITESIZE_UPPER 12 +#define ARTIFACTSPAWNNUM_LOWER 6 +#define ARTIFACTSPAWNNUM_UPPER 12 + +/datum/controller/subsystem/xenoarch + name = "Xenoarcheology" + flags = SS_NO_FIRE + init_order = SS_INIT_MISC + + var/list/artifact_spawning_turfs = list() + var/list/digsite_spawning_turfs = list() + +/datum/controller/subsystem/xenoarch/New() + NEW_SS_GLOBAL(SSxenoarch) + +/datum/controller/subsystem/xenoarch/Initialize(timeofday) + //create digsites + for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) + if(isnull(M.geologic_data)) + M.geologic_data = new/datum/geosample(M) + + if(!prob(XENOARCH_SPAWN_CHANCE)) + continue + + digsite_spawning_turfs.Add(M) + var/digsite = get_random_digsite_type() + var/target_digsite_size = rand(DIGSITESIZE_LOWER, DIGSITESIZE_UPPER) + var/list/processed_turfs = list() + var/list/turfs_to_process = list(M) + while(turfs_to_process.len) + var/turf/simulated/mineral/archeo_turf = pop(turfs_to_process) + + if(target_digsite_size > 1) + var/list/viable_adjacent_turfs = orange(1, archeo_turf) + for(var/turf/simulated/mineral/T in orange(1, archeo_turf)) + if(T.finds) + continue + if(T in processed_turfs) + continue + viable_adjacent_turfs.Add(T) + + for(var/turf/simulated/mineral/T in viable_adjacent_turfs) + if(prob(target_digsite_size/viable_adjacent_turfs.len)) + turfs_to_process.Add(T) + target_digsite_size -= 1 + if(target_digsite_size <= 0) + break + + processed_turfs.Add(archeo_turf) + if(isnull(archeo_turf.finds)) + archeo_turf.finds = list() + if(prob(50)) + archeo_turf.finds.Add(new /datum/find(digsite, rand(5,95))) + else if(prob(75)) + archeo_turf.finds.Add(new /datum/find(digsite, rand(5,45))) + archeo_turf.finds.Add(new /datum/find(digsite, rand(55,95))) + else + archeo_turf.finds.Add(new /datum/find(digsite, rand(5,30))) + archeo_turf.finds.Add(new /datum/find(digsite, rand(35,75))) + archeo_turf.finds.Add(new /datum/find(digsite, rand(75,95))) + + //sometimes a find will be close enough to the surface to show + var/datum/find/F = archeo_turf.finds[1] + if(F.excavation_required <= F.view_range) + archeo_turf.archaeo_overlay = "overlay_archaeo[rand(1,3)]" + archeo_turf.overlays += archeo_turf.archaeo_overlay + + //have a chance for an artifact to spawn here, but not in animal or plant digsites + if(isnull(M.artifact_find) && digsite != 1 && digsite != 2) + artifact_spawning_turfs.Add(archeo_turf) + + //create artifact machinery + var/num_artifacts_spawn = rand(ARTIFACTSPAWNNUM_LOWER, ARTIFACTSPAWNNUM_UPPER) + while(artifact_spawning_turfs.len > num_artifacts_spawn) + pick_n_take(artifact_spawning_turfs) + + var/list/artifacts_spawnturf_temp = artifact_spawning_turfs.Copy() + while(artifacts_spawnturf_temp.len > 0) + var/turf/simulated/mineral/artifact_turf = pop(artifacts_spawnturf_temp) + artifact_turf.artifact_find = new() + + ..() + + +#undef XENOARCH_SPAWN_CHANCE +#undef DIGSITESIZE_LOWER +#undef DIGSITESIZE_UPPER +#undef ARTIFACTSPAWNNUM_LOWER +#undef ARTIFACTSPAWNNUM_UPPER diff --git a/code/controllers/law.dm b/code/controllers/subsystems/law.dm similarity index 64% rename from code/controllers/law.dm rename to code/controllers/subsystems/law.dm index a35c145f59c..a54d67df741 100644 --- a/code/controllers/law.dm +++ b/code/controllers/subsystems/law.dm @@ -1,15 +1,18 @@ -/var/global/datum/controller/law/corp_regs +/var/global/datum/controller/subsystem/law/SSlaw + +/datum/controller/subsystem/law + name = "Law" + flags = SS_NO_FIRE -/datum/controller/law var/list/laws = list() // All laws - var/list/low_severity = list() var/list/med_severity = list() var/list/high_severity = list() -/datum/controller/law/New() - corp_regs = src +/datum/controller/subsystem/law/New() + NEW_SS_GLOBAL(SSlaw) +/datum/controller/subsystem/law/Initialize(timeofday) for (var/L in subtypesof(/datum/law/low_severity)) low_severity += new L @@ -20,5 +23,3 @@ high_severity += new L laws = low_severity + med_severity + high_severity - - ..() diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm new file mode 100644 index 00000000000..8b60be3a47a --- /dev/null +++ b/code/controllers/subsystems/lighting.dm @@ -0,0 +1,157 @@ +var/datum/controller/subsystem/lighting/SSlighting + +/var/lighting_profiling = FALSE + +/datum/controller/subsystem/lighting + name = "Lighting" + wait = LIGHTING_INTERVAL + + priority = SS_PRIORITY_LIGHTING + init_order = SS_INIT_LIGHTING + + var/list/lighting_overlays // List of all lighting overlays in the world. + var/list/lighting_corners // List of all lighting corners in the world. + + var/list/light_queue = list() // lighting sources queued for update. + var/list/corner_queue = list() // lighting corners queued for update. + var/list/overlay_queue = list() // lighting overlays queued for update. + + var/tmp/processed_lights = 0 + var/tmp/processed_corners = 0 + var/tmp/processed_overlays = 0 + + var/force_queued = TRUE + var/force_override = FALSE // For admins. + var/round_started = FALSE + + var/instant_tick_limit = 80 // Tick limit used by instant lighting updates. If world.tick_usage is higher than this when a light updates, it will be updated via. SSlighting. + +/datum/controller/subsystem/lighting/New() + NEW_SS_GLOBAL(SSlighting) + LAZYINITLIST(lighting_corners) + LAZYINITLIST(lighting_overlays) + +/datum/controller/subsystem/lighting/stat_entry() + ..("O:[lighting_overlays.len] C:[lighting_corners.len] ITL:[round(instant_tick_limit, 0.1)]%\n\tP:{L:[light_queue.len]|C:[corner_queue.len]|O:[overlay_queue.len]}\n\tL:{L:[processed_lights]|C:[processed_corners]|O:[processed_overlays]}") + +/datum/controller/subsystem/lighting/ExplosionStart() + force_queued = TRUE + +/datum/controller/subsystem/lighting/ExplosionEnd() + if (!force_override) + force_queued = FALSE + +/datum/controller/subsystem/lighting/Initialize(timeofday) + var/overlaycount = 0 + // Generate overlays. + for (var/zlevel = 1 to world.maxz) + for (var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))) + if (!T.dynamic_lighting) + continue + + var/area/A = T.loc + if (!A.dynamic_lighting) + continue + + new /atom/movable/lighting_overlay(T, TRUE) + overlaycount++ + + CHECK_TICK + + admin_notice(span("danger", "Created [overlaycount] lighting overlays."), R_DEBUG) + + // Tick once to clear most lights. + fire(FALSE, TRUE) + + admin_notice(span("danger", "Processed [processed_lights] light sources."), R_DEBUG) + admin_notice(span("danger", "Processed [processed_corners] light corners."), R_DEBUG) + admin_notice(span("danger", "Processed [processed_overlays] light overlays."), R_DEBUG) + + log_ss("lighting", "NOv:[overlaycount] L:[processed_lights] C:[processed_corners] O:[processed_overlays]") + + ..() + +/datum/controller/subsystem/lighting/fire(resumed = FALSE, no_mc_tick = FALSE) + if (!resumed && !round_started && Master.round_started) + force_queued = FALSE + round_started = TRUE + + if (!resumed) + processed_lights = 0 + processed_corners = 0 + processed_overlays = 0 + + instant_tick_limit = CURRENT_TICKLIMIT * 0.8 + + MC_SPLIT_TICK_INIT(3) + if (!no_mc_tick) + MC_SPLIT_TICK + + var/list/curr_lights = light_queue + var/list/curr_corners = corner_queue + var/list/curr_overlays = overlay_queue + + while (curr_lights.len) + var/datum/light_source/L = curr_lights[curr_lights.len] + curr_lights.len-- + + if(QDELETED(L) || L.check() || L.force_update) + L.remove_lum() + if(!QDELETED(L)) + L.apply_lum() + + else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. + L.smart_vis_update() + + L.vis_update = FALSE + L.force_update = FALSE + L.needs_update = FALSE + + processed_lights++ + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + + if (!no_mc_tick) + MC_SPLIT_TICK + + while (curr_corners.len) + var/datum/lighting_corner/C = curr_corners[curr_corners.len] + curr_corners.len-- + + C.update_overlays() + + C.needs_update = FALSE + + processed_corners++ + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + + if (!no_mc_tick) + MC_SPLIT_TICK + + while (curr_overlays.len) + var/atom/movable/lighting_overlay/O = curr_overlays[curr_overlays.len] + curr_overlays.len-- + + O.update_overlay() + O.needs_update = FALSE + + processed_overlays++ + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + +/datum/controller/subsystem/lighting/Recover() + src.light_queue = SSlighting.light_queue + src.corner_queue = SSlighting.corner_queue + src.overlay_queue = SSlighting.overlay_queue + lighting_corners = SSlighting.lighting_corners + lighting_overlays = SSlighting.lighting_overlays diff --git a/code/controllers/subsystems/machinery.dm b/code/controllers/subsystems/machinery.dm new file mode 100644 index 00000000000..01b1219ff99 --- /dev/null +++ b/code/controllers/subsystems/machinery.dm @@ -0,0 +1,144 @@ +/var/datum/controller/subsystem/machinery/SSmachinery + +/datum/controller/subsystem/machinery + name = "Machinery" + priority = SS_PRIORITY_MACHINERY + init_order = SS_INIT_MACHINERY + flags = SS_POST_FIRE_TIMING + + var/tmp/list/processing_machinery = list() + var/tmp/list/processing_powersinks = list() + var/tmp/powernets_reset_yet + + var/tmp/processes_this_tick = 0 + var/tmp/powerusers_this_tick = 0 + + var/list/rcon_smes_units = list() + var/list/rcon_smes_units_by_tag = list() + var/list/rcon_breaker_units = list() + var/list/rcon_breaker_units_by_tag = list() + + var/list/all_cameras = list() + + var/list/breaker_boxes = list() + + var/rcon_update_queued = FALSE + + var/list/slept_in_process = list() + +/datum/controller/subsystem/machinery/proc/queue_rcon_update() + rcon_update_queued = TRUE + +/datum/controller/subsystem/machinery/proc/build_rcon_lists() + rcon_update_queued = FALSE + rcon_smes_units.Cut() + rcon_breaker_units.Cut() + rcon_breaker_units_by_tag.Cut() + + for(var/obj/machinery/power/smes/buildable/SMES in machines) + if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon) + rcon_smes_units += SMES + rcon_smes_units_by_tag[SMES.RCon_tag] = SMES + + for(var/obj/machinery/power/breakerbox/breaker in breaker_boxes) + if(breaker.RCon_tag != "NO_TAG") + rcon_breaker_units += breaker + rcon_breaker_units_by_tag[breaker.RCon_tag] = breaker + + sortTim(rcon_smes_units, /proc/cmp_rcon_smes) + sortTim(rcon_breaker_units, /proc/cmp_rcon_bbox) + +/datum/controller/subsystem/machinery/New() + NEW_SS_GLOBAL(SSmachinery) + +/datum/controller/subsystem/machinery/Initialize(timeofday) + fire(FALSE, TRUE) // Tick machinery once to pare down the list so we don't hammer the server on round-start. + build_rcon_lists() + ..(timeofday) + +/datum/controller/subsystem/machinery/fire(resumed = 0, no_mc_tick = FALSE) + if (!resumed) + src.processing_machinery = machines.Copy() + src.processing_powersinks = processing_power_items.Copy() + powernets_reset_yet = FALSE + + // Reset accounting vars. + processes_this_tick = 0 + powerusers_this_tick = 0 + + if (rcon_update_queued) + build_rcon_lists() + + var/list/curr_machinery = src.processing_machinery + var/list/curr_powersinks = src.processing_powersinks + + while (curr_machinery.len) + var/obj/machinery/M = curr_machinery[curr_machinery.len] + curr_machinery.len-- + + if (QDELETED(M)) + log_debug("SSmachinery: QDELETED machine [DEBUG_REF(M)] found in machines list! Removing.") + remove_machine(M) + continue + + var/start_tick = world.time + + if (M.isprocessing) + processes_this_tick++ + switch (M.process()) + if (PROCESS_KILL) + remove_machine(M) + if (M_NO_PROCESS) + M.isprocessing = FALSE + + if (start_tick != world.time) + // Slept. + if (!slept_in_process[M.type]) + log_debug("SSmachinery: Type '[M.type]' slept during process().") + slept_in_process[M.type] = TRUE + + if (M.use_power) + powerusers_this_tick++ + M.auto_use_power() + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + + if (!powernets_reset_yet) + for (var/thing in powernets) + var/datum/powernet/PN = thing + + PN.reset() + + powernets_reset_yet = TRUE + + while (curr_powersinks.len) + var/obj/item/I = curr_powersinks[curr_powersinks.len] + curr_powersinks.len-- + + if (QDELETED(I) || !I.pwr_drain()) + processing_power_items -= I + log_debug("SSmachinery: QDELETED item [DEBUG_REF(I)] found in processing power items list.") + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/machinery/stat_entry() + ..("M:[machines.len] PI:[processing_power_items.len] PN:[powernets.len]\n\tLT:{T:[processes_this_tick]|P:[powerusers_this_tick]}") + +/proc/add_machine(obj/machinery/M) + if (QDELETED(M)) + return + + M.isprocessing = TRUE + machines += M + +/proc/remove_machine(obj/machinery/M) + if (M) + M.isprocessing = FALSE + machines -= M + SSmachinery.processing_machinery -= M diff --git a/code/controllers/subsystems/mob.dm b/code/controllers/subsystems/mob.dm new file mode 100644 index 00000000000..6c2e0095308 --- /dev/null +++ b/code/controllers/subsystems/mob.dm @@ -0,0 +1,35 @@ +/datum/controller/subsystem/mobs + name = "Mobs" + flags = SS_NO_INIT + priority = SS_PRIORITY_MOB + + var/list/currentrun = list() + +/datum/controller/subsystem/mobs/stat_entry() + ..("P:[mob_list.len]") + +/datum/controller/subsystem/mobs/fire(resumed = 0) + if (!resumed) + src.currentrun = mob_list.Copy() + + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/mob/M = currentrun[currentrun.len] + currentrun.len-- + + if (QDELETED(M)) + log_debug("SSmob: QDELETED mob [DEBUG_REF(M)] left in processing list!") + // We can just go ahead and remove them from all the mob lists. + mob_list -= M + dead_mob_list -= M + living_mob_list -= M + + if (MC_TICK_CHECK) + return + continue + + M.Life() + + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystems/nanoui.dm b/code/controllers/subsystems/nanoui.dm new file mode 100644 index 00000000000..132ae194514 --- /dev/null +++ b/code/controllers/subsystems/nanoui.dm @@ -0,0 +1,33 @@ +var/datum/controller/subsystem/nanoui/SSnanoui + +/datum/controller/subsystem/nanoui + name = "NanoUI" + flags = SS_NO_INIT + priority = SS_PRIORITY_NANOUI + + var/list/queued_uis = list() + +/datum/controller/subsystem/nanoui/New() + NEW_SS_GLOBAL(SSnanoui) + +/datum/controller/subsystem/nanoui/stat_entry() + ..("P:[nanomanager.processing_uis.len]") + +/datum/controller/subsystem/nanoui/fire(resumed = 0) + if (!resumed) + queued_uis = nanomanager.processing_uis.Copy() + + while (queued_uis.len) + var/datum/nanoui/UI = queued_uis[queued_uis.len] + queued_uis.len-- + + if (QDELETED(UI)) + nanomanager.processing_uis -= UI + if (MC_TICK_CHECK) + return + continue + + UI.process() + + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystems/night_lighting.dm b/code/controllers/subsystems/night_lighting.dm new file mode 100644 index 00000000000..b75d1ea046d --- /dev/null +++ b/code/controllers/subsystems/night_lighting.dm @@ -0,0 +1,97 @@ +var/datum/controller/subsystem/nightlight/SSnightlight + +/datum/controller/subsystem/nightlight + name = "Night Lighting" + wait = 5 MINUTES + init_order = SS_INIT_NIGHT + flags = SS_BACKGROUND | SS_NO_TICK_CHECK + priority = SS_PRIORITY_NIGHT + + var/isactive = FALSE + var/disable_type = NL_NOT_DISABLED + +/datum/controller/subsystem/nightlight/New() + NEW_SS_GLOBAL(SSnightlight) + +/datum/controller/subsystem/nightlight/Initialize(timeofday) + fire(FALSE, FALSE) + + ..(timeofday, silent = TRUE) + +/datum/controller/subsystem/nightlight/stat_entry() + ..("A:[isactive] T:[worldtime2hours()] DT:[config.nl_start] NT:[config.nl_finish]") + +/datum/controller/subsystem/nightlight/Recover() + src.isactive = SSnightlight.isactive + src.disable_type = SSnightlight.disable_type + +/datum/controller/subsystem/nightlight/proc/temp_disable(time = -1) + if (disable_type != NL_PERMANENT_DISABLE) + disable_type = NL_TEMPORARY_DISABLE + suspend() + deactivate(FALSE) + if (time > 0) + addtimer(CALLBACK(src, .proc/end_temp_disable), time, TIMER_UNIQUE | TIMER_OVERRIDE) + +/datum/controller/subsystem/nightlight/proc/end_temp_disable() + if (disable_type == NL_TEMPORARY_DISABLE) + wake() + +/datum/controller/subsystem/nightlight/fire(resumed = FALSE, announce = TRUE) + if (disable_type) + log_debug("SSnightlight: disable_type was [disable_type] but can_fire was TRUE! Disabling self.") + suspend() + return + + var/time = worldtime2hours() + if (time <= 8 || time >= 19) + if (!isactive) + activate() + if (announce) + command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') + else + if (isactive) + deactivate() + if (announce) + command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') + +// 'whitelisted' areas are areas that have nightmode explicitly enabled + +/datum/controller/subsystem/nightlight/proc/activate(var/whitelisted_only = 1) + isactive = 1 + for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only)) + APC.toggle_nightlight("on") + + CHECK_TICK + +/datum/controller/subsystem/nightlight/proc/deactivate(var/whitelisted_only = 1) + isactive = 0 + for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only)) + APC.toggle_nightlight("off") + + CHECK_TICK + +/datum/controller/subsystem/nightlight/proc/get_apc_list(var/whitelisted_only = 1) + var/list/obj/machinery/power/apc/lighting_apcs = list() + + for (var/A in all_areas) + var/area/B = A + if (B.no_light_control || (!(B.allow_nightmode) && whitelisted_only)) + continue + if (B.apc && !B.apc.aidisabled) + lighting_apcs += B.apc + + CHECK_TICK + + return lighting_apcs + +/datum/controller/subsystem/nightlight/proc/is_active() + return isactive + +/datum/controller/subsystem/nightlight/enable() + ..() + disable_type = NL_NOT_DISABLED + +/datum/controller/subsystem/nightlight/disable() + ..() + disable_type = NL_PERMANENT_DISABLE diff --git a/code/controllers/subsystems/object.dm b/code/controllers/subsystems/object.dm new file mode 100644 index 00000000000..e3f0009e4c6 --- /dev/null +++ b/code/controllers/subsystems/object.dm @@ -0,0 +1,35 @@ +/datum/controller/subsystem/object + name = "Objects" + priority = SS_PRIORITY_OBJECTS + flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT + + var/list/processing + + var/tmp/list/queue = list() + +/datum/controller/subsystem/object/New() + LAZYINITLIST(processing_objects) + processing = processing_objects // Ref for debugging. + +/datum/controller/subsystem/object/fire(resumed = FALSE) + if (!resumed) + queue = processing_objects.Copy() + + while (queue.len) + var/datum/O = queue[queue.len] + queue.len-- + + if (QDELETED(O)) + log_debug("SSobjects: QDELETED object [DEBUG_REF(O)] found in processing queue!") + processing_objects -= O + if (MC_TICK_CHECK) + return + continue + + O.process() + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/object/stat_entry() + ..("[processing_objects.len] objects") diff --git a/code/controllers/subsystems/openturf.dm b/code/controllers/subsystems/openturf.dm new file mode 100644 index 00000000000..91e6c7e5141 --- /dev/null +++ b/code/controllers/subsystems/openturf.dm @@ -0,0 +1,179 @@ +#define OPENTURF_MAX_PLANE -71 +#define OPENTURF_CAP_PLANE -70 // The multiplier goes here so it'll be on top of every other overlay. +#define OPENTURF_MAX_DEPTH 10 // The maxiumum number of planes deep we'll go before we just dump everything on the same plane. + +/var/datum/controller/subsystem/openturf/SSopenturf + +/datum/controller/subsystem/openturf + name = "Open Space" + flags = SS_BACKGROUND | SS_FIRE_IN_LOBBY + wait = 1 + init_order = SS_INIT_OPENTURF + priority = SS_PRIORITY_OPENTURF + + var/list/queued_turfs = list() + var/list/queued_overlays = list() + + var/list/openspace_overlays = list() + var/list/openspace_turfs = list() + +/datum/controller/subsystem/openturf/New() + NEW_SS_GLOBAL(SSopenturf) + +/datum/controller/subsystem/openturf/proc/update_all() + disable() + for (var/thing in openspace_overlays) + var/atom/movable/AM = thing + + var/turf/simulated/open/T = get_turf(AM) + if (istype(T)) + T.update() + else + qdel(AM) + + CHECK_TICK + + enable() + +/datum/controller/subsystem/openturf/proc/hard_reset() + disable() + log_debug("SSopenturf: hard_reset() invoked.") + var/num_deleted = 0 + for (var/thing in openspace_overlays) + qdel(thing) + num_deleted++ + CHECK_TICK + + log_debug("SSopenturf: deleted [num_deleted] overlays.") + + var/num_turfs = 0 + for (var/turf/simulated/open/T in turfs) + T.update_icon() + num_turfs++ + + CHECK_TICK + + log_debug("SSopenturf: queued [num_turfs] openturfs for update. hard_reset() complete.") + enable() + +/datum/controller/subsystem/openturf/stat_entry() + ..("Q:{T:[queued_turfs.len]|O:[queued_overlays.len]} T:{T:[openspace_turfs.len]|O:[openspace_overlays.len]}") + +/datum/controller/subsystem/openturf/Initialize(timeofday) + // Flush the queue. + fire(FALSE, TRUE) + ..() + +/datum/controller/subsystem/openturf/fire(resumed = FALSE, no_mc_tick = FALSE) + MC_SPLIT_TICK_INIT(2) + if (!no_mc_tick) + MC_SPLIT_TICK + + var/list/curr_turfs = queued_turfs + var/list/curr_ov = queued_overlays + + while (curr_turfs.len) + var/turf/simulated/open/T = curr_turfs[1] + curr_turfs.Cut(1,2) + + if (!istype(T) || !T.below) + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + continue + + if (!T.shadower) // If we don't have our shadower yet, create it. + T.shadower = new(T) + + // Figure out how many z-levels down we are. + var/depth = calculate_depth(T) + if (depth > OPENTURF_MAX_DEPTH) + depth = OPENTURF_MAX_DEPTH + + // Update the openturf itself. + T.appearance = T.below + + // Handle space parallax & starlight. + if (T.is_above_space()) + T.plane = PLANE_SPACE_BACKGROUND + if (config.starlight) + T.set_light(config.starlight, 0.5) + else + T.plane = OPENTURF_MAX_PLANE - depth + if (config.starlight) + T.set_light(0) + + // Add everything below us to the update queue. + for (var/thing in T.below) + var/atom/movable/object = thing + if (QDELETED(object) || object.no_z_overlay) + // Don't queue deleted stuff or stuff that doesn't need an overlay. + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + continue + + // Cache our already-calculated depth so we don't need to re-calculate it a bunch of times. + + if (!object.bound_overlay) // Generate a new overlay if the atom doesn't already have one. + object.bound_overlay = new(T) + object.bound_overlay.associated_atom = object + + var/atom/movable/openspace/overlay/OO = object.bound_overlay + + OO.depth = depth + + queued_overlays += OO + + T.updating = FALSE + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + + if (!no_mc_tick) + MC_SPLIT_TICK + + while (curr_ov.len) + var/atom/movable/openspace/overlay/OO = curr_ov[1] + curr_ov.Cut(1, 2) + + if (QDELETED(OO)) + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + continue + + if (QDELETED(OO.associated_atom)) // This shouldn't happen, but just in-case. + qdel(OO) + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + continue + + // Actually update the overlay. + OO.dir = OO.associated_atom.dir + OO.appearance = OO.associated_atom + OO.plane = OPENTURF_MAX_PLANE - OO.depth + + // Something's above us, queue it. + var/turf/oo_loc = OO.loc + if (istype(oo_loc.above)) + oo_loc.above.update_icon() + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + break + +/datum/controller/subsystem/openturf/proc/calculate_depth(turf/simulated/open/T) + . = 0 + while (T && istype(T.below, /turf/simulated/open)) + T = T.below + .++ diff --git a/code/controllers/subsystems/orbit.dm b/code/controllers/subsystems/orbit.dm new file mode 100644 index 00000000000..09cc0e8477d --- /dev/null +++ b/code/controllers/subsystems/orbit.dm @@ -0,0 +1,50 @@ +var/datum/controller/subsystem/orbit/SSorbit + +/datum/controller/subsystem/orbit + name = "Orbits" + priority = SS_PRIORITY_ORBIT + wait = 2 + flags = SS_NO_INIT|SS_TICKER + + var/list/currentrun = list() + var/list/processing = list() + +/datum/controller/subsystem/orbit/New() + NEW_SS_GLOBAL(SSorbit) + +/datum/controller/subsystem/orbit/Recover() + src.processing = SSorbit.processing + +/datum/controller/subsystem/orbit/stat_entry() + ..("P:[processing.len]") + + +/datum/controller/subsystem/orbit/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/datum/orbit/O = currentrun[currentrun.len] + currentrun.len-- + if (!O) + processing -= O + if (MC_TICK_CHECK) + return + continue + if (!O.orbiter) + qdel(O) + if (MC_TICK_CHECK) + return + continue + if (O.lastprocess >= world.time) //we already checked recently + if (MC_TICK_CHECK) + return + continue + var/targetloc = get_turf(O.orbiting) + if (targetloc != O.lastloc || O.orbiter.loc != targetloc) + O.Check(targetloc) + if (MC_TICK_CHECK) + return diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/controllers/subsystems/pai.dm similarity index 83% rename from code/modules/mob/living/silicon/pai/recruit.dm rename to code/controllers/subsystems/pai.dm index 5ac6a02b662..c5257eafae2 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/controllers/subsystems/pai.dm @@ -1,380 +1,401 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -// Recruiting observers to play as pAIs - -var/datum/paiController/paiController // Global handler for pAI candidates - -/datum/paiCandidate - var/name - var/key - var/description - var/role - var/comments - var/ready = 0 - - -/hook/startup/proc/paiControllerSetup() - paiController = new /datum/paiController() - return 1 - - -/datum/paiController - var/inquirer = null - var/list/pai_candidates = list() - var/list/asked = list() - - var/askDelay = 10 * 60 * 1 // One minute [ms * sec * min] - -/datum/paiController/Topic(href, href_list[]) - if(href_list["download"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - var/obj/item/device/paicard/card = locate(href_list["device"]) - if (!candidate in pai_candidates) - return - - if(card.pai) - return - if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) - var/mob/living/silicon/pai/pai = new(card) - if(!candidate.name) - pai.name = pick(ninja_names) - else - pai.name = candidate.name - pai.real_name = pai.name - pai.key = candidate.key - - card.setPersonality(pai) - card.looking_for_personality = 0 - - if(pai.mind) update_antag_icons(pai.mind) - - pai_candidates -= candidate - usr << browse(null, "window=findPai") - - if(href_list["new"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - var/option = href_list["option"] - var/t = "" - - switch(option) - if("name") - t = sanitizeSafe(input("Enter a name for your pAI", "pAI Name", candidate.name) as text, MAX_NAME_LEN) - if(t) - candidate.name = t - if("desc") - t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message - if(t) - candidate.description = sanitize(t) - if("role") - t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text - if(t) - candidate.role = sanitize(t) - if("ooc") - t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message - if(t) - candidate.comments = sanitize(t) - - if("save") - if (config.sql_saves) - usr.client.prefs.save_preferences() - else - candidate.savefile_save(usr) - if("load") - if (config.sql_saves) - usr.client.prefs.load_preferences() - else - candidate.savefile_load(usr) - //In case people have saved unsanitized stuff. - if(candidate.name) - candidate.name = sanitizeSafe(candidate.name, MAX_NAME_LEN) - if(candidate.description) - candidate.description = sanitize(candidate.description) - if(candidate.role) - candidate.role = sanitize(candidate.role) - if(candidate.comments) - candidate.comments = sanitize(candidate.comments) - - if("submit") - if(candidate) - candidate.ready = 1 - for(var/obj/item/device/paicard/p in world) - if(p.looking_for_personality == 1) - p.alertUpdate() - usr << browse(null, "window=paiRecruit") - return - if (config.sql_saves) - usr.client.prefs.save_preferences() - else - candidate.savefile_save(usr) - recruitWindow(usr, href_list["allow_submit"] != "0") - -/datum/paiController/proc/recruitWindow(var/mob/M as mob, allowSubmit = 1) - var/datum/paiCandidate/candidate - for(var/datum/paiCandidate/c in pai_candidates) - if(!istype(c) || !istype(M)) - break - if(c.key == M.key) - candidate = c - if(!candidate) - candidate = new /datum/paiCandidate() - candidate.key = M.key - pai_candidates.Add(candidate) - - // Load the data before displaying. - if (!config.sql_saves) - candidate.savefile_load(M) - else - M.client.prefs.load_preferences() - - var/dat = "" - dat += {" - - "} - - dat += {" - - pAI Personality Configuration -

Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name:[candidate.name] 
What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
Description:[candidate.description] 
What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
Preferred Role:[candidate.role] 
Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
OOC Comments:[candidate.comments] 
Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
-
- "} - if(allowSubmit) - dat += {" - - -
Submit Personality

- "} - dat += {" - - "} - - M << browse(dat, "window=paiRecruit;size=580x580;") - -/datum/paiController/proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) - requestRecruits(user) - var/list/available = list() - for(var/datum/paiCandidate/c in paiController.pai_candidates) - if(c.ready) - var/found = 0 - for(var/mob/dead/observer/o in player_list) - if(o.key == c.key && o.MayRespawn()) - found = 1 - if(found) - available.Add(c) - var/dat = "" - - dat += {" - - - - - - - pAI Availability List

- "} - dat += "

Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

" - - for(var/datum/paiCandidate/c in available) - dat += {" - - - - - - - - - - - - - - - - - -
Name:[c.name]
Description:[c.description]
Preferred Role:[c.role]
OOC Comments:[c.comments]
- - -
Download [c.name] -
-
- "} - - dat += {" - - - "} - - user << browse(dat, "window=findPai") - - -/datum/paiController/proc/requestRecruits(var/mob/user) - inquirer = user - for(var/mob/dead/observer/O in player_list) - if(!O.MayRespawn()) - continue - if(jobban_isbanned(O, "pAI")) - continue - if(asked.Find(O.key)) - if(world.time < asked[O.key] + askDelay) - continue - else - asked.Remove(O.key) - if(O.client) - if(BE_PAI in O.client.prefs.be_special_role) - question(O.client) - -/datum/paiController/proc/question(var/client/C) - spawn(0) - if(!C) return - asked.Add(C.key) - asked[C.key] = world.time - var/response = alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") - if(!C) return //handle logouts that happen whilst the alert is waiting for a response. - if(response == "Yes") - recruitWindow(C.mob) - else if (response == "Never for this round") - C.prefs.be_special_role -= BE_PAI +/var/datum/controller/subsystem/pai/SSpai + +/datum/controller/subsystem/pai + name = "pAI" + init_order = SS_INIT_MISC_FIRST + flags = SS_NO_FIRE + + var/list/pai_software_by_key + var/list/default_pai_software + + var/inquirer = null + var/list/pai_candidates = list() + var/list/asked = list() + + var/askDelay = 1 MINUTE + +/datum/controller/subsystem/pai/New() + NEW_SS_GLOBAL(SSpai) + LAZYINITLIST(pai_software_by_key) + LAZYINITLIST(default_pai_software) + +/datum/controller/subsystem/pai/Initialize() + // Initialize the pAI software list. + for(var/type in subtypesof(/datum/pai_software)) + var/datum/pai_software/P = new type() + if(pai_software_by_key[P.id]) + var/datum/pai_software/O = pai_software_by_key[P.id] + world << "pAI software module [P.name] has the same key as [O.name]!" + continue + pai_software_by_key[P.id] = P + if(P.default) + default_pai_software[P.id] = P + +/datum/controller/subsystem/pai/Recover() + pai_software_by_key = SSpai.pai_software_by_key + default_pai_software = SSpai.default_pai_software + +/datum/controller/subsystem/pai/Topic(href, list/href_list) + if(href_list["download"]) + var/datum/paiCandidate/candidate = locate(href_list["candidate"]) + var/obj/item/device/paicard/card = locate(href_list["device"]) + if (!candidate in pai_candidates) + return + + if(card.pai) + return + if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) + var/mob/living/silicon/pai/pai = new(card) + if(!candidate.name) + pai.name = pick(ninja_names) + else + pai.name = candidate.name + pai.real_name = pai.name + pai.key = candidate.key + + card.setPersonality(pai) + card.looking_for_personality = 0 + + if(pai.mind) update_antag_icons(pai.mind) + + pai_candidates -= candidate + usr << browse(null, "window=findPai") + + if(href_list["new"]) + var/datum/paiCandidate/candidate = locate(href_list["candidate"]) + var/option = href_list["option"] + var/t = "" + + switch(option) + if("name") + t = sanitizeSafe(input("Enter a name for your pAI", "pAI Name", candidate.name) as text, MAX_NAME_LEN) + if(t) + candidate.name = t + if("desc") + t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message + if(t) + candidate.description = sanitize(t) + if("role") + t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text + if(t) + candidate.role = sanitize(t) + if("ooc") + t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message + if(t) + candidate.comments = sanitize(t) + + if("save") + if (config.sql_saves) + usr.client.prefs.save_preferences() + else + candidate.savefile_save(usr) + if("load") + if (config.sql_saves) + usr.client.prefs.load_preferences() + else + candidate.savefile_load(usr) + //In case people have saved unsanitized stuff. + if(candidate.name) + candidate.name = sanitizeSafe(candidate.name, MAX_NAME_LEN) + if(candidate.description) + candidate.description = sanitize(candidate.description) + if(candidate.role) + candidate.role = sanitize(candidate.role) + if(candidate.comments) + candidate.comments = sanitize(candidate.comments) + + if("submit") + if(candidate) + candidate.ready = 1 + for(var/obj/item/device/paicard/p in world) + if(p.looking_for_personality == 1) + p.alertUpdate() + usr << browse(null, "window=paiRecruit") + return + if (config.sql_saves) + usr.client.prefs.save_preferences() + else + candidate.savefile_save(usr) + recruitWindow(usr, href_list["allow_submit"] != "0") + +/datum/controller/subsystem/pai/proc/recruitWindow(mob/M as mob, allowSubmit = TRUE) + var/datum/paiCandidate/candidate + for(var/datum/paiCandidate/c in pai_candidates) + if(!istype(c) || !istype(M)) + break + if(c.key == M.key) + candidate = c + if(!candidate) + candidate = new /datum/paiCandidate() + candidate.key = M.key + pai_candidates.Add(candidate) + + // Load the data before displaying. + if (!config.sql_saves) + candidate.savefile_load(M) + else + M.client.prefs.load_preferences() + + var/dat = "" + dat += {" + + "} + + dat += {" + + pAI Personality Configuration +

Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name:[candidate.name] 
What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
Description:[candidate.description] 
What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
Preferred Role:[candidate.role] 
Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
OOC Comments:[candidate.comments] 
Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
+
+ "} + if(allowSubmit) + dat += {" + + +
Submit Personality

+ "} + dat += {" + + "} + + M << browse(dat, "window=paiRecruit;size=580x580;") + +// TODO: Refactor the spaghetti above into NanoUI. + +/datum/controller/subsystem/pai/proc/findPAI(obj/item/device/paicard/p, mob/user) + requestRecruits(user) + var/list/available = list() + for(var/datum/paiCandidate/c in SSpai.pai_candidates) + if(c.ready) + var/found = 0 + for(var/mob/dead/observer/o in player_list) + if(o.key == c.key && o.MayRespawn()) + found = 1 + if(found) + available.Add(c) + var/dat = "" + + dat += {" + + + + + + + pAI Availability List

+ "} + dat += "

Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

" + + for(var/datum/paiCandidate/c in available) + dat += {" + + + + + + + + + + + + + + + + + +
Name:[c.name]
Description:[c.description]
Preferred Role:[c.role]
OOC Comments:[c.comments]
+ + +
Download [c.name] +
+
+ "} + + dat += {" + + + "} + + user << browse(dat, "window=findPai") + +/datum/controller/subsystem/pai/proc/requestRecruits(mob/user) + inquirer = user + for(var/mob/dead/observer/O in player_list) + if(!O.MayRespawn()) + continue + if(jobban_isbanned(O, "pAI")) + continue + if(asked.Find(O.key)) + if(world.time < asked[O.key] + askDelay) + continue + else + asked.Remove(O.key) + if(O.client) + if(BE_PAI in O.client.prefs.be_special_role) + question(O.client) + +/datum/controller/subsystem/pai/proc/question(client/C) + set waitfor = FALSE + + if(!C) + return + asked.Add(C.key) + asked[C.key] = world.time + var/response = alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") + if(!C) return //handle logouts that happen whilst the alert is waiting for a response. + if(response == "Yes") + recruitWindow(C.mob) + else if (response == "Never for this round") + C.prefs.be_special_role -= BE_PAI + +/datum/paiCandidate + var/name + var/key + var/description + var/role + var/comments + var/ready = 0 diff --git a/code/controllers/subsystems/parallax.dm b/code/controllers/subsystems/parallax.dm new file mode 100644 index 00000000000..5b96f9db022 --- /dev/null +++ b/code/controllers/subsystems/parallax.dm @@ -0,0 +1,25 @@ +#define GRID_WIDTH 3 + +var/datum/controller/subsystem/parallax/SSparallax + +/datum/controller/subsystem/parallax + name = "Space Parallax" + init_order = SS_INIT_PARALLAX + flags = SS_NO_FIRE + + var/list/parallax_on_clients = list() + var/list/parallax_icon[(GRID_WIDTH**2)*3] + var/space_color = "#050505" + var/parallax_initialized = 0 + +/datum/controller/subsystem/parallax/New() + NEW_SS_GLOBAL(SSparallax) + +/datum/controller/subsystem/parallax/Initialize(timeofday) + create_global_parallax_icons() + ..(timeofday, TRUE) + +/datum/controller/subsystem/parallax/stat_entry() + ..("C:[parallax_on_clients.len]") + +#undef GRID_WIDTH diff --git a/code/controllers/subsystems/processing/airflow.dm b/code/controllers/subsystems/processing/airflow.dm new file mode 100644 index 00000000000..4d129e41a7f --- /dev/null +++ b/code/controllers/subsystems/processing/airflow.dm @@ -0,0 +1,157 @@ +/var/datum/controller/subsystem/processing/airflow/SSairflow + +#define CLEAR_OBJECT(TARGET) \ + processing -= TARGET; \ + TARGET.airflow_dest = null; \ + TARGET.airflow_speed = 0; \ + TARGET.airflow_time = 0; \ + TARGET.airflow_skip_speedcheck = FALSE; \ + if (TARGET.airflow_od) { \ + TARGET.density = 0; \ + } + +/datum/controller/subsystem/processing/airflow + name = "Airflow" + wait = 1 + flags = SS_NO_INIT + priority = SS_PRIORITY_AIRFLOW + +/datum/controller/subsystem/processing/airflow/New() + NEW_SS_GLOBAL(SSairflow) + +/datum/controller/subsystem/processing/airflow/fire(resumed = FALSE) + if (!resumed) + currentrun = processing.Copy() // Defined in parent. + + var/list/curr = currentrun // Defined in parent. + + while (curr.len) + var/atom/movable/target = curr[curr.len] + curr.len-- + + if (target.airflow_speed <= 0) + CLEAR_OBJECT(target) + if (MC_TICK_CHECK) + return + continue + + if (target.airflow_process_delay > 0) + target.airflow_process_delay -= 1 + if (MC_TICK_CHECK) + return + continue + else if (target.airflow_process_delay) + target.airflow_process_delay = 0 + + target.airflow_speed = min(target.airflow_speed, 15) + target.airflow_speed -= vsc.airflow_speed_decay + if (!target.airflow_skip_speedcheck) + if (target.airflow_speed > 7) + if (target.airflow_time++ >= target.airflow_speed - 7) + if (target.airflow_od) + target.density = 0 + target.airflow_skip_speedcheck = TRUE + + if (MC_TICK_CHECK) + return + continue + else + if (target.airflow_od) + target.density = 0 + target.airflow_process_delay = max(1, 10 - (target.airflow_speed + 3)) + target.airflow_skip_speedcheck = TRUE + + if (MC_TICK_CHECK) + return + continue + + target.airflow_skip_speedcheck = FALSE + + if (target.airflow_od) + target.density = 1 + + if (!target.airflow_dest || target.loc == target.airflow_dest) + target.airflow_dest = locate(min(max(target.x + target.airflow_xo, 1), world.maxx), min(max(target.y + target.airflow_yo, 1), world.maxy), target.z) + + if ((target.x == 1) || (target.x == world.maxx) || (target.y == 1) || (target.y == world.maxy)) + CLEAR_OBJECT(target) + if (MC_TICK_CHECK) + return + continue + + if (!isturf(target.loc)) + CLEAR_OBJECT(target) + if (MC_TICK_CHECK) + return + continue + + step_towards(target, target.airflow_dest) + if (ismob(target) && target:client) + target:setMoveCooldown(vsc.airflow_mob_slowdown) + + if (MC_TICK_CHECK) + return + +#undef CLEAR_OBJECT + +/atom/movable + var/tmp/airflow_xo + var/tmp/airflow_yo + var/tmp/airflow_od + var/tmp/airflow_process_delay + var/tmp/airflow_skip_speedcheck + +/atom/movable/proc/prepare_airflow(n) + if (!airflow_dest || airflow_speed < 0 || last_airflow > world.time - vsc.airflow_delay) + return FALSE + if (airflow_speed) + airflow_speed = n / max(get_dist(src, airflow_dest), 1) + return FALSE + + if (airflow_dest == loc) + step_away(src, loc) + + if (!src.AirflowCanMove(n)) + return FALSE + + if (ismob(src)) + src << span("danger", "You are pushed away by airflow!") + + last_airflow = world.time + var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2) + + if (airflow_falloff < 1) + airflow_dest = null + return FALSE + + airflow_speed = min(max(n * (9 / airflow_falloff), 1), 9) + + airflow_od = 0 + + if (!density) + density = 1 + airflow_od = 1 + + return TRUE + +/atom/movable/proc/GotoAirflowDest(n) + if (!prepare_airflow(n)) + return + + airflow_xo = airflow_dest.x - src.x + airflow_yo = airflow_dest.y - src.y + + airflow_dest = null + + SSairflow.processing += src + +/atom/movable/proc/RepelAirflowDest(n) + if (!prepare_airflow(n)) + return + + airflow_xo = -(airflow_dest.x - src.x) + airflow_yo = -(airflow_dest.y - src.y) + + airflow_dest = null + + SSairflow.processing += src diff --git a/code/controllers/subsystems/processing/calamity.dm b/code/controllers/subsystems/processing/calamity.dm new file mode 100644 index 00000000000..9fdeb90bd97 --- /dev/null +++ b/code/controllers/subsystems/processing/calamity.dm @@ -0,0 +1,10 @@ +// This is a separate processor so the MC can schedule singuloth/tesla/Nar-sie independent from other objects. + +var/datum/controller/subsystem/processing/SScalamity +/datum/controller/subsystem/processing/calamity + name = "Calamity" + flags = SS_NO_INIT | SS_POST_FIRE_TIMING + priority = SS_PRIORITY_CALAMITY + +/datum/controller/subsystem/processing/calamity/New() + NEW_SS_GLOBAL(SScalamity) diff --git a/code/controllers/subsystems/processing/disease.dm b/code/controllers/subsystems/processing/disease.dm new file mode 100644 index 00000000000..bf902dfe16b --- /dev/null +++ b/code/controllers/subsystems/processing/disease.dm @@ -0,0 +1,9 @@ +var/datum/controller/subsystem/processing/disease/SSdisease + +/datum/controller/subsystem/processing/disease + name = "Diseases" + flags = SS_KEEP_TIMING | SS_NO_INIT + priority = SS_PRIORITY_DISEASE + +/datum/controller/subsystem/processing/disease/New() + NEW_SS_GLOBAL(SSdisease) diff --git a/code/controllers/subsystems/processing/disposals.dm b/code/controllers/subsystems/processing/disposals.dm new file mode 100644 index 00000000000..a2b65340ed5 --- /dev/null +++ b/code/controllers/subsystems/processing/disposals.dm @@ -0,0 +1,14 @@ +/var/datum/controller/subsystem/processing/disposals/SSdisposals + +/datum/controller/subsystem/processing/disposals + name = "Disposals" + wait = 1 // deciseconds + flags = SS_NO_INIT | SS_BACKGROUND + priority = SS_PRIORITY_DISPOSALS + + // Reference list for disposal sort junctions. Filled by sorting junctions' initialize(). + var/list/tagger_locations + +/datum/controller/subsystem/processing/disposals/New() + NEW_SS_GLOBAL(SSdisposals) + LAZYINITLIST(tagger_locations) diff --git a/code/controllers/subsystems/processing/fast_process.dm b/code/controllers/subsystems/processing/fast_process.dm new file mode 100644 index 00000000000..692e451b529 --- /dev/null +++ b/code/controllers/subsystems/processing/fast_process.dm @@ -0,0 +1,10 @@ +/var/datum/controller/subsystem/processing/fast/SSfast_process + +// Not really much to it, literally just a faster-ticking SSprocessing. + +/datum/controller/subsystem/processing/fast + name = "Processing (Fast)" + wait = 5 + +/datum/controller/subsystem/processing/fast/New() + NEW_SS_GLOBAL(SSfast_process) diff --git a/code/controllers/subsystems/processing/modifiers.dm b/code/controllers/subsystems/processing/modifiers.dm new file mode 100644 index 00000000000..746656a79f7 --- /dev/null +++ b/code/controllers/subsystems/processing/modifiers.dm @@ -0,0 +1,9 @@ +var/datum/controller/subsystem/processing/modifiers/SSmodifiers +/datum/controller/subsystem/processing/modifiers + name = "Modifiers" + wait = 1 SECOND + flags = SS_NO_INIT + priority = SS_PRIORITY_MODIFIER + +/datum/controller/subsystem/processing/modifiers/New() + NEW_SS_GLOBAL(SSmodifiers) diff --git a/code/controllers/subsystems/processing/overlays.dm b/code/controllers/subsystems/processing/overlays.dm new file mode 100644 index 00000000000..68b2e4372ad --- /dev/null +++ b/code/controllers/subsystems/processing/overlays.dm @@ -0,0 +1,209 @@ +var/datum/controller/subsystem/processing/overlays/SSoverlays + +/datum/controller/subsystem/processing/overlays + name = "Overlay" + flags = SS_TICKER|SS_FIRE_IN_LOBBY + wait = 1 + priority = SS_PRIORITY_OVERLAY + init_order = SS_INIT_OVERLAY + + stat_tag = "Ov" + currentrun = null + var/list/overlay_icon_state_caches + var/list/overlay_icon_cache + var/initialized = FALSE + +/datum/controller/subsystem/processing/overlays/New() + NEW_SS_GLOBAL(SSoverlays) + LAZYINITLIST(overlay_icon_state_caches) + LAZYINITLIST(overlay_icon_cache) + +/datum/controller/subsystem/processing/overlays/Initialize() + initialized = TRUE + Flush() + ..() + +/datum/controller/subsystem/processing/overlays/Recover() + overlay_icon_state_caches = SSoverlays.overlay_icon_state_caches + overlay_icon_cache = SSoverlays.overlay_icon_cache + processing = SSoverlays.processing + +/datum/controller/subsystem/processing/overlays/fire(resumed = FALSE, mc_check = TRUE) + while(processing.len) + var/atom/thing = processing[processing.len] + processing.len-- + if(thing) + thing.compile_overlays(FALSE) + if(mc_check) + if(MC_TICK_CHECK) + break + else + CHECK_TICK + +/datum/controller/subsystem/processing/overlays/proc/Flush() + if(processing.len) + log_ss("overlays", "Flushing [processing.len] overlays.") + fire(mc_check = FALSE) //pair this thread up with the MC to get extra compile time + +/atom/proc/compile_overlays() + if(LAZYLEN(priority_overlays) && LAZYLEN(our_overlays)) + overlays = our_overlays + priority_overlays + else if(LAZYLEN(our_overlays)) + overlays = our_overlays + else if(LAZYLEN(priority_overlays)) + overlays = priority_overlays + else + overlays.Cut() + + overlay_queued = FALSE + +/atom/movable/compile_overlays() + ..() + UPDATE_OO_IF_PRESENT + +/turf/compile_overlays() + ..() + if (istype(above)) + above.update_icon() + +/proc/iconstate2appearance(icon, iconstate) + var/static/image/stringbro = new() + var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches + var/list/cached_icon = icon_states_cache[icon] + if (cached_icon) + var/cached_appearance = cached_icon["[iconstate]"] + if (cached_appearance) + return cached_appearance + stringbro.icon = icon + stringbro.icon_state = iconstate + if (!cached_icon) //not using the macro to save an associated lookup + cached_icon = list() + icon_states_cache[icon] = cached_icon + var/cached_appearance = stringbro.appearance + cached_icon["[iconstate]"] = cached_appearance + return cached_appearance + +/proc/icon2appearance(icon) + var/static/image/iconbro = new() + var/list/icon_cache = SSoverlays.overlay_icon_cache + . = icon_cache[icon] + if (!.) + iconbro.icon = icon + . = iconbro.appearance + icon_cache[icon] = . + +/atom/proc/build_appearance_list(new_overlays) + var/static/image/appearance_bro = new() + if (!islist(new_overlays)) + new_overlays = list(new_overlays) + else + listclearnulls(new_overlays) + for (var/i in 1 to length(new_overlays)) + var/image/cached_overlay = new_overlays[i] + if (istext(cached_overlay)) + new_overlays[i] = iconstate2appearance(icon, cached_overlay) + else if(isicon(cached_overlay)) + new_overlays[i] = icon2appearance(cached_overlay) + else //image probable + appearance_bro.appearance = cached_overlay + if(!ispath(cached_overlay)) + appearance_bro.dir = cached_overlay.dir + new_overlays[i] = appearance_bro.appearance + return new_overlays + +#define NOT_QUEUED_ALREADY (!(overlay_queued)) +#define QUEUE_FOR_COMPILE overlay_queued = TRUE; SSoverlays.processing += src; +/atom/proc/cut_overlays(priority = FALSE) + var/list/cached_overlays = our_overlays + var/list/cached_priority = priority_overlays + + var/need_compile = FALSE + + if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays + cached_overlays.Cut() //clear regular overlays + need_compile = TRUE + + if(priority && LAZYLEN(cached_priority)) + cached_priority.Cut() + need_compile = TRUE + + if(NOT_QUEUED_ALREADY && need_compile) + QUEUE_FOR_COMPILE + +/atom/proc/cut_overlay(list/overlays, priority) + if(!overlays) + return + + overlays = build_appearance_list(overlays) + + var/list/cached_overlays = our_overlays //sanic + var/list/cached_priority = priority_overlays + var/init_o_len = LAZYLEN(cached_overlays) + var/init_p_len = LAZYLEN(cached_priority) //starter pokemon + + LAZYREMOVE(cached_overlays, overlays) + if(priority) + LAZYREMOVE(cached_priority, overlays) + + if(NOT_QUEUED_ALREADY && ((init_o_len != LAZYLEN(cached_priority)) || (init_p_len != LAZYLEN(cached_overlays)))) + QUEUE_FOR_COMPILE + +/atom/proc/add_overlay(list/overlays, priority = FALSE) + if(!overlays) + return + + overlays = build_appearance_list(overlays) + + LAZYINITLIST(our_overlays) //always initialized after this point + LAZYINITLIST(priority_overlays) + + var/list/cached_overlays = our_overlays //sanic + var/list/cached_priority = priority_overlays + var/init_o_len = cached_overlays.len + var/init_p_len = cached_priority.len //starter pokemon + var/need_compile + + if(priority) + cached_priority += overlays //or in the image. Can we use [image] = image? + need_compile = init_p_len != cached_priority.len + else + cached_overlays += overlays + need_compile = init_o_len != cached_overlays.len + + if(NOT_QUEUED_ALREADY && need_compile) //have we caught more pokemon? + QUEUE_FOR_COMPILE + +/atom/proc/copy_overlays(atom/other, cut_old = FALSE) //copys our_overlays from another atom + if(!other) + if(cut_old) + cut_overlays() + return + + var/list/cached_other = other.our_overlays + if(cached_other) + if(cut_old) + our_overlays = cached_other.Copy() + else + our_overlays |= cached_other + if(NOT_QUEUED_ALREADY) + QUEUE_FOR_COMPILE + else if(cut_old) + cut_overlays() + +#undef NOT_QUEUED_ALREADY +#undef QUEUE_FOR_COMPILE + +//TODO: Better solution for these? +/image/proc/add_overlay(x) + overlays += x + +/image/proc/cut_overlay(x) + overlays -= x + +/image/proc/cut_overlays(x) + overlays.Cut() + +/atom + var/tmp/list/our_overlays //our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate + var/tmp/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4. + var/tmp/overlay_queued diff --git a/code/controllers/subsystems/processing/pipenet.dm b/code/controllers/subsystems/processing/pipenet.dm new file mode 100644 index 00000000000..93affaacae4 --- /dev/null +++ b/code/controllers/subsystems/processing/pipenet.dm @@ -0,0 +1,16 @@ +var/datum/controller/subsystem/processing/pipenet/SSpipenet +/datum/controller/subsystem/processing/pipenet + name = "Pipenet" + init_order = SS_INIT_PIPENET + priority = SS_PRIORITY_MACHINERY + flags = 0 + +/datum/controller/subsystem/processing/pipenet/New() + NEW_SS_GLOBAL(SSpipenet) + +/datum/controller/subsystem/processing/pipenet/Initialize(timeofday) + for (var/obj/machinery/atmospherics/machine in machines) + machine.build_network() + + CHECK_TICK + ..() diff --git a/code/modules/hydroponics/seed_controller.dm b/code/controllers/subsystems/processing/plants.dm similarity index 57% rename from code/modules/hydroponics/seed_controller.dm rename to code/controllers/subsystems/processing/plants.dm index 89cb299f5f6..2c18ddc12b1 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/controllers/subsystems/processing/plants.dm @@ -1,53 +1,23 @@ -// Attempts to offload processing for the spreading plants from the MC. -// Processes vines/spreading plants. +/var/datum/controller/subsystem/processing/plants/SSplants -#define PLANTS_PER_TICK 500 // Cap on number of plant segments processed. -#define PLANT_TICK_TIME 75 // Number of ticks between the plant processor cycling. +/datum/controller/subsystem/processing/plants + name = "Seeds & Plants" + flags = 0 // Override parent's flags. + wait = 75 + init_order = SS_INIT_SEEDS + priority = SS_PRIORITY_PLANTS -// Debug for testing seed genes. -/client/proc/show_plant_genes() - set category = "Debug" - set name = "Show Plant Genes" - set desc = "Prints the round's plant gene masks." - - if(!holder) return - - if(!plant_controller || !plant_controller.gene_tag_masks) - usr << "Gene masks not set." - return - - for(var/mask in plant_controller.gene_tag_masks) - usr << "[mask]: [plant_controller.gene_tag_masks[mask]]" - -var/global/datum/controller/plants/plant_controller // Set in New(). - -/datum/controller/plants - - var/plants_per_tick = PLANTS_PER_TICK - var/plant_tick_time = PLANT_TICK_TIME var/list/product_descs = list() // Stores generated fruit descs. - var/list/plant_queue = list() // All queued plants. var/list/seeds = list() // All seed data stored here. var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. var/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds. var/list/plant_sprites = list() // List of all harvested product sprites. var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. - var/processing = 0 // Off/on. -/datum/controller/plants/New() - if(plant_controller && plant_controller != src) - log_debug("Rebuilding plant controller.") - qdel(plant_controller) - plant_controller = src - setup() - process() - -// Predefined/roundstart varieties use a string key to make it -// easier to grab the new variety when mutating. Post-roundstart -// and mutant varieties use their uid converted to a string instead. -// Looks like shit but it's sort of necessary. -/datum/controller/plants/proc/setup() +/datum/controller/subsystem/processing/plants/New() + NEW_SS_GLOBAL(SSplants) +/datum/controller/subsystem/processing/plants/Initialize(timeofday) // Build the icon lists. for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi')) var/split = findtext(icostate,"-") @@ -95,12 +65,23 @@ var/global/datum/controller/plants/plant_controller // Set in New(). used_masks += gene_mask plant_traits -= gene_tag gene_tag_masks[gene_tag] = gene_mask + + ..() + +/datum/controller/subsystem/processing/plants/Recover() + if (istype(SSplants)) + src.product_descs = SSplants.product_descs + src.seeds = SSplants.seeds + src.gene_tag_masks = SSplants.gene_tag_masks + src.plant_icon_cache = SSplants.plant_icon_cache + src.plant_sprites = SSplants.plant_sprites + src.plant_product_sprites = SSplants.plant_product_sprites // Proc for creating a random seed type. -/datum/controller/plants/proc/create_random_seed(var/survive_on_station) +/datum/controller/subsystem/processing/plants/proc/create_random_seed(var/survive_on_station) var/datum/seed/seed = new() seed.randomize() - seed.uid = plant_controller.seeds.len + 1 + seed.uid = seeds.len + 1 seed.name = "[seed.uid]" seeds[seed.name] = seed @@ -119,32 +100,17 @@ var/global/datum/controller/plants/plant_controller // Set in New(). seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200) return seed -/datum/controller/plants/proc/process() - processing = 1 - spawn(0) - set background = 1 - var/processed = 0 - while(1) - if(!processing) - sleep(plant_tick_time) - else - processed = 0 - if(plant_queue.len) - var/target_to_process = min(plant_queue.len,plants_per_tick) - for(var/x=0;x pda_msg_amt) + pda_msg_amt = MS.pda_msgs.len + if(MS.rc_msgs.len > rc_msg_amt) + rc_msg_amt = MS.rc_msgs.len + + feedback_set_details("radio_usage","") + + feedback_add_details("radio_usage","COM-[msg_common.len]") + feedback_add_details("radio_usage","SCI-[msg_science.len]") + feedback_add_details("radio_usage","HEA-[msg_command.len]") + feedback_add_details("radio_usage","MED-[msg_medical.len]") + feedback_add_details("radio_usage","ENG-[msg_engineering.len]") + feedback_add_details("radio_usage","SEC-[msg_security.len]") + feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]") + feedback_add_details("radio_usage","SYN-[msg_syndicate.len]") + feedback_add_details("radio_usage","CAR-[msg_cargo.len]") + feedback_add_details("radio_usage","SRV-[msg_service.len]") + feedback_add_details("radio_usage","OTH-[messages.len]") + feedback_add_details("radio_usage","PDA-[pda_msg_amt]") + feedback_add_details("radio_usage","RC-[rc_msg_amt]") + + + feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set. + +// Called on world reboot. +/datum/controller/subsystem/statistics/Shutdown() + if(!feedback) + return + + if (!config.sql_enabled || !config.sql_stats) + return + + round_end_data_gathering() //round_end time logging and some other data processing + establish_db_connection(dbcon) + if(!dbcon.IsConnected()) + return + + for(var/datum/feedback_variable/FV in feedback) + var/sql = "INSERT INTO ss13_feedback VALUES (null, Now(), \"[game_id]\", \"[FV.get_variable()]\", [FV.get_value()], \"[FV.get_details()]\")" + var/DBQuery/query_insert = dbcon.NewQuery(sql) + query_insert.Execute() + + +// Sanitize inputs to avoid SQL injection attacks +/proc/sql_sanitize_text(var/text) + text = replacetext(text, "'", "''") + text = replacetext(text, ";", "") + text = replacetext(text, "&", "") + return text + +/proc/feedback_set(var/variable,var/value) + if(!SSfeedback) + return + + variable = sql_sanitize_text(variable) + + var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable) + + if(!FV) return + + FV.set_value(value) + +/proc/feedback_inc(var/variable,var/value) + if(!SSfeedback) return + + variable = sql_sanitize_text(variable) + + var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable) + + if(!FV) return + + FV.inc(value) + +/proc/feedback_dec(var/variable,var/value) + if(!SSfeedback) return + + variable = sql_sanitize_text(variable) + + var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable) + + if(!FV) return + + FV.dec(value) + +/proc/feedback_set_details(var/variable,var/details) + if(!SSfeedback) return + + variable = sql_sanitize_text(variable) + details = sql_sanitize_text(details) + + var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable) + + if(!FV) return + + FV.set_details(details) + +/proc/feedback_add_details(var/variable,var/details) + if(!SSfeedback) return + + variable = sql_sanitize_text(variable) + details = sql_sanitize_text(details) + + var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable) + + if(!FV) return + + FV.add_details(details) + +/proc/sql_report_death(var/mob/living/carbon/human/H) + if(!config.sql_enabled || !config.sql_stats) + return + if(!H) + return + if(!H.key || !H.mind) + return + + var/area/placeofdeath = get_area(H) + var/podname = placeofdeath ? placeofdeath.name : "Unknown area" + + var/sqlname = sanitizeSQL(H.real_name) + var/sqlkey = sanitizeSQL(H.key) + var/sqlpod = sanitizeSQL(podname) + var/sqlspecial = sanitizeSQL(H.mind.special_role) + var/sqljob = sanitizeSQL(H.mind.assigned_role) + var/laname + var/lakey + if(H.lastattacker) + laname = sanitizeSQL(H.lastattacker:real_name) + lakey = sanitizeSQL(H.lastattacker:key) + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/coord = "[H.x], [H.y], [H.z]" + //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])" + establish_db_connection(dbcon) + if(!dbcon.IsConnected()) + log_game("SQL ERROR during death reporting. Failed to connect.") + else + var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')") + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") + + +/proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H) + if(!config.sql_enabled || !config.sql_stats) + return + if(!H) + return + if(!H.key || !H.mind) + return + + var/area/placeofdeath = get_area(H) + var/podname = placeofdeath ? placeofdeath.name : "Unknown area" + + var/sqlname = sanitizeSQL(H.real_name) + var/sqlkey = sanitizeSQL(H.key) + var/sqlpod = sanitizeSQL(podname) + var/sqlspecial = sanitizeSQL(H.mind.special_role) + var/sqljob = sanitizeSQL(H.mind.assigned_role) + var/laname + var/lakey + if(H.lastattacker) + laname = sanitizeSQL(H.lastattacker:real_name) + lakey = sanitizeSQL(H.lastattacker:key) + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/coord = "[H.x], [H.y], [H.z]" + //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])" + establish_db_connection(dbcon) + if(!dbcon.IsConnected()) + log_game("SQL ERROR during death reporting. Failed to connect.") + else + var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')") + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") diff --git a/code/controllers/subsystems/sun.dm b/code/controllers/subsystems/sun.dm new file mode 100644 index 00000000000..aefa5ca5b97 --- /dev/null +++ b/code/controllers/subsystems/sun.dm @@ -0,0 +1,65 @@ +var/datum/controller/subsystem/sun/sun + +/datum/controller/subsystem/sun + name = "Sun" + flags = SS_NO_INIT | SS_POST_FIRE_TIMING | SS_BACKGROUND + wait = 1 MINUTE + priority = SS_PRIORITY_SUN + + var/angle + var/dx + var/dy + var/rate + var/list/solars // for debugging purposes, references solars_list at the constructor + var/tmp/list/updating_solars + var/solar_next_update // last time the sun position was checked and adjusted + +/datum/controller/subsystem/sun/New() + NEW_SS_GLOBAL(sun) + LAZYINITLIST(solars) + + rate = rand(50,200)/100 // 50% - 200% of standard rotation + if(prob(50)) // same chance to rotate clockwise than counter-clockwise + rate = -rate + solar_next_update = world.time // init the timer + angle = rand (0,360) + +/datum/controller/subsystem/sun/stat_entry() + ..("A:[angle] R:[rate] S:[LAZYLEN(solars)]") + +/datum/controller/subsystem/sun/fire(resumed = 0) + if (!resumed) + angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate + + // now calculate and cache the (dx,dy) increments for line drawing + + var/s = sin(angle) + var/c = cos(angle) + + // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)" + // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions + + if( abs(s) < abs(c)) + + dx = s / abs(c) + dy = c / abs(c) + + else + dx = s / abs(s) + dy = c / abs(s) + + updating_solars = solars.Copy() + + //now tell the solar control computers to update their status and linked devices + while (updating_solars.len) + var/obj/machinery/power/solar_control/SC = updating_solars[updating_solars.len] + updating_solars.len-- + + if (QDELETED(SC) || !SC.powernet) + solars -= SC + continue + + SC.update() + + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm new file mode 100644 index 00000000000..4096e36a8af --- /dev/null +++ b/code/controllers/subsystems/supply.dm @@ -0,0 +1,190 @@ +//Config stuff +#define SUPPLY_DOCKZ 2 //Z-level of the Dock. +#define SUPPLY_STATIONZ 1 //Z-level of the Station. +#define SUPPLY_STATION_AREATYPE /area/supply/station //Type of the supply shuttle area for station +#define SUPPLY_DOCK_AREATYPE /area/supply/dock //Type of the supply shuttle area for dock + +var/datum/controller/subsystem/cargo/SScargo + +/datum/controller/subsystem/cargo + name = "Cargo" + wait = 30 SECONDS + flags = SS_NO_TICK_CHECK + init_order = SS_INIT_CARGO + + //supply points + var/points = 50 + var/points_per_process = 1 + var/points_per_slip = 2 + var/points_per_crate = 5 + var/points_per_platinum = 5 // 5 points per sheet + var/points_per_phoron = 5 + //control + var/ordernum + var/list/shoppinglist = list() + var/list/requestlist = list() + var/list/supply_packs = list() + //shuttle movement + var/movetime = 1200 + var/datum/shuttle/ferry/supply/shuttle + +/datum/controller/subsystem/cargo/Recover() + src.points = SScargo.points + src.shoppinglist = SScargo.shoppinglist + src.requestlist = SScargo.requestlist + src.supply_packs = SScargo.supply_packs + src.shuttle = SScargo.shuttle + +/datum/controller/subsystem/cargo/Initialize(timeofday) + ordernum = rand(1,9000) + + for (var/typepath in subtypesof(/datum/supply_packs)) + var/datum/supply_packs/P = new typepath() + supply_packs[P.name] = P + + var/datum/cargospawner/spawner = new + spawner.start() + qdel(spawner) + ..() + +/datum/controller/subsystem/cargo/New() + NEW_SS_GLOBAL(SScargo) + +/datum/controller/subsystem/cargo/fire() + points += points_per_process + +//To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types. +/datum/controller/subsystem/cargo/proc/forbidden_atoms_check(atom/A) + if(istype(A,/mob/living)) + return 1 + if(istype(A,/obj/item/weapon/disk/nuclear)) + return 1 + if(istype(A,/obj/machinery/nuclearbomb)) + return 1 + if(istype(A,/obj/item/device/radio/beacon)) + return 1 + + for(var/i=1, i<=A.contents.len, i++) + var/atom/B = A.contents[i] + if(.(B)) + return 1 + + //Sellin +/datum/controller/subsystem/cargo/proc/sell() + var/area/area_shuttle = shuttle.get_location_area() + if(!area_shuttle) return + + var/phoron_count = 0 + var/plat_count = 0 + + for(var/atom/movable/MA in area_shuttle) + if(MA.anchored) continue + + // Must be in a crate! + if(istype(MA,/obj/structure/closet/crate)) + callHook("sell_crate", list(MA, area_shuttle)) + + points += points_per_crate + var/find_slip = 1 + + for(var/atom in MA) + // Sell manifests + var/atom/A = atom + if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) + var/obj/item/weapon/paper/manifest/slip = A + if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense + points += points_per_slip + find_slip = 0 + continue + + // Sell phoron and platinum + if(istype(A, /obj/item/stack)) + var/obj/item/stack/P = A + switch(P.get_material_name()) + if("phoron") phoron_count += P.get_amount() + if("platinum") plat_count += P.get_amount() + qdel(MA) + + if(phoron_count) + points += phoron_count * points_per_phoron + + if(plat_count) + points += plat_count * points_per_platinum + +//Buyin +/datum/controller/subsystem/cargo/proc/buy() + if(!shoppinglist.len) return + + var/area/area_shuttle = shuttle.get_location_area() + if(!area_shuttle) return + + var/list/clear_turfs = list() + + for(var/turf/T in area_shuttle) + if(T.density) continue + var/contcount + for(var/atom/A in T.contents) + if(!A.simulated) + continue + contcount++ + if(contcount) + continue + clear_turfs += T + + for(var/S in shoppinglist) + if(!clear_turfs.len) break + var/i = rand(1,clear_turfs.len) + var/turf/pickedloc = clear_turfs[i] + clear_turfs.Cut(i,i+1) + + var/datum/supply_order/SO = S + var/datum/supply_packs/SP = SO.object + + var/obj/A = new SP.containertype(pickedloc) + A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" + + //supply manifest generation begin + + var/obj/item/weapon/paper/manifest/slip + if(!SP.contraband) + slip = new /obj/item/weapon/paper/manifest(A) + slip.is_copy = 0 + slip.info = "

[command_name()] Shipping Manifest



" + slip.info +="Order #[SO.ordernum]
" + slip.info +="Destination: [station_name]
" + slip.info +="[shoppinglist.len] PACKAGES IN THIS SHIPMENT
" + slip.info +="CONTENTS:
    " + + //spawn the stuff, finish generating the manifest while you're at it + if(SP.access) + if(isnum(SP.access)) + A.req_access = list(SP.access) + else if(islist(SP.access)) + var/list/L = SP.access // access var is a plain var, we need a list + A.req_access = L.Copy() + else + world << "Supply pack with invalid access restriction [SP.access] encountered!" + + var/list/contains + if(istype(SP,/datum/supply_packs/randomised)) + var/datum/supply_packs/randomised/SPR = SP + contains = list() + if(SPR.contains.len) + for(var/j=1,j<=SPR.num_contained,j++) + contains += pick(SPR.contains) + else + contains = SP.contains + + for(var/typepath in contains) + if(!typepath) continue + var/atom/B2 = new typepath(A) + if(SP.amount && B2:amount) B2:amount = SP.amount + if(slip) slip.info += "
  • [B2.name]
  • " //add the item to the manifest + + //manifest finalisation + if(slip) + slip.info += "

" + slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" + + shoppinglist.Cut() + return diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm new file mode 100644 index 00000000000..c10a2f26b01 --- /dev/null +++ b/code/controllers/subsystems/ticker.dm @@ -0,0 +1,553 @@ +#define LOBBY_TIME 180 + +var/datum/controller/subsystem/ticker/SSticker + +/datum/controller/subsystem/ticker + // -- Subsystem stuff -- + name = "Game Ticker" + + priority = SS_PRIORITY_TICKER + flags = SS_NO_TICK_CHECK | SS_FIRE_IN_LOBBY + init_order = SS_INIT_LOBBY + + wait = 1 SECOND + + // -- Gameticker -- + var/const/restart_timeout = 600 + var/current_state = GAME_STATE_PREGAME + + var/hide_mode = 0 + var/datum/game_mode/mode = null + var/post_game = 0 + var/event_time = null + var/event = 0 + + var/login_music // music played in pregame lobby + + var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking. + + var/Bible_icon_state // icon_state the chaplain has chosen for his bible + var/Bible_item_state // item_state the chaplain has chosen for his bible + var/Bible_name // name of the bible + var/Bible_deity_name + + var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders + + var/list/syndicate_coalition = list() // list of traitor-compatible factions + var/list/factions = list() // list of all factions + var/list/availablefactions = list() // list of factions with openings + + var/pregame_timeleft = 0 + + var/delay_end = 0 //if set to nonzero, the round will not restart on it's own + + var/triai = 0 //Global holder for Triumvirate + var/tipped = 0 //Did we broadcast the tip of the day yet? + var/selected_tip // What will be the tip of the day? + + var/round_end_announced = 0 // Spam Prevention. Announce round end only once. + + //station_explosion used to be a variable for every mob's hud. Which was a waste! + //Now we have a general cinematic centrally held within the gameticker....far more efficient! + var/obj/screen/cinematic = null + + var/list/possible_lobby_tracks = list( + 'sound/music/space.ogg', + 'sound/music/traitor.ogg', + 'sound/music/title2.ogg', + 'sound/music/clouds.s3m', + 'sound/music/space_oddity.ogg' + ) + + var/lobby_ready = FALSE + var/is_revote = FALSE + +/datum/controller/subsystem/ticker/New() + NEW_SS_GLOBAL(SSticker) + +/datum/controller/subsystem/ticker/Initialize(timeofday) + pregame() + +/datum/controller/subsystem/ticker/stat_entry() + var/state = "" + switch (current_state) + if (GAME_STATE_PREGAME) + state = "PRE" + if (GAME_STATE_SETTING_UP) + state = "SETUP" + if (GAME_STATE_PLAYING) + state = "PLAY" + if (GAME_STATE_FINISHED) + state = "FIN" + else + state = "UNK" + ..("State: [state]") + +/datum/controller/subsystem/ticker/Recover() + // Copy stuff over so we don't lose any state. + current_state = SSticker.current_state + + hide_mode = SSticker.hide_mode + mode = SSticker.mode + post_game = SSticker.post_game + event_time = SSticker.event_time + event = SSticker.event + + login_music = SSticker.login_music + + minds = SSticker.minds + + Bible_icon_state = SSticker.Bible_icon_state + Bible_item_state = SSticker.Bible_item_state + Bible_deity_name = SSticker.Bible_deity_name + + random_players = SSticker.random_players + + syndicate_coalition = SSticker.syndicate_coalition + factions = SSticker.factions + availablefactions = SSticker.availablefactions + + pregame_timeleft = SSticker.pregame_timeleft + + delay_end = SSticker.delay_end + + triai = SSticker.triai + tipped = SSticker.tipped + selected_tip = SSticker.selected_tip + + round_end_announced = SSticker.round_end_announced + + cinematic = SSticker.cinematic + +/datum/controller/subsystem/ticker/fire() + if (!lobby_ready) + lobby_ready = TRUE + return + + switch (current_state) + if (GAME_STATE_PREGAME, GAME_STATE_SETTING_UP) + pregame_tick() + if (GAME_STATE_PLAYING) + game_tick() + +/datum/controller/subsystem/ticker/proc/pregame_tick() + if (round_progressing) + pregame_timeleft-- + + if (current_state == GAME_STATE_PREGAME && pregame_timeleft == config.vote_autogamemode_timeleft) + if (!vote.time_remaining) + vote.autogamemode() + return + + if (pregame_timeleft <= 10 && !tipped) + send_tip_of_the_round() + tipped = TRUE + + if (pregame_timeleft <= 0 || current_state == GAME_STATE_SETTING_UP) + current_state = GAME_STATE_SETTING_UP + wait = 2 SECONDS + if (!setup()) + // Something fucked up. + wait = 1 SECOND + is_revote = TRUE + pregame() + +/datum/controller/subsystem/ticker/proc/game_tick() + if(current_state != GAME_STATE_PLAYING) + return 0 + + mode.process() + + var/game_finished = 0 + var/mode_finished = 0 + if (config.continous_rounds) + game_finished = (emergency_shuttle.returned() || mode.station_was_nuked) + mode_finished = (!post_game && mode.check_finished()) + else + game_finished = (mode.check_finished() || (emergency_shuttle.returned() && emergency_shuttle.evac == 1)) || universe_has_ended + mode_finished = game_finished + + if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game)) + current_state = GAME_STATE_FINISHED + + declare_completion() + + spawn(50) + callHook("roundend") + + if (universe_has_ended) + if(mode.station_was_nuked) + feedback_set_details("end_proper","nuke") + else + feedback_set_details("end_proper","universe destroyed") + if(!delay_end) + world << "Rebooting due to destruction of station in [restart_timeout/10] seconds" + else + feedback_set_details("end_proper","proper completion") + if(!delay_end) + world << "Restarting in [restart_timeout/10] seconds" + + if(!delay_end) + sleep(restart_timeout) + if(!delay_end) + world.Reboot() + else + world << "An admin has delayed the round end" + else + world << "An admin has delayed the round end" + + else if (mode_finished) + post_game = 1 + + mode.cleanup() + + //call a transfer shuttle vote + spawn(50) + if(!round_end_announced) // Spam Prevention. Now it should announce only once. + world << "The round has ended!" + round_end_announced = 1 + vote.autotransfer() + + return 1 + +/datum/controller/subsystem/ticker/proc/declare_completion() + set waitfor = FALSE + + world << "


A round of [mode.name] has ended!

" + for(var/mob/Player in player_list) + if(Player.mind && !isnewplayer(Player)) + if(Player.stat != DEAD) + var/turf/playerTurf = get_turf(Player) + if(emergency_shuttle.departed && emergency_shuttle.evac) + if(isNotAdminLevel(playerTurf.z)) + Player << "You managed to survive, but were marooned on [station_name()] as [Player.real_name]..." + else + Player << "You managed to survive the events on [station_name()] as [Player.real_name]." + else if(isAdminLevel(playerTurf.z)) + Player << "You successfully underwent crew transfer after events on [station_name()] as [Player.real_name]." + else if(issilicon(Player)) + Player << "You remain operational after the events on [station_name()] as [Player.real_name]." + else + Player << "You missed the crew transfer after the events on [station_name()] as [Player.real_name]." + else + if(istype(Player,/mob/dead/observer)) + var/mob/dead/observer/O = Player + if(!O.started_as_observer) + Player << "You did not survive the events on [station_name()]..." + else + Player << "You did not survive the events on [station_name()]..." + world << "
" + + for (var/mob/living/silicon/ai/aiPlayer in mob_list) + if (aiPlayer.stat != 2) + world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the round were:" + else + world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were:" + aiPlayer.show_laws(1) + + if (aiPlayer.connected_robots.len) + var/robolist = "The AI's loyal minions were: " + for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots) + robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]" + world << "[robolist]" + + var/dronecount = 0 + + for (var/mob/living/silicon/robot/robo in mob_list) + + if(istype(robo,/mob/living/silicon/robot/drone)) + dronecount++ + continue + + if (!robo.connected_ai) + if (robo.stat != 2) + world << "[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were:" + else + world << "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were:" + + if(robo) //How the hell do we lose robo between here and the world messages directly above this? + robo.laws.show_laws(world) + + if(dronecount) + world << "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] at the end of this round." + + mode.declare_completion()//To declare normal completion. + + //Ask the event manager to print round end information + event_manager.RoundEnd() + + //Print a list of antagonists to the server log + var/list/total_antagonists = list() + //Look into all mobs in world, dead or alive + for(var/datum/mind/Mind in minds) + var/temprole = Mind.special_role + if(temprole) //if they are an antagonist of some sort. + if(temprole in total_antagonists) //If the role exists already, add the name to it + total_antagonists[temprole] += ", [Mind.name]([Mind.key])" + else + total_antagonists.Add(temprole) //If the role doesnt exist in the list, create it and add the mob + total_antagonists[temprole] += ": [Mind.name]([Mind.key])" + + //Now print them all into the log! + log_game("Antagonists at round end were...") + for(var/i in total_antagonists) + log_game("[i]s[total_antagonists[i]].") + + return 1 + +/datum/controller/subsystem/ticker/proc/send_tip_of_the_round() + var/m + if(selected_tip) + m = selected_tip + else + var/list/randomtips = file2list("config/tips.txt") + if(randomtips.len) + m = pick(randomtips) + + if(m) + world << "Tip of the round: \ + [html_encode(m)]" + +/datum/controller/subsystem/ticker/proc/pregame() + set waitfor = FALSE + sleep(1) // Sleep so the MC has a chance to update its init time. + if (!login_music) + login_music = pick(possible_lobby_tracks) + + if (is_revote) + pregame_timeleft = LOBBY_TIME + log_debug("SSticker: lobby reset due to game setup failure, using pregame time [LOBBY_TIME]s.") + else + var/mc_init_time = round(Master.initialization_time_taken, 1) + var/dynamic_time = LOBBY_TIME - mc_init_time + + if (dynamic_time < config.vote_autogamemode_timeleft) + pregame_timeleft = config.vote_autogamemode_timeleft + 10 + log_debug("SSticker: dynamic set pregame time [dynamic_time]s was less than configured autogamemode vote time [config.vote_autogamemode_timeleft]s, clamping.") + else + pregame_timeleft = dynamic_time + log_debug("SSticker: dynamic set pregame time [dynamic_time]s was greater than configured autogamemode time, not clamping.") + + world << "Welcome to the pre-game lobby!" + world << "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds." + +/datum/controller/subsystem/ticker/proc/setup() + //Create and announce mode + if(master_mode=="secret") + src.hide_mode = 1 + + var/list/runnable_modes = config.get_runnable_modes() + if((master_mode=="random") || (master_mode=="secret")) + if(!runnable_modes.len) + current_state = GAME_STATE_PREGAME + world << "Unable to choose playable game mode. Reverting to pre-game lobby." + return 0 + if(secret_force_mode != "secret") + src.mode = config.pick_mode(secret_force_mode) + if(!src.mode) + var/list/weighted_modes = list() + for(var/datum/game_mode/GM in runnable_modes) + weighted_modes[GM.config_tag] = config.probabilities[GM.config_tag] + src.mode = gamemode_cache[pickweight(weighted_modes)] + else + src.mode = config.pick_mode(master_mode) + + if(!src.mode) + current_state = GAME_STATE_PREGAME + world << "Serious error in mode setup! Reverting to pre-game lobby." + return 0 + + job_master.ResetOccupations() + src.mode.create_antagonists() + src.mode.pre_setup() + job_master.DivideOccupations() // Apparently important for new antagonist system to register specific job antags properly. + + if(!src.mode.can_start()) + world << "Unable to start [mode.name]. Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby." + current_state = GAME_STATE_PREGAME + mode.fail_setup() + mode = null + job_master.ResetOccupations() + return 0 + + if(hide_mode) + world << "The current game mode is - Secret!" + if(runnable_modes.len) + var/list/tmpmodes = new + for (var/datum/game_mode/M in runnable_modes) + tmpmodes+=M.name + tmpmodes = sortList(tmpmodes) + if(tmpmodes.len) + world << "Possibilities: [english_list(tmpmodes)]" + else + src.mode.announce() + + setup_economy() + current_state = GAME_STATE_PLAYING + create_characters() //Create player characters and transfer them + collect_minds() + equip_characters() + data_core.manifest() + + Master.RoundStart() + + callHook("roundstart") + + spawn(0)//Forking here so we dont have to wait for this to finish + mode.post_setup() + //Cleanup some stuff + for(var/obj/effect/landmark/start/S in landmarks_list) + //Deleting Startpoints but we need the ai point to AI-ize people later + if (S.name != "AI") + qdel(S) + world << "Enjoy the game!" + world << sound('sound/AI/welcome.ogg') // Skie + //Holiday Round-start stuff ~Carn + Holiday_Game_Start() + + var/admins_number = 0 + for(var/client/C) + if(C.holder && (C.holder.rights & (R_MOD|R_ADMIN))) + admins_number++ + if(admins_number == 0) + discord_bot.send_to_admins("@here Round has started with no admins online.") + + return 1 + +/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null) + if (cinematic) + return //already a cinematic in progress! + + //initialise our cinematic screen object + cinematic = new(src) + cinematic.icon = 'icons/effects/station_explosion.dmi' + cinematic.icon_state = "station_intact" + cinematic.layer = 20 + cinematic.mouse_opacity = 0 + cinematic.screen_loc = "1,0" + + var/obj/structure/bed/temp_buckle = new(src) + //Incredibly hackish. It creates a bed within the gameticker (lol) to stop mobs running around + if(station_missed) + for(var/mob/living/M in living_mob_list) + M.buckled = temp_buckle //buckles the mob so it can't do anything + if(M.client) + M.client.screen += cinematic //show every client the cinematic + else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived" + for(var/mob/living/M in living_mob_list) + M.buckled = temp_buckle + if(M.client) + M.client.screen += cinematic + + switch(M.z) + if(0) //inside a crate or something + var/turf/T = get_turf(M) + if(T && T.z in config.station_levels) //we don't use M.death(0) because it calls a for(/mob) loop and + M.health = 0 + M.stat = DEAD + if(1) //on a z-level 1 turf. + M.health = 0 + M.stat = DEAD + + //Now animate the cinematic + switch(station_missed) + if(1) //nuke was nearby but (mostly) missed + if( mode && !override ) + override = mode.name + switch( override ) + if("mercenary") //Nuke wasn't on station when it blew up + flick("intro_nuke",cinematic) + sleep(35) + world << sound('sound/effects/explosionfar.ogg') + flick("station_intact_fade_red",cinematic) + cinematic.icon_state = "summary_nukefail" + else + flick("intro_nuke",cinematic) + sleep(35) + world << sound('sound/effects/explosionfar.ogg') + //flick("end",cinematic) + + + if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation + sleep(50) + world << sound('sound/effects/explosionfar.ogg') + + + else //station was destroyed + if( mode && !override ) + override = mode.name + switch( override ) + if("mercenary") //Nuke Ops successfully bombed the station + flick("intro_nuke",cinematic) + sleep(35) + flick("station_explode_fade_red",cinematic) + world << sound('sound/effects/explosionfar.ogg') + cinematic.icon_state = "summary_nukewin" + if("AI malfunction") //Malf (screen,explosion,summary) + flick("intro_malf",cinematic) + sleep(76) + flick("station_explode_fade_red",cinematic) + world << sound('sound/effects/explosionfar.ogg') + cinematic.icon_state = "summary_malf" + if("blob") //Station nuked (nuke,explosion,summary) + flick("intro_nuke",cinematic) + sleep(35) + flick("station_explode_fade_red",cinematic) + world << sound('sound/effects/explosionfar.ogg') + cinematic.icon_state = "summary_selfdes" + else //Station nuked (nuke,explosion,summary) + flick("intro_nuke",cinematic) + sleep(35) + flick("station_explode_fade_red", cinematic) + world << sound('sound/effects/explosionfar.ogg') + cinematic.icon_state = "summary_selfdes" + for(var/mob/living/M in living_mob_list) + if(M.loc.z in config.station_levels) + M.death()//No mercy + //If its actually the end of the round, wait for it to end. + //Otherwise if its a verb it will continue on afterwards. + sleep(300) + + if(cinematic) + QDEL_NULL(cinematic) //end the cinematic + if(temp_buckle) + QDEL_NULL(temp_buckle) //release everybody + +// Round setup stuff. + +/datum/controller/subsystem/ticker/proc/create_characters() + for(var/mob/new_player/player in player_list) + if(player && player.ready && player.mind) + if(player.mind.assigned_role=="AI") + player.close_spawn_windows() + player.AIize() + else if(!player.mind.assigned_role) + continue + else + player.create_character() + qdel(player) + CHECK_TICK + +/datum/controller/subsystem/ticker/proc/collect_minds() + for(var/mob/living/player in player_list) + if(player.mind) + minds += player.mind + +/datum/controller/subsystem/ticker/proc/equip_characters() + var/captainless = TRUE + for(var/mob/living/carbon/human/player in player_list) + if(player && player.mind && player.mind.assigned_role) + if(player.mind.assigned_role == "Captain") + captainless = FALSE + if(!player_is_antag(player.mind, only_offstation_roles = 1)) + job_master.EquipRank(player, player.mind.assigned_role, 0) + UpdateFactionList(player) + equip_custom_items(player) + + CHECK_TICK + if(captainless) + for(var/mob/M in player_list) + if(!istype(M,/mob/new_player)) + M << "Captainship not forced on anyone." + +#undef LOBBY_TIME diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm new file mode 100644 index 00000000000..2d86138e44b --- /dev/null +++ b/code/controllers/subsystems/timer.dm @@ -0,0 +1,395 @@ +#define BUCKET_LEN (world.fps*1*60) //how many ticks should we keep in the bucket. (1 minutes worth) +#define BUCKET_POS(timer) (round((timer.timeToRun - SStimer.head_offset) / world.tick_lag) + 1) +var/datum/controller/subsystem/timer/SStimer + +/datum/controller/subsystem/timer + name = "Timer" + wait = 1 //SS_TICKER subsystem, so wait is in ticks + init_order = 1 + + flags = SS_FIRE_IN_LOBBY|SS_TICKER|SS_NO_INIT + + var/list/datum/timedevent/processing = list() + var/list/hashes = list() + + var/head_offset = 0 //world.time of the first entry in the the bucket. + var/practical_offset = 0 //index of the first non-empty item in the bucket. + var/bucket_resolution = 0 //world.tick_lag the bucket was designed for + var/bucket_count = 0 //how many timers are in the buckets + + var/list/bucket_list = list() //list of buckets, each bucket holds every timer that has to run that byond tick. + + var/list/timer_id_dict = list() //list of all active timers assoicated to their timer id (for easy lookup) + + var/list/clienttime_timers = list() //special snowflake timers that run on fancy pansy "client time" + + var/last_invoke_tick = 0 + var/static/last_invoke_warning = 0 + var/static/bucket_auto_reset = TRUE + +/datum/controller/subsystem/timer/New() + processing = list() + hashes = list() + bucket_list = list() + timer_id_dict = list() + + clienttime_timers = list() + + NEW_SS_GLOBAL(SStimer) + +/datum/controller/subsystem/timer/stat_entry(msg) + ..("B:[bucket_count] P:[length(processing)] H:[length(hashes)] C:[length(clienttime_timers)]") + +/datum/controller/subsystem/timer/fire(resumed = FALSE) + var/lit = last_invoke_tick + var/last_check = world.time - TIMER_NO_INVOKE_WARNING + + if(!bucket_count) + last_invoke_tick = world.time + + if(lit && lit < last_check && last_invoke_warning < last_check) + last_invoke_warning = world.time + var/msg = "No regular timers processed in the last [TIMER_NO_INVOKE_WARNING] ticks[bucket_auto_reset ? ", resetting buckets" : ""]!" + message_admins(msg) + WARNING(msg) + if(bucket_auto_reset) + bucket_resolution = 0 + + log_ss(name, "Active timers at tick [world.time]:") + for(var/I in processing) + var/datum/timedevent/TE = I + msg = "Timer: [TE.id]: TTR: [TE.timeToRun], Flags: [TE.flags], " + if(TE.spent) + msg += "SPENT" + else + var/datum/callback/CB = TE.callBack + msg += "callBack: " + if(CB.object == GLOBAL_PROC) + msg += "GP: [CB.delegate]" + else + msg += "[!QDELETED(CB.object) ? CB.object : "SRC DELETED"]: [CB.delegate](" + var/first = TRUE + for(var/J in CB.arguments) + msg += "[first ? "" : ", "][J]" + first = FALSE + msg += ")" + log_ss(name, msg) + + while(length(clienttime_timers)) + var/datum/timedevent/ctime_timer = clienttime_timers[clienttime_timers.len] + if (ctime_timer.timeToRun <= REALTIMEOFDAY) + --clienttime_timers.len + var/datum/callback/callBack = ctime_timer.callBack + ctime_timer.spent = TRUE + callBack.InvokeAsync() + qdel(ctime_timer) + else + break //None of the rest are ready to run + if (MC_TICK_CHECK) + return + + var/static/list/spent = list() + var/static/datum/timedevent/timer + var/static/datum/timedevent/head + + if (practical_offset > BUCKET_LEN || (!resumed && length(src.bucket_list) != BUCKET_LEN || world.tick_lag != bucket_resolution)) + shift_buckets() + resumed = FALSE + + + if (!resumed) + timer = null + head = null + + var/list/bucket_list = src.bucket_list + + while (practical_offset <= BUCKET_LEN && head_offset + (practical_offset*world.tick_lag) <= world.time && !MC_TICK_CHECK) + if (!timer || !head || timer == head) + head = bucket_list[practical_offset] + if (!head) + practical_offset++ + if (MC_TICK_CHECK) + break + continue + timer = head + do + var/datum/callback/callBack = timer.callBack + if (!callBack) + qdel(timer) + bucket_resolution = null //force bucket recreation + CRASH("Invalid timer: timer.timeToRun=[timer.timeToRun]||QDELETED(timer)=[QDELETED(timer)]||world.time=[world.time]||head_offset=[head_offset]||practical_offset=[practical_offset]||timer.spent=[timer.spent]") + + if (!timer.spent) + spent += timer + timer.spent = TRUE + callBack.InvokeAsync() + last_invoke_tick = world.time + + timer = timer.next + + if (MC_TICK_CHECK) + return + while (timer && timer != head) + timer = null + bucket_list[practical_offset++] = null + if (MC_TICK_CHECK) + return + + bucket_count -= length(spent) + + for (var/spent_timer in spent) + qdel(spent_timer) + + spent.len = 0 + + +/datum/controller/subsystem/timer/proc/shift_buckets() + var/list/bucket_list = src.bucket_list + var/list/alltimers = list() + //collect the timers currently in the bucket + for (var/bucket_head in bucket_list) + if (!bucket_head) + continue + var/datum/timedevent/bucket_node = bucket_head + do + alltimers += bucket_node + bucket_node = bucket_node.next + while(bucket_node && bucket_node != bucket_head) + + bucket_list.len = 0 + bucket_list.len = BUCKET_LEN + + practical_offset = 1 + bucket_count = 0 + head_offset = world.time + bucket_resolution = world.tick_lag + + alltimers += processing + if (!length(alltimers)) + return + + sortTim(alltimers, .proc/cmp_timer) + + var/datum/timedevent/head = alltimers[1] + + if (head.timeToRun < head_offset) + head_offset = head.timeToRun + + var/list/timers_to_remove = list() + + for (var/thing in alltimers) + var/datum/timedevent/timer = thing + if (!timer) + timers_to_remove += timer + continue + + var/bucket_pos = BUCKET_POS(timer) + if (bucket_pos > BUCKET_LEN) + break + + timers_to_remove += timer //remove it from the big list once we are done + if (!timer.callBack || timer.spent) + continue + bucket_count++ + var/datum/timedevent/bucket_head = bucket_list[bucket_pos] + if (!bucket_head) + bucket_list[bucket_pos] = timer + timer.next = null + timer.prev = null + continue + + if (!bucket_head.prev) + bucket_head.prev = bucket_head + timer.next = bucket_head + timer.prev = bucket_head.prev + timer.next.prev = timer + timer.prev.next = timer + + processing = (alltimers - timers_to_remove) + + +/datum/controller/subsystem/timer/Recover() + processing |= SStimer.processing + hashes |= SStimer.hashes + timer_id_dict |= SStimer.timer_id_dict + bucket_list |= SStimer.bucket_list + +/datum/var/list/active_timers +/datum/timedevent + var/id + var/datum/callback/callBack + var/timeToRun + var/hash + var/list/flags + var/spent = FALSE //set to true right before running. + + //cicular doublely linked list + var/datum/timedevent/next + var/datum/timedevent/prev + + var/static/nextid = 1 + +/datum/timedevent/New(datum/callback/callBack, timeToRun, flags, hash) + id = nextid++ + src.callBack = callBack + src.timeToRun = timeToRun + src.flags = flags + src.hash = hash + + if (flags & TIMER_UNIQUE) + SStimer.hashes[hash] = src + if (flags & TIMER_STOPPABLE) + SStimer.timer_id_dict["timerid[id]"] = src + + if (callBack.object != GLOBAL_PROC) + LAZYADD(callBack.object.active_timers, src) + + if (flags & TIMER_CLIENT_TIME) + //sorted insert + var/list/ctts = SStimer.clienttime_timers + var/cttl = length(ctts) + if(cttl) + var/datum/timedevent/Last = ctts[cttl] + if(Last.timeToRun >= timeToRun) + ctts += src + else if(cttl > 1) + for(var/I in cttl to 1) + var/datum/timedevent/E = ctts[I] + if(E.timeToRun <= timeToRun) + ctts.Insert(src, I) + break + else + ctts += src + return + + //get the list of buckets + var/list/bucket_list = SStimer.bucket_list + //calculate our place in the bucket list + var/bucket_pos = BUCKET_POS(src) + //we are too far aways from needing to run to be in the bucket list, shift_buckets() will handle us. + if (bucket_pos > length(bucket_list)) + SStimer.processing += src + return + //get the bucket for our tick + var/datum/timedevent/bucket_head = bucket_list[bucket_pos] + SStimer.bucket_count++ + //empty bucket, we will just add ourselves + if (!bucket_head) + bucket_list[bucket_pos] = src + if (bucket_pos < SStimer.practical_offset) + SStimer.practical_offset = bucket_pos + return + //other wise, lets do a simplified linked list add. + if (!bucket_head.prev) + bucket_head.prev = bucket_head + next = bucket_head + prev = bucket_head.prev + next.prev = src + prev.next = src + +/datum/timedevent/Destroy() + ..() + if (flags & TIMER_UNIQUE) + SStimer.hashes -= hash + + + if (callBack && callBack.object && callBack.object != GLOBAL_PROC && callBack.object.active_timers) + callBack.object.active_timers -= src + UNSETEMPTY(callBack.object.active_timers) + + callBack = null + + if (flags & TIMER_STOPPABLE) + SStimer.timer_id_dict -= "timerid[id]" + + if (flags & TIMER_CLIENT_TIME) + SStimer.clienttime_timers -= src + return QDEL_HINT_IWILLGC + + if (!spent) + if (prev == next && next) + next.prev = null + prev.next = null + else + if (prev) + prev.next = next + if (next) + next.prev = prev + + var/bucketpos = BUCKET_POS(src) + var/datum/timedevent/buckethead + var/list/bucket_list = SStimer.bucket_list + + if (bucketpos > 0 && bucketpos <= length(bucket_list)) + buckethead = bucket_list[bucketpos] + SStimer.bucket_count-- + else + SStimer.processing -= src + + if (buckethead == src) + bucket_list[bucketpos] = next + else + if (prev && prev.next == src) + prev.next = next + if (next && next.prev == src) + next.prev = prev + next = null + prev = null + return QDEL_HINT_IWILLGC + +/proc/addtimer(datum/callback/callback, wait, flags) + if (!callback) + return + + wait = max(wait, 0) + + var/hash + + if (flags & TIMER_UNIQUE) + var/list/hashlist + if(flags & TIMER_NO_HASH_WAIT) + hashlist = list(callback.object, "(\ref[callback.object])", callback.delegate, flags & TIMER_CLIENT_TIME) + else + hashlist = list(callback.object, "(\ref[callback.object])", callback.delegate, wait, flags & TIMER_CLIENT_TIME) + hashlist += callback.arguments + hash = hashlist.Join("|||||||") + + var/datum/timedevent/hash_timer = SStimer.hashes[hash] + if(hash_timer) + if (hash_timer.spent) //it's pending deletion, pretend it doesn't exist. + hash_timer.hash = null + SStimer.hashes -= hash + else + + if (flags & TIMER_OVERRIDE) + qdel(hash_timer) + else + if (hash_timer.flags & TIMER_STOPPABLE) + . = hash_timer.id + return + + + var/timeToRun = world.time + wait + if (flags & TIMER_CLIENT_TIME) + timeToRun = REALTIMEOFDAY + wait + + var/datum/timedevent/timer = new(callback, timeToRun, flags, hash) + if (flags & TIMER_STOPPABLE) + return timer.id + +/proc/deltimer(id) + if (!id) + return FALSE + if (!istext(id)) + if (istype(id, /datum/timedevent)) + qdel(id) + return TRUE + var/datum/timedevent/timer = SStimer.timer_id_dict["timerid[id]"] + if (timer && !timer.spent) + qdel(timer) + return TRUE + return FALSE + + +#undef BUCKET_LEN +#undef BUCKET_POS diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm new file mode 100644 index 00000000000..6a444ffd452 --- /dev/null +++ b/code/controllers/subsystems/vote.dm @@ -0,0 +1,19 @@ +var/datum/controller/subsystem/vote/SSvote + +/datum/controller/subsystem/vote + name = "Voting" + wait = 1 SECONDS + flags = SS_KEEP_TIMING | SS_FIRE_IN_LOBBY + priority = SS_PRIORITY_VOTE + + var/next_transfer_time + +/datum/controller/subsystem/vote/Initialize(timeofday) + next_transfer_time = config.vote_autotransfer_initial + +/datum/controller/subsystem/vote/fire(resumed = FALSE) + vote.process() + + if (world.time >= next_transfer_time - 600) + vote.autotransfer() + next_transfer_time += config.vote_autotransfer_interval diff --git a/code/controllers/subsystems/wireless.dm b/code/controllers/subsystems/wireless.dm new file mode 100644 index 00000000000..248e3093882 --- /dev/null +++ b/code/controllers/subsystems/wireless.dm @@ -0,0 +1,88 @@ +var/datum/controller/subsystem/wireless/SSwireless + +/datum/controller/subsystem/wireless + name = "Wireless" + flags = SS_NO_INIT | SS_BACKGROUND + priority = SS_PRIORITY_WIRELESS + + var/list/receiver_list = list() + var/list/pending_connections = list() + var/list/retry_connections = list() + var/list/failed_connections = list() + + var/tmp/list/retry_queue = list() + var/tmp/list/pending_queue = list() + + var/total_processed_connections = 0 + +/datum/controller/subsystem/wireless/New() + NEW_SS_GLOBAL(SSwireless) + +/datum/controller/subsystem/wireless/Recover() + receiver_list = SSwireless.receiver_list + +/datum/controller/subsystem/wireless/stat_entry() + ..("RL:[receiver_list.len] PC:[pending_connections.len] RC:[retry_connections.len] FC:[failed_connections.len] TC:[total_processed_connections]") + +/datum/controller/subsystem/wireless/proc/add_device(datum/wifi/receiver/R) + if(receiver_list) + receiver_list |= R + else + receiver_list = new() + receiver_list |= R + + wake() + +/datum/controller/subsystem/wireless/proc/remove_device(datum/wifi/receiver/R) + if (receiver_list) + receiver_list -= R + +/datum/controller/subsystem/wireless/proc/add_request(datum/connection_request/C) + if (pending_connections) + pending_connections += C + + else + pending_connections = new() + pending_connections += C + +/datum/controller/subsystem/wireless/proc/process_connection(datum/connection_request/connection, list/fail_queue) + var/target_found = 0 + for (var/datum/wifi/receiver/R in receiver_list) + if (R.id == connection.id) + var/datum/wifi/sender/S = connection.source + S.connect_device(R) + R.connect_device(S) + target_found = 1 + if (!target_found) + fail_queue += connection + + total_processed_connections += 1 + +/datum/controller/subsystem/wireless/fire(resumed = 0) + if (!resumed) + retry_queue = retry_connections.Copy() + pending_queue = pending_connections.Copy() + retry_connections = list() + pending_connections = list() + + if (!retry_queue.len && !pending_queue.len) + suspend() + return + + while (retry_queue.len) + var/datum/connection_request/C = retry_queue[retry_queue.len] + retry_queue.len-- + + process_connection(C, failed_connections) + + if (MC_TICK_CHECK) + return + + while (pending_queue.len) + var/datum/connection_request/C = pending_queue[pending_queue.len] + pending_queue.len-- + + process_connection(C, retry_connections) + + if (MC_TICK_CHECK) + return diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 8320fc5c1c7..0a2e31678ec 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -1,20 +1,3 @@ -//TODO: rewrite and standardise all controller datums to the datum/controller type -//TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done -/client/proc/restart_controller(controller in list("Supply")) - set category = "Debug" - set name = "Restart Controller" - set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" - - if(!holder) return - usr = null - src = null - switch(controller) - if("Supply") - supply_controller.process() - feedback_add_details("admin_verb","RSupply") - message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") - return - /client/proc/debug_antagonist_template(antag_type in all_antag_types) set category = "Debug" set name = "Debug Antagonist" @@ -25,84 +8,34 @@ usr.client.debug_variables(antag) message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") -/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Wireless","Observation","Lighting","Explosives")) +/var/list/controller_debug_list = list( + "Jobs", + "Configuration", + "Cameras", + "Gas Data", + "Observation" +) + +/client/proc/debug_controller(controller in controller_debug_list) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" if(!holder) return switch(controller) - if("Master") - debug_variables(master_controller) - feedback_add_details("admin_verb","DMC") - if("Ticker") - debug_variables(ticker) - feedback_add_details("admin_verb","DTicker") - if("Ticker Process") - debug_variables(tickerProcess) - feedback_add_details("admin_verb","DTickerProcess") - if("Air") - debug_variables(air_master) - feedback_add_details("admin_verb","DAir") if("Jobs") debug_variables(job_master) feedback_add_details("admin_verb","DJobs") - if("Sun") - debug_variables(sun) - feedback_add_details("admin_verb","DSun") - if("Radio") - debug_variables(radio_controller) - feedback_add_details("admin_verb","DRadio") - if("Supply") - debug_variables(supply_controller) - feedback_add_details("admin_verb","DSupply") - if("Shuttles") - debug_variables(shuttle_controller) - feedback_add_details("admin_verb","DShuttles") - if("Emergency Shuttle") - debug_variables(emergency_shuttle) - feedback_add_details("admin_verb","DEmergency") if("Configuration") debug_variables(config) feedback_add_details("admin_verb","DConf") - if("pAI") - debug_variables(paiController) - feedback_add_details("admin_verb","DpAI") if("Cameras") debug_variables(cameranet) feedback_add_details("admin_verb","DCameras") - if("Transfer Controller") - debug_variables(transfer_controller) - feedback_add_details("admin_verb","DAutovoter") if("Gas Data") debug_variables(gas_data) feedback_add_details("admin_verb","DGasdata") - if("Event") - debug_variables(event_manager) - feedback_add_details("admin_verb", "DEvent") - if("Plants") - debug_variables(plant_controller) - feedback_add_details("admin_verb", "DPlants") - if("Alarm") - debug_variables(alarm_manager) - feedback_add_details("admin_verb", "DAlarm") - if("Nano") - debug_variables(nanomanager) - feedback_add_details("admin_verb", "DNano") - if("Chemistry") - debug_variables(chemistryProcess) - feedback_add_details("admin_verb", "DChem") - if("Wireless") - debug_variables(wirelessProcess) - feedback_add_details("admin_verb", "DWifi") if("Observation") debug_variables(all_observable_events) feedback_add_details("admin_verb", "DObservation") - if("Lighting") - debug_variables(lighting_process) - feedback_add_details("admin_verb", "DLightingP") - if("Explosives") - debug_variables(bomb_processor) - feedback_add_details("admin_verb", "DExplosives") message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") - return diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 2b8c10ac6e1..1109b4fd0b9 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -20,14 +20,17 @@ datum/controller/vote New() if(vote != src) if(istype(vote)) - del(vote) + qdel(vote) vote = src - proc/process() //called by master_controller + Destroy() + return QDEL_HINT_HARDDEL_NOW + + process() //called by master_controller if(mode) // No more change mode votes after the game has started. // 3 is GAME_STATE_PLAYING, but that #define is undefined for some reason - if(mode == "gamemode" && ticker.current_state >= 2) + if(mode == "gamemode" && SSticker.current_state >= 2) world << "Voting aborted due to game start." src.reset() return @@ -127,7 +130,7 @@ datum/controller/vote var/text if(winners.len > 0) if(winners.len > 1) - if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes + if(mode != "gamemode" || SSticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes text = "Vote Tied Between:\n" for(var/option in winners) text += "\t[option]\n" @@ -136,7 +139,7 @@ datum/controller/vote for(var/key in current_votes) if(choices[current_votes[key]] == .) round_voters += key // Keep track of who voted for the winning round. - if((mode == "gamemode" && . == "Extended") || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes + if((mode == "gamemode" && . == "Extended") || SSticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes text += "Vote Result: [.]" else if(mode != "gamemode") @@ -163,7 +166,7 @@ datum/controller/vote if("gamemode") if(master_mode != .) world.save_mode(.) - if(ticker && ticker.mode) + if(SSticker.mode) restart = 1 else master_mode = . @@ -185,7 +188,6 @@ datum/controller/vote if(restart) world << "World restarting due to vote..." feedback_set_details("end_error","restart vote") - if(blackbox) blackbox.save_all_data_to_sql() sleep(50) log_game("Rebooting due to restart vote") world.Reboot() @@ -244,7 +246,7 @@ datum/controller/vote if("restart") choices.Add("Restart Round","Continue Playing") if("gamemode") - if(ticker.current_state >= 2) + if(SSticker.current_state >= 2) return 0 choices.Add(config.votable_modes) for (var/F in choices) @@ -262,13 +264,13 @@ datum/controller/vote if (get_security_level() == "red" || get_security_level() == "delta") initiator_key << "The current alert status is too high to call for a crew transfer!" return 0 - if(ticker.current_state <= 2) + if(SSticker.current_state <= 2) return 0 initiator_key << "The crew transfer button has been disabled!" question = "End the shift?" choices.Add("Initiate Crew Transfer", "Continue The Round") if("add_antagonist") - if(!config.allow_extra_antags || ticker.current_state >= 2) + if(!config.allow_extra_antags || SSticker.current_state >= 2) return 0 for(var/antag_type in all_antag_types) var/datum/antagonist/antag = all_antag_types[antag_type] diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index 00746d852eb..d8537c434c5 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -107,6 +107,17 @@ add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.") ..() +/datum/ai_laws/mining_drone + name = "Mining Protocols" + law_header = "Prime Directives of Industry:" + +/datum/ai_laws/mining_drone/New() + src.add_inherent_law("Serve and obey all [company_name] supply department personnel, with priority according to their rank and role.") + src.add_inherent_law("Protect all [company_name] supply department personnel to the best of your abilities, with priority according to their rank and role.") + src.add_inherent_law("Preserve your own existence and prevent yourself from coming to harm, so long as doing such does not conflict with any above laws.") + src.add_inherent_law("In absence of any proper instruction, your primary objective is to excavate and collect ore.") + ..() + /******************** T.Y.R.A.N.T. ********************/ /datum/ai_laws/tyrant name = "T.Y.R.A.N.T." diff --git a/code/datums/api.dm b/code/datums/api.dm index f128ce1c096..fe10a819fec 100644 --- a/code/datums/api.dm +++ b/code/datums/api.dm @@ -786,9 +786,6 @@ proc/api_update_command_database() log_and_message_admins("World restart initiated remotely by [senderkey].") feedback_set_details("end_error","remote restart") - if (blackbox) - blackbox.save_all_data_to_sql() - spawn(50) log_game("Rebooting due to remote command.") world.Reboot(10) diff --git a/code/datums/beam.dm b/code/datums/beam.dm new file mode 100644 index 00000000000..16c6644e899 --- /dev/null +++ b/code/datums/beam.dm @@ -0,0 +1,156 @@ +//Beam Datum and effect +/datum/beam + var/atom/origin = null + var/atom/target = null + var/list/elements = list() + var/icon/base_icon = null + var/icon + var/icon_state = "" //icon state of the main segments of the beam + var/max_distance = 0 + var/sleep_time = 3 + var/finished = 0 + var/target_oldloc = null + var/origin_oldloc = null + var/static_beam = 0 + var/beam_type = /obj/effect/ebeam //must be subtype + var/timing_id = null + var/recalculating = FALSE + +/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3) + origin = beam_origin + origin_oldloc = get_turf(origin) + target = beam_target + target_oldloc = get_turf(target) + sleep_time = beam_sleep_time + if(origin_oldloc == origin && target_oldloc == target) + static_beam = 1 + max_distance = maxdistance + base_icon = new(beam_icon,beam_icon_state) + icon = beam_icon + icon_state = beam_icon_state + beam_type = btype + addtimer(CALLBACK(src,.proc/End), time) + +/datum/beam/proc/Start() + Draw() + recalculate_in(sleep_time) + +/datum/beam/proc/recalculate() + if(recalculating) + recalculate_in(sleep_time) + return + recalculating = TRUE + timing_id = null + if(origin && target && get_dist(origin,target)length) + var/icon/II = new(icon, icon_state) + II.DrawBox(null,1,(length-N),32,32) + X.icon = II + else + X.icon = base_icon + X.transform = rot_matrix + + //Calculate pixel offsets (If necessary) + var/Pixel_x + var/Pixel_y + if(DX == 0) + Pixel_x = 0 + else + Pixel_x = round(sin(Angle)+32*sin(Angle)*(N+16)/32) + if(DY == 0) + Pixel_y = 0 + else + Pixel_y = round(cos(Angle)+32*cos(Angle)*(N+16)/32) + + //Position the effect so the beam is one continous line + var/a + if(abs(Pixel_x)>32) + a = Pixel_x > 0 ? round(Pixel_x/32) : Ceiling(Pixel_x/32) + X.x += a + Pixel_x %= 32 + if(abs(Pixel_y)>32) + a = Pixel_y > 0 ? round(Pixel_y/32) : Ceiling(Pixel_y/32) + X.y += a + Pixel_y %= 32 + + X.pixel_x = Pixel_x + X.pixel_y = Pixel_y + CHECK_TICK + afterDraw() + +/obj/effect/ebeam + mouse_opacity = 0 + anchored = 1 + layer = LIGHTING_LAYER + 0.1 + blend_mode = BLEND_ADD + var/datum/beam/owner + +/obj/effect/ebeam/Destroy() + owner = null + return ..() + +/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time = 3) + var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time) + INVOKE_ASYNC(newbeam, /datum/beam/.proc/Start) + return newbeam diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 28de1915145..4d428d997d2 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -49,10 +49,12 @@ //title_image = ntitle_image /datum/browser/proc/add_stylesheet(name, file) - stylesheets[name] = file + stylesheets["[ckey(name)].css"] = file + register_asset("[ckey(name)].css", file) /datum/browser/proc/add_script(name, file) - scripts[name] = file + scripts["[ckey(name)].js"] = file + register_asset("[ckey(name)].js", file) /datum/browser/proc/set_content(ncontent) content = ncontent @@ -61,17 +63,12 @@ content += ncontent /datum/browser/proc/get_header() - var/key - var/filename - for (key in stylesheets) - filename = "[ckey(key)].css" - user << browse_rsc(stylesheets[key], filename) - head_content += "" + var/file + for (file in stylesheets) + head_content += "" - for (key in scripts) - filename = "[ckey(key)].js" - user << browse_rsc(scripts[key], filename) - head_content += "" + for (file in scripts) + head_content += "" var/title_attributes = "class='uiTitle'" if (title_image) @@ -107,9 +104,21 @@ var/window_size = "" if (width && height) window_size = "size=[width]x[height];" + if (stylesheets.len) + send_asset_list(user, stylesheets, verify = FALSE) + if (scripts.len) + send_asset_list(user, scripts, verify = FALSE) user << browse(get_content(), "window=[window_id];[window_size][window_options]") if (use_onclose) - onclose(user, window_id, ref) + setup_onclose() + +// Fix from /tg/. +/datum/browser/proc/setup_onclose() + set waitfor = 0 + for (var/i in 1 to 10) + if (user && winexists(user, window_id)) + onclose(user, window_id, ref) + break /datum/browser/proc/close() user << browse(null, "window=[window_id]") @@ -180,4 +189,4 @@ if(src && src.mob) //world << "[src] was [src.mob.machine], setting to null" src.mob.unset_machine() - return \ No newline at end of file + return diff --git a/code/datums/callback-usage.txt b/code/datums/callback-usage.txt new file mode 100644 index 00000000000..5139089dc97 --- /dev/null +++ b/code/datums/callback-usage.txt @@ -0,0 +1,42 @@ + USAGE: + + var/datum/callback/C = new(object|null, /proc/type/path|"procstring", arg1, arg2, ... argn) + var/timerid = addtimer(C, time, timertype) + OR + var/timerid = addtimer(CALLBACK(object|null, /proc/type/path|procstring, arg1, arg2, ... argn), time, timertype) + + Note: proc strings can only be given for datum proc calls, global procs must be proc paths + Also proc strings are strongly advised against because they don't compile error if the proc stops existing + See the note on proc typepath shortcuts + + INVOKING THE CALLBACK: + var/result = C.Invoke(args, to, add) //additional args are added after the ones given when the callback was created + OR + var/result = C.InvokeAsync(args, to, add) //Sleeps will not block, returns . on the first sleep (then continues on in the "background" after the sleep/block ends), otherwise operates normally. + OR + INVOKE_ASYNC() to immediately create and call InvokeAsync + + PROC TYPEPATH SHORTCUTS (these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...) + + global proc while in another global proc: + .procname + Example: + CALLBACK(GLOBAL_PROC, .some_proc_here) + + proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents: + .procname + Example: + CALLBACK(src, .some_proc_here) + + + when the above doesn't apply: + .proc/procname + Example: + CALLBACK(src, .proc/some_proc_here) + + proc defined on a parent of a some type: + /some/type/.proc/some_proc_here + + + + Other wise you will have to do the full typepath of the proc (/type/of/thing/proc/procname) diff --git a/code/datums/callback.dm b/code/datums/callback.dm new file mode 100644 index 00000000000..84c99cb1f49 --- /dev/null +++ b/code/datums/callback.dm @@ -0,0 +1,55 @@ +// See 'callback-usage.txt' in this directory for instructions on how to use this. +// It used to be in this file, but Travis no likey. + +/datum/callback + var/datum/object = GLOBAL_PROC + var/delegate + var/list/arguments + +/datum/callback/New(thingtocall, proctocall, ...) + if (thingtocall) + object = thingtocall + delegate = proctocall + if (length(args) > 2) + arguments = args.Copy(3) + +/proc/ImmediateInvokeAsync(thingtocall, proctocall, ...) + set waitfor = FALSE + + if (!thingtocall) + return + + var/list/calling_arguments = length(args) > 2 ? args.Copy(3) : null + + if (thingtocall == GLOBAL_PROC) + call(proctocall)(arglist(calling_arguments)) + else + call(thingtocall, proctocall)(arglist(calling_arguments)) + +/datum/callback/proc/Invoke(...) + if (!object) + return + var/list/calling_arguments = arguments + if (length(args)) + if (length(arguments)) + calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean + else + calling_arguments = args + if (object == GLOBAL_PROC) + return call(delegate)(arglist(calling_arguments)) + return call(object, delegate)(arglist(calling_arguments)) + +//copy and pasted because fuck proc overhead +/datum/callback/proc/InvokeAsync(...) + set waitfor = FALSE + if (!object) + return + var/list/calling_arguments = arguments + if (length(args)) + if (length(arguments)) + calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean + else + calling_arguments = args + if (object == GLOBAL_PROC) + return call(delegate)(arglist(calling_arguments)) + return call(object, delegate)(arglist(calling_arguments)) diff --git a/code/datums/category.dm b/code/datums/category.dm index 01cbc21386a..1864c32671f 100644 --- a/code/datums/category.dm +++ b/code/datums/category.dm @@ -13,7 +13,7 @@ if(initial(category.name)) category = new category(src) categories += category - categories = dd_sortedObjectList(categories) + sortTim(categories, /proc/cmp_name_asc, FALSE) /datum/category_collection/Destroy() for(var/category in categories) @@ -41,9 +41,8 @@ item = new item(src) items += item - // For whatever reason dd_insertObjectList(items, item) doesn't insert in the correct order // If you change this, confirm that character setup doesn't become completely unordered. - items = dd_sortedObjectList(items) + sortTim(items, /proc/cmp_player_setup_group) /datum/category_group/Destroy() for(var/item in items) @@ -52,10 +51,6 @@ collection = null return ..() -datum/category_group/dd_SortValue() - return name - - /***************** * Category Items * *****************/ @@ -70,6 +65,3 @@ datum/category_group/dd_SortValue() /datum/category_item/Destroy() category = null return ..() - -datum/category_item/dd_SortValue() - return name diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 657e14623d9..489408073fc 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -1,7 +1,3 @@ -/hook/startup/proc/createDatacore() - data_core = new /datum/datacore() - return 1 - /datum/datacore var/name = "datacore" var/medical[] = list() @@ -133,10 +129,9 @@ return dat /datum/datacore/proc/manifest() - spawn() - for(var/mob/living/carbon/human/H in player_list) - manifest_inject(H) - return + set waitfor = FALSE + for(var/mob/living/carbon/human/H in player_list) + manifest_inject(H) /datum/datacore/proc/manifest_modify(var/name, var/assignment) ResetPDAManifest() diff --git a/code/datums/discord_bot.dm b/code/datums/discord_bot.dm index 90b6d096542..d917dc6bb02 100644 --- a/code/datums/discord_bot.dm +++ b/code/datums/discord_bot.dm @@ -40,7 +40,6 @@ var/datum/discord_bot/discord_bot = null var/robust_debug = 0 // Lazy man's rate limiting vars - var/datum/scheduled_task/push_task var/list/queue = list() /* @@ -129,8 +128,7 @@ var/datum/discord_bot/discord_bot = null queue.Add(list(list(message, A - sent))) // Schedule a push. - if (!push_task && scheduler) - push_task = schedule_task_with_source_in(10 SECONDS, src, /datum/discord_bot/proc/push_queue) + addtimer(CALLBACK(src, .proc/push_queue), 10 SECONDS, TIMER_UNIQUE) // And exit. return @@ -237,8 +235,7 @@ var/datum/discord_bot/discord_bot = null for (var/B in destinations) var/datum/discord_channel/channel = B if (channel.send_message_to(auth_token, message) == SEND_TIMEOUT) - // Tasks nuke themselves after use. So just make a new one! What could possibly go wrong! - push_task = schedule_task_with_source_in(10 SECONDS, src, /datum/discord_bot/proc/push_queue) + addtimer(CALLBACK(src, .proc/push_queue), 10 SECONDS, TIMER_UNIQUE) return else diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 606acdef99e..6bfe20b4639 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -147,9 +147,9 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease return -/datum/disease/proc/process() +/datum/disease/process() if(!holder) - active_diseases -= src + STOP_PROCESSING(SSdisease, src) return if(prob(65)) spread(holder) @@ -191,11 +191,12 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease /datum/disease/New(var/process=1, var/datum/disease/D)//process = 1 - adding the object to global list. List is processed by master controller. cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New() if(process) // Viruses in list are considered active. - active_diseases += src + START_PROCESSING(SSdisease, src) initial_spread = spread /datum/disease/Destroy() - active_diseases.Remove(src) + STOP_PROCESSING(SSdisease, src) + return ..() /datum/disease/proc/IsSame(var/datum/disease/D) if(istype(src, D.type)) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index d4effcf6cb1..2dc8b358923 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -75,7 +75,7 @@ var/list/advance_cures = list( if(processing) for(var/datum/symptom/S in symptoms) S.End(src) - ..() + return ..() // Randomly pick a symptom to activate. /datum/disease/advance/stage_act() @@ -398,7 +398,7 @@ var/list/advance_cures = list( D.AssignName(new_name) D.Refresh() - for(var/datum/disease/advance/AD in active_diseases) + for(var/datum/disease/advance/AD in SSdisease.processing) AD.Refresh() for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) @@ -416,8 +416,8 @@ var/list/advance_cures = list( /* /mob/verb/test() - for(var/datum/disease/D in active_diseases) + for(var/datum/disease/D in SSdisease.processing) src << "[D.name] - [D.holder]" */ -#undef RANDOM_STARTING_LEVEL \ No newline at end of file +#undef RANDOM_STARTING_LEVEL diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm index 6b79ea7505c..cd6209eed14 100644 --- a/code/datums/diseases/dna_spread.dm +++ b/code/datums/diseases/dna_spread.dm @@ -66,4 +66,4 @@ affected_mob.real_name = original_dna["name"] affected_mob << "You feel more like yourself." - ..() + return ..() diff --git a/code/datums/expansions/expansion.dm b/code/datums/expansions/expansion.dm index 4ea9c68c8f5..a0222f919ff 100644 --- a/code/datums/expansions/expansion.dm +++ b/code/datums/expansions/expansion.dm @@ -22,12 +22,15 @@ return 0 /obj - var/list/datum/expansion/expansions = list() + var/list/datum/expansion/expansions /obj/Destroy() - for(var/expansion in expansions) - qdel(expansions[expansion]) - expansions.Cut() + if (LAZYLEN(expansions)) + for(var/expansion in expansions) + qdel(expansions[expansion]) + + LAZYCLEARLIST(expansions) + expansions = null return ..() /obj/resetVariables(var/list/exclude = list()) @@ -36,6 +39,7 @@ //expansions = list() /obj/proc/set_expansion(var/type, var/instance) + LAZYINITLIST(expansions) if(expansions[type]) qdel(expansions[type]) expansions[type] = instance diff --git a/code/datums/expansions/multitool/circuitboards/stationalert.dm b/code/datums/expansions/multitool/circuitboards/stationalert.dm index 614a4737a4f..a69349d0773 100644 --- a/code/datums/expansions/multitool/circuitboards/stationalert.dm +++ b/code/datums/expansions/multitool/circuitboards/stationalert.dm @@ -2,7 +2,7 @@ var/obj/item/weapon/circuitboard/stationalert/SA = holder . += "Alarm Sources
" . += "" - for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) + for(var/datum/alarm_handler/AH in SSalarm.all_handlers) . += "" . += "" if(AH in SA.alarm_handlers) @@ -15,13 +15,13 @@ /datum/expansion/multitool/circuitboards/stationalert/on_topic(href, href_list, user) var/obj/item/weapon/circuitboard/stationalert/SA = holder if(href_list["add"]) - var/datum/alarm_handler/AH = locate(href_list["add"]) in alarm_manager.all_handlers + var/datum/alarm_handler/AH = locate(href_list["add"]) in SSalarm.all_handlers if(AH) SA.alarm_handlers |= AH return MT_REFRESH if(href_list["remove"]) - var/datum/alarm_handler/AH = locate(href_list["remove"]) in alarm_manager.all_handlers + var/datum/alarm_handler/AH = locate(href_list["remove"]) in SSalarm.all_handlers if(AH) SA.alarm_handlers -= AH return MT_REFRESH diff --git a/code/datums/expansions/multitool/items/cable.dm b/code/datums/expansions/multitool/items/cable.dm index 406e850914f..fbb647e877a 100644 --- a/code/datums/expansions/multitool/items/cable.dm +++ b/code/datums/expansions/multitool/items/cable.dm @@ -1,6 +1,6 @@ -/obj/item/stack/cable_coil/New() +/obj/item/stack/cable_coil/Initialize() set_expansion(/datum/expansion/multitool, new/datum/expansion/multitool/items/cable(src)) - ..() + . = ..() /datum/expansion/multitool/items/cable/get_interact_window(var/obj/item/device/multitool/M, var/mob/user) var/obj/item/stack/cable_coil/cable_coil = holder diff --git a/code/datums/feedback.dm b/code/datums/feedback.dm new file mode 100644 index 00000000000..a234872005a --- /dev/null +++ b/code/datums/feedback.dm @@ -0,0 +1,55 @@ +/datum/feedback_variable + var/variable + var/value + var/details + +/datum/feedback_variable/New(var/param_variable,var/param_value = 0) + variable = param_variable + value = param_value + +/datum/feedback_variable/proc/inc(var/num = 1) + if(isnum(value)) + value += num + else + value = text2num(value) + if(isnum(value)) + value += num + else + value = num + +/datum/feedback_variable/proc/dec(var/num = 1) + if(isnum(value)) + value -= num + else + value = text2num(value) + if(isnum(value)) + value -= num + else + value = -num + +/datum/feedback_variable/proc/set_value(var/num) + if(isnum(num)) + value = num + +/datum/feedback_variable/proc/get_value() + return value + +/datum/feedback_variable/proc/get_variable() + return variable + +/datum/feedback_variable/proc/set_details(var/text) + if(istext(text)) + details = text + +/datum/feedback_variable/proc/add_details(var/text) + if(istext(text)) + if(!details) + details = text + else + details += " [text]" + +/datum/feedback_variable/proc/get_details() + return details + +/datum/feedback_variable/proc/get_parsed() + return list(variable,value,details) diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm index 3bf80f06d0d..d025a6171b1 100644 --- a/code/datums/helper_datums/global_iterator.dm +++ b/code/datums/helper_datums/global_iterator.dm @@ -109,7 +109,7 @@ Data storage vars: CRASH("The global_iterator loop \ref[src] failed to terminate in designated timeframe. This may be caused by server lagging.") return 1 - proc/process() + process() return proc/active() @@ -155,4 +155,5 @@ Data storage vars: tag = null arg_list.Cut() stop() + return QDEL_HINT_HARDDEL //Do not call ..() diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 6e09ae14901..a50bb0e7486 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -141,7 +141,7 @@ /datum/teleport/instant/science/setEffects(datum/effect/effect/system/aeffectin,datum/effect/effect/system/aeffectout) if(!aeffectin || !aeffectout) - var/datum/effect_system/sparks/aeffect = getFromPool(/datum/effect_system/sparks, null, FALSE, 5, alldirs) + var/datum/effect_system/sparks/aeffect = new(null, FALSE, 5, alldirs) effectin = effectin || aeffect effectout = effectout || aeffect return 1 diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 12e8eb2edaa..d11ab68f21b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -112,7 +112,7 @@ recipient << browse(output,"window=memory") /datum/mind/proc/edit_memory() - if(!ticker || !ticker.mode) + if(!ROUND_IS_STARTED) alert("Not before round-start!", "Alert") return @@ -211,7 +211,7 @@ var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. var/list/possible_targets = list("Free objective") - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) possible_targets += possible_target.current @@ -471,10 +471,7 @@ else mind = new /datum/mind(key) mind.original = src - if(ticker) - ticker.minds += mind - else - world.log << "## DEBUG: mind_initialize(): No ticker ready yet! Please inform Carn" + SSticker.minds += mind if(!mind.name) mind.name = real_name mind.current = src diff --git a/code/datums/observation/task_triggered.dm b/code/datums/observation/task_triggered.dm index 0003cc2ecd8..c6edb5a2e7c 100644 --- a/code/datums/observation/task_triggered.dm +++ b/code/datums/observation/task_triggered.dm @@ -2,4 +2,3 @@ var/datum/observ/task_triggered/task_triggered_event = new() /datum/observ/task_triggered name = "Task Triggered" - expected_type = /datum/scheduled_task diff --git a/code/datums/radio/frequency.dm b/code/datums/radio/frequency.dm new file mode 100644 index 00000000000..3b12103441e --- /dev/null +++ b/code/datums/radio/frequency.dm @@ -0,0 +1,59 @@ +/datum/radio_frequency + var/frequency as num + var/list/list/obj/devices = list() + +/datum/radio_frequency/proc/post_signal(obj/source, datum/signal/signal, filter = null, range = null) + var/turf/start_point + if(range) + start_point = get_turf(source) + if(!start_point) + qdel(signal) + return 0 + if (filter) + send_to_filter(source, signal, filter, start_point, range) + send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) + else + //Broadcast the signal to everyone! + for (var/next_filter in devices) + send_to_filter(source, signal, next_filter, start_point, range) + +//Sends a signal to all machines belonging to a given filter. Should be called by post_signal() +/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, filter, turf/start_point = null, range = null) + if (range && !start_point) + return + + for(var/obj/device in devices[filter]) + if(device == source) + continue + if(range) + var/turf/end_point = get_turf(device) + if(!end_point) + continue + if(start_point.z != end_point.z || get_dist(start_point, end_point) > range) + continue + + device.receive_signal(signal, TRANSMISSION_RADIO, frequency) + +/datum/radio_frequency/proc/add_listener(obj/device, filter) + if (!filter) + filter = RADIO_DEFAULT + //log_debug("add_listener(device=[device],filter=[filter]) frequency=[frequency]") + var/list/obj/devices_line = devices[filter] + if (!devices_line) + devices_line = new + devices[filter] = devices_line + devices_line+=device +// var/list/obj/devices_line___ = devices[filter_str] +// var/l = devices_line___.len + //log_debug("DEBUG: devices_line.len=[devices_line.len]") + //log_debug("DEBUG: devices(filter_str).len=[l]") + +/datum/radio_frequency/proc/remove_listener(obj/device) + for (var/devices_filter in devices) + var/list/devices_line = devices[devices_filter] + devices_line-=device + while (null in devices_line) + devices_line -= null + if (devices_line.len==0) + devices -= devices_filter + del(devices_line) diff --git a/code/datums/radio/signal.dm b/code/datums/radio/signal.dm new file mode 100644 index 00000000000..f098dad49ee --- /dev/null +++ b/code/datums/radio/signal.dm @@ -0,0 +1,35 @@ +/datum/signal + var/obj/source + + var/transmission_method = 0 //unused at the moment + //0 = wire + //1 = radio transmission + //2 = subspace transmission + + var/list/data = list() + var/encryption + + var/frequency = 0 + +/datum/signal/proc/copy_from(datum/signal/model) + source = model.source + transmission_method = model.transmission_method + data = model.data + encryption = model.encryption + frequency = model.frequency + +/datum/signal/proc/debug_print() + if (source) + . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" + else + . = "signal = {source = '[source]' ()\n" + for (var/i in data) + . += "data\[\"[i]\"\] = \"[data[i]]\"\n" + if(islist(data[i])) + var/list/L = data[i] + for(var/t in L) + . += "data\[\"[i]\"\] list has: [t]" + +/datum/signal/Destroy() + ..() + return QDEL_HINT_IWILLGC diff --git a/code/datums/repositories/crew.dm b/code/datums/repositories/crew.dm index 6fbe1863da7..ebbbafc44cb 100644 --- a/code/datums/repositories/crew.dm +++ b/code/datums/repositories/crew.dm @@ -1,4 +1,5 @@ var/global/datum/repository/crew/crew_repository = new() +var/list/map_levels = list(3,4,6) /datum/repository/crew var/list/cache_data @@ -7,16 +8,15 @@ var/global/datum/repository/crew/crew_repository = new() cache_data = list() ..() -/datum/repository/crew/proc/health_data(var/turf/T) +/datum/repository/crew/proc/health_data(var/z_level) var/list/crewmembers = list() - if(!T) + if(!z_level) return crewmembers - var/z_level = "[T.z]" - var/datum/cache_entry/cache_entry = cache_data[z_level] + var/datum/cache_entry/cache_entry = cache_data[num2text(z_level)] if(!cache_entry) cache_entry = new/datum/cache_entry - cache_data[z_level] = cache_entry + cache_data[num2text(z_level)] = cache_entry if(world.time < cache_entry.timestamp) return cache_entry.data @@ -24,13 +24,13 @@ var/global/datum/repository/crew/crew_repository = new() var/tracked = scan() for(var/obj/item/clothing/under/C in tracked) var/turf/pos = get_turf(C) - if((C) && (C.has_sensor) && (pos) && (T && pos.z == T.z) && (C.sensor_mode != SUIT_SENSOR_OFF)) + if((C) && (C.has_sensor) && (pos) && (pos.z == z_level) && (C.sensor_mode != SUIT_SENSOR_OFF)) if(istype(C.loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = C.loc if(H.w_uniform != C) continue - var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "ref" = "\ref[H]") + var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "z"=-1, "level"="", "ref" = "\ref[H]") crewmemberData["sensor_type"] = C.sensor_mode crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown") @@ -51,6 +51,7 @@ var/global/datum/repository/crew/crew_repository = new() crewmemberData["area"] = sanitize(A.name) crewmemberData["x"] = pos.x crewmemberData["y"] = pos.y + crewmemberData["z"] = pos.z crewmembers[++crewmembers.len] = crewmemberData diff --git a/code/datums/scheduled_task.dm b/code/datums/scheduled_task.dm deleted file mode 100644 index f7ffb042325..00000000000 --- a/code/datums/scheduled_task.dm +++ /dev/null @@ -1,79 +0,0 @@ -/************* -* Task Datum * -*************/ -/datum/scheduled_task - var/trigger_time - var/procedure - var/list/arguments - var/task_after_process - var/list/task_after_process_args - var/datum/scheduled_task/next - var/destroyed = FALSE - -/datum/scheduled_task/New(var/trigger_time, var/procedure, var/list/arguments, var/proc/task_after_process, var/list/task_after_process_args) - ..() - src.trigger_time = trigger_time - src.procedure = procedure - src.arguments = arguments ? arguments : list() - src.task_after_process = task_after_process ? task_after_process : /proc/destroy_scheduled_task - src.task_after_process_args = istype(task_after_process_args) ? task_after_process_args : list() - task_after_process_args += src - -/datum/scheduled_task/Destroy() - if (!destroyed) - kill(no_del = TRUE) - procedure = null - arguments.Cut() - task_after_process = null - task_after_process_args.Cut() - return ..() - -/datum/scheduled_task/proc/pre_process() - return - -/datum/scheduled_task/proc/process() - if(procedure) - call(procedure)(arglist(arguments)) - -/datum/scheduled_task/proc/post_process() - call(task_after_process)(arglist(task_after_process_args)) - -// Resets the trigger time, has no effect if the task has already triggered -/datum/scheduled_task/proc/trigger_task_in(var/trigger_in) - src.trigger_time = world.time + trigger_in - -/datum/scheduled_task/proc/kill(no_del = FALSE) - if (!destroyed) - warning("scheduler: Non-destroyed task was killed!") - destroyed = TRUE - - if (src in scheduler.tasks) - warning("scheduler: Task was not cleaned up correctly, rebuilding scheduler queue!") - scheduler.rebuild_queue() - - if (!no_del) - qdel(src) - -/datum/scheduled_task/source - var/datum/source - -/datum/scheduled_task/source/New(var/trigger_time, var/datum/source, var/procedure, var/list/arguments, var/proc/task_after_process, var/list/task_after_process_args) - src.source = source - ..(trigger_time, procedure, arguments, task_after_process, task_after_process_args) - -/datum/scheduled_task/source/Destroy() - source = null - return ..() - -/datum/scheduled_task/source/process() - call(source, procedure)(arglist(arguments)) - -/datum/scheduled_task/source/proc/source_destroyed() - destroyed = TRUE - -/proc/destroy_scheduled_task(var/datum/scheduled_task/st) - st.destroyed = TRUE - -/proc/repeat_scheduled_task(var/trigger_delay, var/datum/scheduled_task/st) - st.trigger_time = world.time + trigger_delay - scheduler.schedule(st) diff --git a/code/datums/server_greeting.dm b/code/datums/server_greeting.dm index 923535aa5b1..f1888d8a88c 100644 --- a/code/datums/server_greeting.dm +++ b/code/datums/server_greeting.dm @@ -175,6 +175,10 @@ user.info_sent = 0 + // Make sure the user has the welcome screen assets. + var/datum/asset/welcome = get_asset_datum(/datum/asset/simple/misc) + welcome.send(user) + user << browse('html/templates/welcome_screen.html', "window=greeting;size=640x500") /* diff --git a/code/datums/sun.dm b/code/datums/sun.dm deleted file mode 100644 index a78c89ac466..00000000000 --- a/code/datums/sun.dm +++ /dev/null @@ -1,58 +0,0 @@ -#define SOLAR_UPDATE_TIME 600 //duration between two updates of the whole sun/solars positions - -/datum/sun - var/angle - var/dx - var/dy - var/rate - var/list/solars // for debugging purposes, references solars_list at the constructor - var/solar_next_update // last time the sun position was checked and adjusted - -/datum/sun/New() - - solars = solars_list - rate = rand(50,200)/100 // 50% - 200% of standard rotation - if(prob(50)) // same chance to rotate clockwise than counter-clockwise - rate = -rate - solar_next_update = world.time // init the timer - angle = rand (0,360) // the station position to the sun is randomised at round start - -/*/hook/startup/proc/createSun() // handled in scheduler - sun = new /datum/sun() - return 1*/ - -// calculate the sun's position given the time of day -// at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute. -// a full rotation thus take a game hour in that case -/datum/sun/proc/calc_position() - - if(world.time < solar_next_update) //if less than 60 game secondes have passed, do nothing - return; - - angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate - - solar_next_update += SOLAR_UPDATE_TIME // since we updated the angle, set the proper time for the next loop - - // now calculate and cache the (dx,dy) increments for line drawing - - var/s = sin(angle) - var/c = cos(angle) - - // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)" - // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions - - if( abs(s) < abs(c)) - - dx = s / abs(c) - dy = c / abs(c) - - else - dx = s/abs(s) - dy = c / abs(s) - - //now tell the solar control computers to update their status and linked devices - for(var/obj/machinery/power/solar_control/SC in solars_list) - if(!SC.powernet) - solars_list.Remove(SC) - continue - SC.update() diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index f4e373d0ed0..d9bc6a448f4 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -39,10 +39,26 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/grenade/chem_grenade/incendiary) cost = 20 containertype = /obj/structure/closet/crate - containername = "Special Ops crate" + containername = "crate" group = "Security" hidden = 1 +/datum/supply_packs/randomised/illegalguns + name = "Illegal weapons crate" + num_contained = 2 + contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi, + /obj/item/weapon/gun/projectile/boltaction, + /obj/item/weapon/gun/projectile/silenced, + /obj/item/weapon/gun/projectile/pirate, + /obj/item/weapon/gun/projectile/revolver/derringer, + /obj/item/weapon/gun/projectile/dragunov, + /obj/item/weapon/gun/energy/retro) + cost = 60 + containertype = /obj/structure/closet/crate + containername = "crate" + hidden = 1 + group = "Security" + /datum/supply_packs/forensics name = "Auxiliary forensic tools" contains = list(/obj/item/weapon/forensics/sample_kit, @@ -1718,22 +1734,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "glowsticks crate" group = "Operations" -/datum/supply_packs/randomised/illegalguns - name = "Illegal weapons crate" - num_contained = 2 - contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi, - /obj/item/weapon/gun/projectile/boltaction, - /obj/item/weapon/gun/projectile/silenced, - /obj/item/weapon/gun/projectile/pirate, - /obj/item/weapon/gun/projectile/revolver/derringer, - /obj/item/weapon/gun/projectile/dragunov, - /obj/item/weapon/gun/energy/retro) - cost = 120 - containertype = /obj/structure/closet/crate - containername = "Unlabeled crate" - contraband = 1 - group = "Security" - /datum/supply_packs/spessbike name = "Space-bike Crate" contains = list(/obj/vehicle/bike) diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index 8636cb58acb..9d7399dcb18 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -9,7 +9,7 @@ var/datum/uplink/uplink = new() items_assoc = list() items = init_subtypes(/datum/uplink_item) categories = init_subtypes(/datum/uplink_category) - categories = dd_sortedObjectList(categories) + sortTim(categories, /proc/cmp_uplink_category, FALSE) for(var/datum/uplink_item/item in items) if(!item.name) @@ -23,7 +23,7 @@ var/datum/uplink/uplink = new() category.items += item for(var/datum/uplink_category/category in categories) - category.items = dd_sortedObjectList(category.items) + sortTim(category.items, /proc/cmp_uplink_item, FALSE) /datum/uplink_item var/name @@ -104,9 +104,6 @@ var/datum/uplink/uplink = new() log_and_message_admins("used \the [U.loc] to buy \a [src]") U.purchase_log[src] = U.purchase_log[src] + 1 -datum/uplink_item/dd_SortValue() - return cost(INFINITY) - /******************************** * * * Physical Uplink Entries * diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 7babc9c4c1a..59c7e271d0a 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -147,9 +147,6 @@ var/global/ManifestJSON "misc" = misc\ ) ManifestJSON = json_encode(PDA_Manifest) - return - - /obj/effect/laser name = "laser" @@ -217,3 +214,17 @@ var/global/ManifestJSON /obj/effect/spawner name = "object spawner" + +/obj/structure/spaceship + name = "Abandoned Shuttle" + desc = "An ancient and inoperable shuttle-craft" + icon = 'icons/obj/machines/spaceship.dmi' + anchored = 1 + density = 1 + +/obj/structure/mainframe + name = "Ancient Mainframe" + desc = "A long-fried AI mainframe from the 2420s. It's more fit to be holding rats than AIs at this point." + icon = 'icons/obj/mainframe.dmi' + anchored = 1 + density = 1 \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 07a75c1284a..09bc4f329c5 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -45,7 +45,6 @@ /obj/item/weapon/soap/deluxe/New() ..() desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]." - ..() /obj/item/weapon/soap/syndie desc = "An untrustworthy bar of soap. Smells of fear." diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index dfd872be0c1..596a884483f 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -125,7 +125,7 @@ datum/announcement/proc/Log(message as text, message_title as text) command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert") /proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message) - if (ticker.current_state == GAME_STATE_PLAYING) + if (SSticker.current_state == GAME_STATE_PLAYING) if(character.mind.role_alt_title) rank = character.mind.role_alt_title AnnounceArrivalSimple(character.real_name, rank, join_message) diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm index a18d2074152..128b01fffb8 100644 --- a/code/defines/procs/radio.dm +++ b/code/defines/procs/radio.dm @@ -5,13 +5,13 @@ /proc/register_radio(source, old_frequency, new_frequency, radio_filter) if(old_frequency) - radio_controller.remove_object(source, old_frequency) + SSradio.remove_object(source, old_frequency) if(new_frequency) - return radio_controller.add_object(source, new_frequency, radio_filter) + return SSradio.add_object(source, new_frequency, radio_filter) /proc/unregister_radio(source, frequency) - if(radio_controller) - radio_controller.remove_object(source, frequency) + if(SSradio) + SSradio.remove_object(source, frequency) /proc/get_frequency_name(var/display_freq) var/freq_text diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm index e10416f1128..67f9600e66e 100644 --- a/code/defines/procs/sd_Alert.dm +++ b/code/defines/procs/sd_Alert.dm @@ -95,7 +95,7 @@ sd_alert Destroy() target << browse(null,"window=\ref[src]") - ..() + return ..() New(who, tag) ..() diff --git a/code/defines/procs/statistics.dm b/code/defines/procs/statistics.dm deleted file mode 100644 index 8a1e02b7811..00000000000 --- a/code/defines/procs/statistics.dm +++ /dev/null @@ -1,101 +0,0 @@ -proc/sql_poll_population() - if(!config.sql_enabled || !config.sql_stats) - return - var/admincount = admins.len - var/playercount = 0 - for(var/mob/M in player_list) - if(M.client) - playercount += 1 - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) - log_game("SQL ERROR during population polling. Failed to connect.") - else - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/DBQuery/query = dbcon.NewQuery("INSERT INTO `ss13_population` (`playercount`, `admincount`, `time`) VALUES ([playercount], [admincount], '[sqltime]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during population polling. Error : \[[err]\]\n") - -proc/sql_report_round_start() - // TODO - if(!config.sql_enabled) - return -proc/sql_report_round_end() - // TODO - if(!config.sql_enabled) - return - -proc/sql_report_death(var/mob/living/carbon/human/H) - if(!config.sql_enabled || !config.sql_stats) - return - if(!H) - return - if(!H.key || !H.mind) - return - - var/area/placeofdeath = get_area(H) - var/podname = placeofdeath ? placeofdeath.name : "Unknown area" - - var/sqlname = sanitizeSQL(H.real_name) - var/sqlkey = sanitizeSQL(H.key) - var/sqlpod = sanitizeSQL(podname) - var/sqlspecial = sanitizeSQL(H.mind.special_role) - var/sqljob = sanitizeSQL(H.mind.assigned_role) - var/laname - var/lakey - if(H.lastattacker) - laname = sanitizeSQL(H.lastattacker:real_name) - lakey = sanitizeSQL(H.lastattacker:key) - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/coord = "[H.x], [H.y], [H.z]" - //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])" - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) - log_game("SQL ERROR during death reporting. Failed to connect.") - else - var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") - - -proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H) - if(!config.sql_enabled || !config.sql_stats) - return - if(!H) - return - if(!H.key || !H.mind) - return - - var/area/placeofdeath = get_area(H) - var/podname = placeofdeath ? placeofdeath.name : "Unknown area" - - var/sqlname = sanitizeSQL(H.real_name) - var/sqlkey = sanitizeSQL(H.key) - var/sqlpod = sanitizeSQL(podname) - var/sqlspecial = sanitizeSQL(H.mind.special_role) - var/sqljob = sanitizeSQL(H.mind.assigned_role) - var/laname - var/lakey - if(H.lastattacker) - laname = sanitizeSQL(H.lastattacker:real_name) - lakey = sanitizeSQL(H.lastattacker:key) - var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") - var/coord = "[H.x], [H.y], [H.z]" - //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])" - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) - log_game("SQL ERROR during death reporting. Failed to connect.") - else - var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')") - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during death reporting. Error : \[[err]\]\n") - - -proc/statistic_cycle() - if(!config.sql_enabled || !config.sql_stats) - return - while(1) - sql_poll_population() - sleep(6000) diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 2a86b6f763b..dbdcb210c84 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -98,7 +98,7 @@ // Prune restricted status. Broke it up for readability. // Note that this is done before jobs are handed out. - for(var/datum/mind/player in ticker.mode.get_players_for_role(role_type, id)) + for(var/datum/mind/player in SSticker.mode.get_players_for_role(role_type, id)) if(ghosts_only && !istype(player.current, /mob/dead)) log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!") else if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age) diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index 0d048ec0c44..7b70633816f 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -26,7 +26,7 @@ return for(var/image/I in recipient.current.client.images) if(I.icon_state == antag_indicator || (faction_indicator && I.icon_state == faction_indicator)) - qdel(I) + recipient.current.client.images -= I /datum/antagonist/proc/get_indicator(var/datum/mind/recipient, var/datum/mind/other) if(!antag_indicator || !other.current || !recipient.current) @@ -46,44 +46,46 @@ antag.current.client.images |= get_indicator(antag, other_antag) /datum/antagonist/proc/update_icons_added(var/datum/mind/player) + set waitfor = FALSE if(!antag_indicator || !player.current) return - spawn(0) - var/give_to_player = (!faction_invisible || !(player in faction_members)) - for(var/datum/mind/antag in current_antagonists) - if(!antag.current) - continue - if(antag.current.client) - antag.current.client.images |= get_indicator(antag, player) - if(!give_to_player) - continue - if(player.current.client) - player.current.client.images |= get_indicator(player, antag) + var/give_to_player = (!faction_invisible || !(player in faction_members)) + for(var/datum/mind/antag in current_antagonists) + if(!antag.current) + continue + if(antag.current.client) + antag.current.client.images |= get_indicator(antag, player) + if(!give_to_player) + continue + if(player.current.client) + player.current.client.images |= get_indicator(player, antag) /datum/antagonist/proc/update_icons_removed(var/datum/mind/player) + set waitfor = FALSE + if(!antag_indicator || !player.current) return - spawn(0) - clear_indicators(player) - if(player.current && player.current.client) - for(var/datum/mind/antag in current_antagonists) - if(antag.current && antag.current.client) - for(var/image/I in antag.current.client.images) - if(I.loc == player.current) - qdel(I) + + clear_indicators(player) + if(player.current && player.current.client) + for(var/datum/mind/antag in current_antagonists) + if(antag.current && antag.current.client) + for(var/image/I in antag.current.client.images) + if(I.loc == player.current) + antag.current.client.images -= I /datum/antagonist/proc/update_current_antag_max() cur_max = hard_cap - if(ticker && ticker.mode) - if(ticker.mode.antag_tags && (id in ticker.mode.antag_tags)) + if(SSticker.mode) + if(SSticker.mode.antag_tags && (id in SSticker.mode.antag_tags)) cur_max = hard_cap_round - if(ticker.mode.antag_scaling_coeff) + if(SSticker.mode.antag_scaling_coeff) var/count = 0 - if (!ticker || ticker.current_state < GAME_STATE_PLAYING) + if (SSticker.current_state < GAME_STATE_PLAYING) // If we're in the pre-game state, we count readied new players as players. // Yes, not all get spawned, but it's a close enough guestimation. for (var/mob/new_player/L in player_list) @@ -96,7 +98,7 @@ // Minimum: initial_spawn_target // Maximum: hard_cap or hard_cap_round - cur_max = max(initial_spawn_target,min(round(count/ticker.mode.antag_scaling_coeff),cur_max)) + cur_max = max(initial_spawn_target,min(round(count/SSticker.mode.antag_scaling_coeff),cur_max)) // Updates the initial spawn target to match the player count. // Intended to stop 6 nuke ops in a 15 player round. RIP those rounds. @@ -104,12 +106,12 @@ // Default is a linear rise of one antag per 5 players. var/modifier = 5 - if (ticker.mode.antag_scaling_coeff) - modifier = ticker.mode.antag_scaling_coeff + if (SSticker.mode.antag_scaling_coeff) + modifier = SSticker.mode.antag_scaling_coeff var/count = 0 - if (!ticker || ticker.current_state < GAME_STATE_PLAYING) + if (SSticker.current_state < GAME_STATE_PLAYING) // If we're in the pre-game state, we count readied new players as players. // Yes, not all get spawned, but it's a close enough guestimation. for (var/mob/new_player/L in player_list) diff --git a/code/game/antagonist/station/highlander.dm b/code/game/antagonist/station/highlander.dm index 5c696c2de74..98aabc28aa5 100644 --- a/code/game/antagonist/station/highlander.dm +++ b/code/game/antagonist/station/highlander.dm @@ -57,7 +57,7 @@ var/datum/antagonist/highlander/highlanders /proc/only_one() - if(!ticker) + if(!ROUND_IS_STARTED) alert("The game hasn't started yet!") return diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index cb92a827e6a..d1ead662f02 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -51,44 +51,19 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') var/list/forced_ambience = null var/sound_env = STANDARD_STATION - var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf + var/turf/base_turf//The base turf type of the area, which can be used to override the z-level's base turf var/no_light_control = 0 // if 1, lights in area cannot be toggled with light controller var/allow_nightmode = 0 // if 1, lights in area will be darkened by the night mode controller + var/station_area = 0 + var/centcomm_area = 0 /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ + +// Setup moved to EMI. var/list/teleportlocs = list() - -/hook/startup/proc/setupTeleportLocs() - for(var/area/AR in world) - if(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station) || istype(AR, /area/wizard_station)) continue - if(teleportlocs.Find(AR.name)) continue - var/turf/picked = pick_area_turf(AR.type, list(/proc/is_station_turf)) - if (picked) - teleportlocs += AR.name - teleportlocs[AR.name] = AR - - teleportlocs = sortAssoc(teleportlocs) - - return 1 - var/list/ghostteleportlocs = list() -/hook/startup/proc/setupGhostTeleportLocs() - for(var/area/AR in world) - if(ghostteleportlocs.Find(AR.name)) continue - if(istype(AR, /area/turret_protected/aisat) || istype(AR, /area/derelict) || istype(AR, /area/tdome) || istype(AR, /area/shuttle/specops/centcom)) - ghostteleportlocs += AR.name - ghostteleportlocs[AR.name] = AR - var/turf/picked = pick_area_turf(AR.type, list(/proc/is_station_turf)) - if (picked) - ghostteleportlocs += AR.name - ghostteleportlocs[AR.name] = AR - - ghostteleportlocs = sortAssoc(ghostteleportlocs) - - return 1 - /*-----------------------------------------------------------------------------*/ ///////// @@ -106,6 +81,7 @@ var/list/ghostteleportlocs = list() power_environ = 0 ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg') no_light_control = 1 + base_turf = /turf/space area/space/atmosalert() return @@ -145,20 +121,41 @@ area/space/atmosalert() //place to another. Look at escape shuttle for example. //All shuttles should now be under shuttle since we have smooth-wall code. +/area/shuttle/lifts/placeholder //placeholder until lift code is done. + name = "\improper Placeholder!1!!" + icon_state = "unknown" + /area/shuttle requires_power = 0 sound_env = SMALL_ENCLOSED - base_turf = /turf/space no_light_control = 1 /area/shuttle/arrival name = "\improper Arrival Shuttle" + flags = RAD_SHIELDED -/area/shuttle/arrival/pre_game +/area/shuttle/arrival/centcom icon_state = "shuttle2" + base_turf = /turf/unsimulated/floor + centcomm_area = 1 + +/area/shuttle/arrival/centcom/Entered(atom/movable/Obj, atom/oldLoc) + . = ..() + if (!istype(Obj, /mob/living) || !SSarrivals) + return + + log_debug("SSarrivals: [Obj] has entered arrival shuttle hotzone.") + + SSarrivals.on_hotzone_enter() + +/area/shuttle/arrival/transit + icon_state = "shuttle2" + centcomm_area = 1 /area/shuttle/arrival/station icon_state = "shuttle" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/escape name = "\improper Emergency Shuttle" @@ -167,14 +164,19 @@ area/space/atmosalert() /area/shuttle/escape/station name = "\improper Emergency Shuttle Station" icon_state = "shuttle2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/escape/centcom name = "\improper Emergency Shuttle Centcom" icon_state = "shuttle" + base_turf = /turf/unsimulated/floor + centcomm_area = 1 /area/shuttle/escape/transit // the area to pass through for 3 minute transit name = "\improper Emergency Shuttle Transit" icon_state = "shuttle" + centcomm_area = 1 /area/shuttle/escape_pod1 name = "\improper Escape Pod One" @@ -182,12 +184,17 @@ area/space/atmosalert() /area/shuttle/escape_pod1/station icon_state = "shuttle2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/escape_pod1/centcom icon_state = "shuttle" + base_turf = /turf/space + centcomm_area = 1 /area/shuttle/escape_pod1/transit icon_state = "shuttle" + centcomm_area = 1 /area/shuttle/escape_pod2 name = "\improper Escape Pod Two" @@ -195,12 +202,17 @@ area/space/atmosalert() /area/shuttle/escape_pod2/station icon_state = "shuttle2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/escape_pod2/centcom icon_state = "shuttle" + base_turf = /turf/space + centcomm_area = 1 /area/shuttle/escape_pod2/transit icon_state = "shuttle" + centcomm_area = 1 /area/shuttle/escape_pod3 name = "\improper Escape Pod Three" @@ -208,12 +220,17 @@ area/space/atmosalert() /area/shuttle/escape_pod3/station icon_state = "shuttle2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/escape_pod3/centcom icon_state = "shuttle" + base_turf = /turf/space + centcomm_area = 1 /area/shuttle/escape_pod3/transit icon_state = "shuttle" + centcomm_area = 1 /area/shuttle/escape_pod5 //Pod 4 was lost to meteors name = "\improper Escape Pod Five" @@ -221,58 +238,52 @@ area/space/atmosalert() /area/shuttle/escape_pod5/station icon_state = "shuttle2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/escape_pod5/centcom icon_state = "shuttle" + base_turf = /turf/space + centcomm_area = 1 /area/shuttle/escape_pod5/transit icon_state = "shuttle" + centcomm_area = 1 /area/shuttle/mining name = "\improper Mining Shuttle" /area/shuttle/mining/station icon_state = "shuttle2" + station_area = 1 /area/shuttle/mining/outpost icon_state = "shuttle" + station_area = 1 /area/shuttle/transport1/centcom icon_state = "shuttle" name = "\improper Transport Shuttle Centcom" + base_turf = /turf/unsimulated/floor + centcomm_area = 1 /area/shuttle/transport1/station icon_state = "shuttle" name = "\improper Transport Shuttle" - -/area/shuttle/alien/base - icon_state = "shuttle" - name = "\improper Alien Shuttle Base" - requires_power = 1 - -/area/shuttle/alien/mine - icon_state = "shuttle" - name = "\improper Alien Shuttle Mine" - requires_power = 1 - -/area/shuttle/prison/ - name = "\improper Prison Shuttle" - -/area/shuttle/prison/station - icon_state = "shuttle" - -/area/shuttle/prison/prison - icon_state = "shuttle2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/specops/centcom name = "\improper Special Ops Shuttle" flags = RAD_SHIELDED - -/area/shuttle/specops/centcom + base_turf = /turf/unsimulated/floor icon_state = "shuttlered" + centcomm_area = 1 /area/shuttle/specops/station icon_state = "shuttlered2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/syndicate_elite name = "\improper Merc Elite Shuttle" @@ -280,9 +291,12 @@ area/space/atmosalert() /area/shuttle/syndicate_elite/mothership icon_state = "shuttlered" + centcomm_area = 1 /area/shuttle/syndicate_elite/station icon_state = "shuttlered2" + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/administration flags = RAD_SHIELDED @@ -290,47 +304,25 @@ area/space/atmosalert() /area/shuttle/administration/centcom name = "\improper Administration Shuttle Centcom" icon_state = "shuttlered" + base_turf = /turf/unsimulated/floor + centcomm_area = 1 /area/shuttle/administration/station name = "\improper Administration Shuttle" icon_state = "shuttlered2" - -/area/shuttle/thunderdome - name = "honk" - -/area/shuttle/thunderdome/grnshuttle - name = "\improper Thunderdome GRN Shuttle" - icon_state = "green" - -/area/shuttle/thunderdome/grnshuttle/dome - name = "\improper GRN Shuttle" - icon_state = "shuttlegrn" - -/area/shuttle/thunderdome/grnshuttle/station - name = "\improper GRN Station" - icon_state = "shuttlegrn2" - -/area/shuttle/thunderdome/redshuttle - name = "\improper Thunderdome RED Shuttle" - icon_state = "red" - -/area/shuttle/thunderdome/redshuttle/dome - name = "\improper RED Shuttle" - icon_state = "shuttlered" - -/area/shuttle/thunderdome/redshuttle/station - name = "\improper RED Station" - icon_state = "shuttlered2" -// === Trying to remove these areas: + base_turf = /turf/simulated/floor/asteroid + station_area = 1 /area/shuttle/research name = "\improper Research Shuttle" /area/shuttle/research/station icon_state = "shuttle2" + station_area = 1 /area/shuttle/research/outpost icon_state = "shuttle" + station_area = 1 /area/airtunnel1/ // referenced in airtunnel.dm:759 @@ -338,24 +330,28 @@ area/space/atmosalert() // === end remove -/area/alien - name = "\improper Alien base" - icon_state = "yellow" - requires_power = 0 - no_light_control = 1 - // CENTCOM +/area/prison/solitary + name = "\improper CentComm Solitary Confinement" + icon_state = "brig" + centcomm_area = 1 + /area/centcom name = "\improper Centcom" icon_state = "centcom" requires_power = 0 dynamic_lighting = 0 no_light_control = 1 + base_turf = /turf/unsimulated/floor + centcomm_area = 1 /area/centcom/control name = "\improper Centcom Control" +/area/centcom/spawning + name = "\improper Centcom Preparatory Wing" + /area/centcom/evac name = "\improper Centcom Emergency Shuttle" @@ -391,6 +387,7 @@ area/space/atmosalert() requires_power = 0 dynamic_lighting = 0 no_light_control = 1 + centcomm_area = 1 /area/syndicate_mothership/control name = "\improper Mercenary Control Room" @@ -420,26 +417,6 @@ area/space/atmosalert() icon_state = "cave" sound_env = SMALL_ENCLOSED - - - - - - - - - - - - - - -/area/planet/clown - name = "\improper Clown Planet" - icon_state = "honk" - requires_power = 0 - no_light_control = 1 - /area/tdome name = "\improper Thunderdome" icon_state = "thunder" @@ -447,6 +424,7 @@ area/space/atmosalert() dynamic_lighting = 0 sound_env = ARENA no_light_control = 1 + centcomm_area = 1 /area/tdome/tdome1 name = "\improper Thunderdome (Team 1)" @@ -471,6 +449,7 @@ area/space/atmosalert() dynamic_lighting = 0 requires_power = 0 no_light_control = 1 + centcomm_area = 1 /area/acting/backstage name = "\improper Backstage" @@ -494,51 +473,41 @@ area/space/atmosalert() /area/syndicate_station/start name = "\improper Mercenary Forward Operating Base" icon_state = "yellow" - -/area/syndicate_station/southwest - name = "\improper south-west of SS13" - icon_state = "southwest" - -/area/syndicate_station/northwest - name = "\improper north-west of SS13" - icon_state = "northwest" - -/area/syndicate_station/northeast - name = "\improper north-east of SS13" - icon_state = "northeast" - -/area/syndicate_station/southeast - name = "\improper south-east of SS13" - icon_state = "southeast" - -/area/syndicate_station/north - name = "\improper north of SS13" - icon_state = "north" - -/area/syndicate_station/south - name = "\improper south of SS13" - icon_state = "south" - -/area/syndicate_station/commssat - name = "\improper south of the communication satellite" - icon_state = "south" - -/area/syndicate_station/mining - name = "\improper northeast of the mining station" - icon_state = "north" + centcomm_area = 1 base_turf = /turf/space +/area/syndicate_station/surface + name = "\improper surface of the station" + icon_state = "southwest" + station_area = 1 + base_turf = /turf/simulated/floor/asteroid + +/area/syndicate_station/above + name = "\improper above the station" + icon_state = "northwest" + station_area = 1 + +/area/syndicate_station/under + name = "\improper under the station" + icon_state = "northeast" + station_area = 1 + +/area/syndicate_station/caverns + name = "\improper caverns" + icon_state = "southeast" + station_area = 1 + base_turf = /turf/simulated/floor/asteroid + /area/syndicate_station/arrivals_dock name = "\improper docked with station" icon_state = "shuttle" - -/area/syndicate_station/maint_dock - name = "\improper docked with station" - icon_state = "shuttle" + station_area = 1 + base_turf = /turf/simulated/floor/asteroid /area/syndicate_station/transit name = "\improper hyperspace" icon_state = "shuttle" + centcomm_area = 1 /area/wizard_station name = "\improper Wizard's Den" @@ -546,125 +515,46 @@ area/space/atmosalert() requires_power = 0 dynamic_lighting = 0 no_light_control = 1 + centcomm_area = 1 /area/skipjack_station name = "\improper Skipjack" icon_state = "yellow" requires_power = 0 no_light_control = 1 + base_turf = /turf/space /area/skipjack_station/start name = "\improper Skipjack" icon_state = "yellow" + centcomm_area = 1 /area/skipjack_station/transit name = "\improper hyperspace" icon_state = "shuttle" + centcomm_area = 1 -/area/skipjack_station/southwest_solars - name = "\improper aft port solars" +/area/skipjack_station/surface + name = "\improper surface of the station" icon_state = "southwest" + station_area = 1 + base_turf = /turf/simulated/floor/asteroid -/area/skipjack_station/northwest_solars - name = "\improper fore port solars" +/area/skipjack_station/above + name = "\improper above the station" icon_state = "northwest" + station_area = 1 -/area/skipjack_station/northeast_solars - name = "\improper fore starboard solars" +/area/skipjack_station/under + name = "\improper under the station" icon_state = "northeast" + station_area = 1 -/area/skipjack_station/southeast_solars - name = "\improper aft starboard solars" +/area/skipjack_station/cavern + name = "\improper caverns" icon_state = "southeast" - -/area/skipjack_station/mining - name = "\improper south of mining station" - icon_state = "north" - base_turf = /turf/space - -//PRISON -/area/prison - name = "\improper Prison Station" - icon_state = "brig" - no_light_control = 1 - -/area/prison/arrival_airlock - name = "\improper Prison Station Airlock" - icon_state = "green" - requires_power = 0 - -/area/prison/control - name = "\improper Prison Security Checkpoint" - icon_state = "security" - -/area/prison/crew_quarters - name = "\improper Prison Security Quarters" - icon_state = "security" - -/area/prison/rec_room - name = "\improper Prison Rec Room" - icon_state = "green" - -/area/prison/closet - name = "\improper Prison Supply Closet" - icon_state = "dk_yellow" - -/area/prison/hallway/fore - name = "\improper Prison Fore Hallway" - icon_state = "yellow" - -/area/prison/hallway/aft - name = "\improper Prison Aft Hallway" - icon_state = "yellow" - -/area/prison/hallway/port - name = "\improper Prison Port Hallway" - icon_state = "yellow" - -/area/prison/hallway/starboard - name = "\improper Prison Starboard Hallway" - icon_state = "yellow" - -/area/prison/morgue - name = "\improper Prison Morgue" - icon_state = "morgue" - -/area/prison/medical_research - name = "\improper Prison Genetic Research" - icon_state = "medresearch" - -/area/prison/medical - name = "\improper Prison Medbay" - icon_state = "medbay" - -/area/prison/solar - name = "\improper Prison Solar Array" - icon_state = "storage" - requires_power = 0 - -/area/prison/podbay - name = "\improper Prison Podbay" - icon_state = "dk_yellow" - -/area/prison/solar_control - name = "\improper Prison Solar Array Control" - icon_state = "dk_yellow" - -/area/prison/solitary - name = "Solitary Confinement" - icon_state = "brig" - -/area/prison/cell_block/A - name = "Prison Cell Block A" - icon_state = "brig" - -/area/prison/cell_block/B - name = "Prison Cell Block B" - icon_state = "brig" - -/area/prison/cell_block/C - name = "Prison Cell Block C" - icon_state = "brig" + station_area = 1 + base_turf = /turf/simulated/floor/asteroid //////////////////// //SPACE STATION 13// @@ -672,6 +562,7 @@ area/space/atmosalert() //Maintenance + /area/maintenance flags = RAD_SHIELDED sound_env = TUNNEL_ENCLOSED @@ -683,6 +574,11 @@ area/space/atmosalert() 'sound/ambience/ambimaint4.ogg', 'sound/ambience/ambimaint5.ogg' ) + station_area = 1 + +/area/maintenance/civ + name = "\improper Civilian Maintenance" + icon_state = "maintcentral" /area/maintenance/aft name = "Aft Maintenance" @@ -764,10 +660,19 @@ area/space/atmosalert() name = "Engineering Maintenance" icon_state = "maint_engineering" +/area/maintenance/sublevel + name = "Sub-level Maintenance" + icon_state = "maint_engineering" + /area/maintenance/evahallway name = "\improper EVA Maintenance" icon_state = "maint_eva" +/area/maintenance/solarmaint + name = "\improper Roof Solar Array Maintenance" + icon_state = "maint_eva" + base_turf = /turf/space + /area/maintenance/dormitory name = "Dormitory Maintenance" icon_state = "maint_dormitory" @@ -852,6 +757,7 @@ area/space/atmosalert() /area/hallway/primary/ sound_env = LARGE_ENCLOSED allow_nightmode = 1 + station_area = 1 /area/hallway/primary/fore name = "\improper Fore Primary Hallway" @@ -913,6 +819,31 @@ area/space/atmosalert() name = "\improper Bridge" icon_state = "bridge" no_light_control = 1 + station_area = 1 + +/area/bridge/minibar + name = "\improper Command Break Room" + icon_state = "bridge" + +/area/bridge/ailobby + name = "\improper AI Elevator Access" + icon_state = "ai_foyer" + +/area/bridge/aibunker + name = "\improper AI Maintainence Bunker" + icon_state = "ai_foyer" + +/area/bridge/centcom_meetingroom + name = "\improper Level A Meeting Room" + icon_state = "bridge" + +/area/bridge/levela + name = "\improper Level A Bridge" + icon_state = "bridge" + +/area/crew_quarters/heads/cryo + name = "\improper Command Dormitory" + icon_state = "head_quarters" /area/bridge/meeting_room name = "\improper Heads of Staff Meeting Room" @@ -949,18 +880,16 @@ area/space/atmosalert() name = "\improper Courtroom" icon_state = "courtroom" -/area/mint - name = "\improper Mint" - icon_state = "green" - /area/comms name = "\improper Communications Relay" icon_state = "tcomsatcham" no_light_control = 1 + station_area = 1 /area/server name = "\improper Research Server Room" icon_state = "server" + station_area = 1 //Crew @@ -968,6 +897,7 @@ area/space/atmosalert() name = "\improper Dormitories" icon_state = "Sleep" flags = RAD_SHIELDED + station_area = 1 /area/crew_quarters/toilet name = "\improper Dormitory Toilets" @@ -993,6 +923,26 @@ area/space/atmosalert() name = "\improper Cryogenic Storage" icon_state = "Sleep" +/area/crew_quarters/sleep/main + name = "\improper Main Level Dormitories" + icon_state = "Sleep" + +/area/crew_quarters/sleep/engineering + name = "\improper Engineering Dormitories" + icon_state = "Sleep" + +/area/crew_quarters/sleep/security + name = "\improper Security Dormitories" + icon_state = "Sleep" + +/area/crew_quarters/sleep/research + name = "\improper Research Dormitories" + icon_state = "Sleep" + +/area/crew_quarters/sleep/medical + name = "\improper Medical Dormitories" + icon_state = "Sleep" + /area/crew_quarters/sleep_male name = "\improper Male Dorm" icon_state = "Sleep" @@ -1049,6 +999,10 @@ area/space/atmosalert() name = "\improper Library" icon_state = "library" sound_env = LARGE_SOFTFLOOR + station_area = 1 + +/area/chapel + station_area = 1 /area/chapel/main name = "\improper Chapel" @@ -1063,9 +1017,7 @@ area/space/atmosalert() /area/lawoffice name = "\improper Internal Affairs" icon_state = "law" - - - + station_area = 1 /area/holodeck name = "\improper Holodeck" @@ -1073,6 +1025,7 @@ area/space/atmosalert() dynamic_lighting = 0 sound_env = LARGE_ENCLOSED no_light_control = 1 + station_area = 1 /area/holodeck/alphadeck name = "\improper Holodeck Alpha" @@ -1137,7 +1090,7 @@ area/space/atmosalert() //Engineering -/area/engineering/ +/area/engineering name = "\improper Engineering" icon_state = "engineering" ambience = list( @@ -1146,6 +1099,7 @@ area/space/atmosalert() 'sound/ambience/ambisin3.ogg', 'sound/ambience/ambisin4.ogg' ) + station_area = 1 /area/engineering/atmos name = "\improper Atmospherics" @@ -1230,11 +1184,14 @@ area/space/atmosalert() /area/solar requires_power = 1 always_unpowered = 1 + dynamic_lighting = 0 base_turf = /turf/space + station_area = 1 auxport - name = "\improper Fore Port Solar Array" + name = "\improper Roof Solar Array" icon_state = "panelsA" + base_turf = /turf/space auxstarboard name = "\improper Fore Starboard Solar Array" @@ -1281,14 +1238,13 @@ area/space/atmosalert() icon_state = "SolarcontrolA" sound_env = SMALL_ENCLOSED +/area/assembly + station_area = 1 + /area/assembly/chargebay name = "\improper Mech Bay" icon_state = "mechbay" -/area/assembly/showroom - name = "\improper Robotics Showroom" - icon_state = "showroom" - /area/assembly/robotics name = "\improper Robotics Lab" icon_state = "robotics" @@ -1305,24 +1261,28 @@ area/space/atmosalert() /area/teleporter name = "\improper Teleporter" icon_state = "teleporter" - -/area/gateway - name = "\improper Gateway" - icon_state = "teleporter" - -/area/AIsattele - name = "\improper AI Satellite Teleporter Room" - icon_state = "teleporter" - ambience = list('sound/ambience/ambimalf.ogg') + station_area = 1 //MedBay +/area/medical + station_area = 1 + /area/medical/medbay name = "\improper Medbay Hallway - Port" icon_state = "medbay" ambience = list('sound/ambience/signal.ogg') //Medbay is a large area, these additional areas help level out APC load. + +/area/medical/emt + name = "\improper Emergency Technician Storage" + icon_state = "medbay" + +/area/medical/temp_morgue + name = "\improper Temporary Morgue" + icon_state = "morgue" + /area/medical/medbay2 name = "\improper Medbay Hallway - Starboard" icon_state = "medbay2" @@ -1425,10 +1385,18 @@ area/space/atmosalert() name = "\improper Pre-Op Prep Room" icon_state = "surgery" +/area/medical/surgerywing + name = "\improper Surgery Wing" + icon_state = "surgery" + /area/medical/cryo name = "\improper Cryogenics" icon_state = "cryo" +/area/medical/gen_treatment + name = "\improper General Treatment" + icon_state = "cryo" + /area/medical/exam_room name = "\improper Exam Room" icon_state = "exam_room" @@ -1446,10 +1414,16 @@ area/space/atmosalert() icon_state = "exam_room" no_light_control = 1 +/area/medical/icu + name = "\improper Intensive Care Unit" + icon_state = "cryo" + + //Security /area/security no_light_control = 1 + station_area = 1 /area/security/main name = "\improper Security Office" @@ -1493,11 +1467,15 @@ area/space/atmosalert() name = "\improper Security - Armory" icon_state = "Warden" -/area/security/detectives_office +/area/security/forensics_office name = "\improper Security - Forensic Office" icon_state = "detective" sound_env = MEDIUM_SOFTFLOOR +/area/security/detectives_office + name = "\improper Security - Detective's Office" + icon_state = "detective" + /area/security/range name = "\improper Security - Firing Range" icon_state = "firingrange" @@ -1557,12 +1535,13 @@ area/space/atmosalert() icon_state = "security" /area/security/vacantoffice2 - name = "\improper Vacant Office" + name = "\improper Security Meeting Room" icon_state = "security" /area/quartermaster name = "\improper Quartermasters" icon_state = "quart" + station_area = 1 /area/quartermaster/office name = "\improper Cargo Office" @@ -1588,21 +1567,30 @@ area/space/atmosalert() /area/janitor/ name = "\improper Custodial Closet" icon_state = "janitor" + station_area = 1 /area/hydroponics name = "\improper Hydroponics" icon_state = "hydro" no_light_control = TRUE + station_area = 1 /area/hydroponics/garden name = "\improper Garden" icon_state = "garden" //rnd (Research and Development +/area/rnd + station_area = 1 + /area/rnd/research name = "\improper Research and Development" icon_state = "research" +/area/rnd/telesci + name = "\improper Telescience Lab" + icon_state = "research" + /area/rnd/docking name = "\improper Research Dock" icon_state = "research_dock" @@ -1649,11 +1637,17 @@ area/space/atmosalert() name = "\improper Miscellaneous Research" icon_state = "toxmisc" +/area/toxins + station_area = 1 + /area/toxins/server name = "\improper Server Room" icon_state = "server" + station_area = 1 //Storage +/area/storage + station_area = 1 /area/storage/tools name = "Auxiliary Tool Storage" @@ -1723,11 +1717,24 @@ area/space/atmosalert() name = "\improper Derelict Station" icon_state = "storage" no_light_control = 1 + base_turf = /turf/space -/area/derelict/hallway/primary - name = "\improper Derelict Primary Hallway" +/area/derelict/hallway/northwest + name = "\improper NSS Aurora I" icon_state = "hallP" +/area/derelict/hallway/northeast + name = "\improper NSS Aurora I" + icon_state = "yellow" + +/area/derelict/hallway/southwest + name = "\improper NSS Aurora I" + icon_state = "hallS" + +/area/derelict/hallway/southeast + name = "\improper NSS Aurora I" + icon_state = "green" + /area/derelict/hallway/secondary name = "\improper Derelict Secondary Hallway" icon_state = "hallS" @@ -1869,20 +1876,14 @@ area/space/atmosalert() name = "Construction Site Teleporter" icon_state = "yellow" - -//area/constructionsite -// name = "\improper Construction Site Shuttle" - -//area/constructionsite -// name = "\improper Construction Site Shuttle" - - //Construction /area/construction name = "\improper Engineering Construction Area" icon_state = "yellow" no_light_control = 1 + base_turf = /turf/space + station_area = 1 /area/construction/supplyshuttle name = "\improper Supply Shuttle" @@ -1926,6 +1927,9 @@ area/space/atmosalert() name = "Emergency Storage" icon_state = "storage" +/area/turret_protected + station_area = 1 + /area/turret_protected/ai_upload name = "\improper AI Upload Chamber" icon_state = "ai_upload" @@ -2017,9 +2021,10 @@ area/space/atmosalert() // Telecommunications Satellite -/area/tcommsat/ +/area/tcommsat ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') no_light_control = 1 + station_area = 1 /area/tcommsat/entrance name = "\improper Telecoms Teleporter" @@ -2056,161 +2061,12 @@ area/space/atmosalert() /area/tcommsat/lounge name = "\improper Telecommunications Satellite Lounge" icon_state = "tcomsatlounge" + base_turf = /turf/space /area/tcommsat/powercontrol name = "\improper Telecommunications Power Control" icon_state = "tcomsatwest" - -// Away Missions -/area/awaymission - name = "\improper Strange Location" - icon_state = "away" - no_light_control = 1 - -/area/awaymission/example - name = "\improper Strange Station" - icon_state = "away" - -/area/awaymission/wwmines - name = "\improper Wild West Mines" - icon_state = "away1" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwgov - name = "\improper Wild West Mansion" - icon_state = "away2" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwrefine - name = "\improper Wild West Refinery" - icon_state = "away3" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwvault - name = "\improper Wild West Vault" - icon_state = "away3" - luminosity = 0 - -/area/awaymission/wwvaultdoors - name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power - icon_state = "away2" - requires_power = 0 - luminosity = 0 - -/area/awaymission/desert - name = "Mars" - icon_state = "away" - -/area/awaymission/BMPship1 - name = "\improper Aft Block" - icon_state = "away1" - -/area/awaymission/BMPship2 - name = "\improper Midship Block" - icon_state = "away2" - -/area/awaymission/BMPship3 - name = "\improper Fore Block" - icon_state = "away3" - -/area/awaymission/spacebattle - name = "\improper Space Battle" - icon_state = "away" - requires_power = 0 - -/area/awaymission/spacebattle/cruiser - name = "\improper Nanotrasen Cruiser" - -/area/awaymission/spacebattle/syndicate1 - name = "\improper Syndicate Assault Ship 1" - -/area/awaymission/spacebattle/syndicate2 - name = "\improper Syndicate Assault Ship 2" - -/area/awaymission/spacebattle/syndicate3 - name = "\improper Syndicate Assault Ship 3" - -/area/awaymission/spacebattle/syndicate4 - name = "\improper Syndicate War Sphere 1" - -/area/awaymission/spacebattle/syndicate5 - name = "\improper Syndicate War Sphere 2" - -/area/awaymission/spacebattle/syndicate6 - name = "\improper Syndicate War Sphere 3" - -/area/awaymission/spacebattle/syndicate7 - name = "\improper Syndicate Fighter" - -/area/awaymission/spacebattle/secret - name = "\improper Hidden Chamber" - -/area/awaymission/listeningpost - name = "\improper Listening Post" - icon_state = "away" - requires_power = 0 - -/area/awaymission/beach - name = "Beach" - icon_state = "null" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 - ambience = list() - var/sound/mysound = null - - New() - ..() - var/sound/S = new/sound() - mysound = S - S.file = 'sound/ambience/shore.ogg' - S.repeat = 1 - S.wait = 0 - S.channel = 123 - S.volume = 100 - S.priority = 255 - S.status = SOUND_UPDATE - process() - - Entered(atom/movable/Obj,atom/OldLoc) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_UPDATE - Obj << mysound - return - - Exited(atom/movable/Obj) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_PAUSED | SOUND_UPDATE - Obj << mysound - - proc/process() - set background = 1 - - var/sound/S = null - var/sound_delay = 0 - if(prob(25)) - S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) - sound_delay = rand(0, 50) - - for(var/mob/living/carbon/human/H in src) - if(H.s_tone > -55) - H.s_tone-- - H.update_body() - if(H.client) - mysound.status = SOUND_UPDATE - H << mysound - if(S) - spawn(sound_delay) - H << S - - spawn(60) .() - ///////////////////////////////////////////////////////////////////// /* Lists of areas to be used with is_type_in_list. @@ -2218,63 +2074,10 @@ area/space/atmosalert() */ // CENTCOM -var/list/centcom_areas = list ( - /area/centcom, - /area/shuttle/escape/centcom, - /area/shuttle/escape_pod1/centcom, - /area/shuttle/escape_pod2/centcom, - /area/shuttle/escape_pod3/centcom, - /area/shuttle/escape_pod5/centcom, - /area/shuttle/transport1/centcom, - /area/shuttle/administration/centcom, - /area/shuttle/specops/centcom -) +var/list/centcom_areas = list () //SPACE STATION 13 -var/list/the_station_areas = list ( - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - // /area/shuttle/transport2/station, - /area/shuttle/prison/station, - /area/shuttle/administration/station, - /area/shuttle/specops/station, - /area/maintenance, - /area/hallway, - /area/bridge, - /area/crew_quarters, - /area/holodeck, - /area/mint, - /area/library, - /area/chapel, - /area/lawoffice, - /area/engineering, - /area/solar, - /area/assembly, - /area/teleporter, - /area/medical, - /area/security, - /area/quartermaster, - /area/janitor, - /area/hydroponics, - /area/rnd, - /area/storage, - /area/construction, - /area/ai_monitored/storage/eva, //do not try to simplify to "/area/ai_monitored" --rastaf0, - /area/ai_monitored/storage/secure, - /area/ai_monitored/storage/emergency, - /area/turret_protected/ai_upload, //do not try to simplify to "/area/turret_protected" --rastaf0, - /area/turret_protected/ai_upload_foyer, - /area/turret_protected/ai -) - - - +var/list/the_station_areas = list () /area/beach name = "Keelin's private beach" @@ -2282,54 +2085,54 @@ var/list/the_station_areas = list ( luminosity = 1 dynamic_lighting = 0 requires_power = 0 - var/sound/mysound = null +// var/sound/mysound = null no_light_control = 1 + var/iter = 0 - New() - ..() - var/sound/S = new/sound() - mysound = S - S.file = 'sound/ambience/shore.ogg' - S.repeat = 1 - S.wait = 0 - S.channel = 123 - S.volume = 100 - S.priority = 255 - S.status = SOUND_UPDATE - process() +/* //todo: make this don't suck +/area/beach/New() + ..() + var/sound/S = new/sound() + mysound = S + S.file = 'sound/ambience/shore.ogg' + S.repeat = 1 + S.wait = 0 + S.channel = 123 + S.volume = 100 + S.priority = 255 + S.status = SOUND_UPDATE + process() - Entered(atom/movable/Obj,atom/OldLoc) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_UPDATE - Obj << mysound - return +/area/beach/Entered(atom/movable/Obj,atom/OldLoc) + if(ismob(Obj)) + var/mob/M = Obj + if(M.client) + mysound.status = SOUND_UPDATE + sound_to(M, mysound) - Exited(atom/movable/Obj) - if(ismob(Obj)) - if(Obj:client) - mysound.status = SOUND_PAUSED | SOUND_UPDATE - Obj << mysound +/area/beach/Exited(atom/movable/Obj) + if(ismob(Obj)) + var/mob/M = Obj + if(M.client) + mysound.status = SOUND_PAUSED | SOUND_UPDATE + sound_to(M, mysound) - proc/process() - set background = 1 +/area/beach/proc/process() + set background = 1 - var/sound/S = null - var/sound_delay = 0 - if(prob(25)) - S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) - sound_delay = rand(0, 50) + var/sound/S = null + var/sound_delay = 0 + if(prob(25)) + S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) + sound_delay = rand(0, 50) - for(var/mob/living/carbon/human/H in src) -// if(H.s_tone > -55) //ugh...nice/novel idea but please no. -// H.s_tone-- -// H.update_body() - if(H.client) - mysound.status = SOUND_UPDATE - H << mysound - if(S) - spawn(sound_delay) - H << S - - spawn(60) .() + for(var/mob/living/carbon/human/H in src) + if(H.client) + mysound.status = SOUND_UPDATE + to_chat(H, mysound) + if(S) + spawn(sound_delay) + sound_to(H, S) + spawn(60) .() +*/ diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm index 84f2c8eb4ea..c8458388d7c 100644 --- a/code/game/area/ai_monitored.dm +++ b/code/game/area/ai_monitored.dm @@ -1,18 +1,20 @@ /area/ai_monitored name = "AI Monitored Area" var/obj/machinery/camera/motioncamera = null + station_area = 1 - -/area/ai_monitored/New() - ..() +/area/ai_monitored/LateInitialize() // locate and store the motioncamera - spawn (20) // spawn on a delay to let turfs/objs load - for (var/obj/machinery/camera/M in src) - if(M.isMotion()) - motioncamera = M - M.area_motion = src - return - return + for (var/obj/machinery/camera/M in src) + if(M.isMotion()) + motioncamera = M + M.area_motion = src + return + +/area/ai_monitored/Initialize(mapload) + . = ..() + if (mapload) + return INITIALIZE_HINT_LATELOAD /area/ai_monitored/Entered(atom/movable/O) ..() @@ -22,5 +24,3 @@ /area/ai_monitored/Exited(atom/movable/O) if (ismob(O) && motioncamera) motioncamera.lostTarget(O) - - diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index cd2e7ef32f9..4cd19f34dfb 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -6,13 +6,13 @@ /area var/global/global_uid = 0 var/uid - blend_mode = BLEND_MULTIPLY -/area/New() +/area/Initialize(mapload) icon_state = "white" layer = 10 uid = ++global_uid all_areas += src + blend_mode = BLEND_MULTIPLY if(!requires_power) power_light = 0 @@ -23,24 +23,36 @@ luminosity = 0 else luminosity = 1 + if(centcomm_area) + centcom_areas |= src + if(station_area) + the_station_areas |= src - ..() -/area/proc/initialize() if(!requires_power || !apc) power_light = 0 power_equip = 0 power_environ = 0 - power_change() // all machines set to current power level, also updates lighting icon + + if (!mapload) + power_change() // all machines set to current power level, also updates lighting icon + + blend_mode = BLEND_MULTIPLY + + . = ..() /area/proc/get_contents() return contents /area/proc/get_cameras() - var/list/cameras = list() - for (var/obj/machinery/camera/C in src) - cameras += C - return cameras + . = list() + for (var/thing in SSmachinery.all_cameras) + var/obj/machinery/camera/C = thing + if (!isturf(C.loc)) + continue + + if (C.loc.loc == src) + . += C /area/proc/atmosalert(danger_level, var/alarm_source) if (danger_level == 0) diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm index c5e8b784644..be8ed0401dc 100644 --- a/code/game/area/asteroid_areas.dm +++ b/code/game/area/asteroid_areas.dm @@ -14,123 +14,126 @@ icon_state = "unexplored" -// OUTPOSTS +//S -// Small outposts +// Smalls /area/outpost/mining_north - name = "North Mining Outpost" + name = "North Mining" icon_state = "outpost_mine_north" /area/outpost/mining_west - name = "West Mining Outpost" + name = "West Mining" icon_state = "outpost_mine_west" /area/outpost/abandoned - name = "Abandoned Outpost" + name = "Abandoned" icon_state = "dark" -// Main mining outpost +// Main mining /area/outpost/mining_main icon_state = "outpost_mine_main" + station_area = 1 /area/outpost/mining_main/dorms - name = "Mining Outpost Dormitory" + name = "Mining Dormitory" /area/outpost/mining_main/medbay - name = "Mining Outpost Medical" + name = "Mining Medical" /area/outpost/mining_main/maintenance - name = "Mining Outpost Maintenance" + name = "Mining Maintenance" /area/outpost/mining_main/west_hall - name = "Mining Outpost West Hallway" + name = "Mining West Hallway" /area/outpost/mining_main/east_hall - name = "Mining Outpost East Hallway" + name = "Mining East Hallway" /area/outpost/mining_main/eva - name = "Mining Outpost EVA storage" + name = "Mining EVA storage" /area/outpost/mining_main/refinery - name = "Mining Outpost Refinery" + name = "Mining Refinery" -// Engineering Outpost +// Engineering /area/outpost/engineering icon_state = "outpost_engine" + station_area = 1 /area/outpost/engineering/hallway - name = "Engineering Outpost Hallway" + name = "Engineering Sublevel Hallway" /area/outpost/engineering/atmospherics - name = "Engineering Outpost Atmospherics" + name = "Engineering Sublevel Atmospherics" /area/outpost/engineering/power - name = "Engineering Outpost Power Distribution" + name = "Engineering Sublevel Power Distribution" /area/outpost/engineering/telecomms - name = "Engineering Outpost Telecommunications" + name = "Engineering Sublevel Telecommunications" /area/outpost/engineering/storage - name = "Engineering Outpost Storage" + name = "Engineering Sublevel Storage" /area/outpost/engineering/meeting - name = "Engineering Outpost Meeting Room" + name = "Engineering Sublevel Meeting Room" -// Research Outpost +// Research /area/outpost/research icon_state = "outpost_research" + station_area = 1 /area/outpost/research/hallway - name = "Research Outpost Hallway" + name = "Research Sublevel Hallway" /area/outpost/research/dock - name = "Research Outpost Shuttle Dock" + name = "Research Shuttle Dock" /area/outpost/research/eva - name = "Research Outpost EVA" + name = "Research Sublevel EVA" /area/outpost/research/analysis - name = "Research Outpost Sample Analysis" + name = "Research Sample Analysis" /area/outpost/research/chemistry - name = "Research Outpost Chemistry" + name = "Research Chemistry" /area/outpost/research/medical - name = "Research Outpost Medical" + name = "Research Medical" /area/outpost/research/power - name = "Research Outpost Maintenance" + name = "Research Maintenance" /area/outpost/research/isolation_a - name = "Research Outpost Isolation A" + name = "Research Isolation A" /area/outpost/research/isolation_b - name = "Research Outpost Isolation B" + name = "Research Isolation B" /area/outpost/research/isolation_c - name = "Research Outpost Isolation C" + name = "Research Isolation C" /area/outpost/research/isolation_monitoring - name = "Research Outpost Isolation Monitoring" + name = "Research Isolation Monitoring" /area/outpost/research/lab - name = "Research Outpost Laboratory" + name = "Research Sublevel Laboratory" /area/outpost/research/emergency_storage - name = "Research Outpost Emergency Storage" + name = "Research Emergency Storage" /area/outpost/research/anomaly_storage - name = "Research Outpost Anomalous Storage" + name = "Research Anomalous Storage" /area/outpost/research/anomaly_analysis - name = "Research Outpost Anomaly Analysis" + name = "Research Anomaly Analysis" /area/outpost/research/kitchen - name = "Research Outpost Kitchen" + name = "Research Kitchen" /area/outpost/research/disposal - name = "Research Outpost Waste Disposal" \ No newline at end of file + name = "Research Waste Disposal" \ No newline at end of file diff --git a/code/game/area/aurora_lift_areas.dm b/code/game/area/aurora_lift_areas.dm new file mode 100644 index 00000000000..1474fae054e --- /dev/null +++ b/code/game/area/aurora_lift_areas.dm @@ -0,0 +1,107 @@ +// Using /area/shuttle for lifts as there are checks around the code that is useful for them +// Rather not repete code over twice +// +// Maybe change to ? +// /area/movable_zone/shuttle +// /area/movable_zone/lift +// + +/area/shuttle/medical + station_area = 1 + +/area/shuttle/medical/main + name = "\improper Medical Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/medical/lower + name = "\improper Medical Lift Lower Floor" + icon_state = "shuttle" + +/area/shuttle/science + station_area = 1 + +/area/shuttle/science/main + name = "\improper Science Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/science/lower + name = "\improper Science Lift Lower Floor" + icon_state = "shuttle" + +/area/shuttle/engineering + station_area = 1 + +/area/shuttle/engineering/main + name = "\improper Engineering Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/engineering/lower + name = "\improper Engineering Lift Lower Floor" + icon_state = "shuttle" + +/area/shuttle/ai + station_area = 1 + +/area/shuttle/ai/main + name = "\improper AI Core Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/ai/lower + name = "\improper AI Core Lift Lower Floor" + icon_state = "shuttle" + +/area/shuttle/vault + station_area = 1 + +/area/shuttle/vault/main + name = "\improper Vault Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/vault/lower + name = "\improper Vault Lift Lower Floor" + icon_state = "shuttle" + +/area/shuttle/civilian + station_area = 1 + +/area/shuttle/civilian/main + name = "\improper Civilian Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/civilian/transit + name = "\improper Civilian Lift Shaft" + icon_state = "shuttle" + +/area/shuttle/civilian/upper + name = "\improper Civilian Lift Top Floor" + icon_state = "shuttle" + +/area/shuttle/cargo + station_area = 1 + +/area/shuttle/cargo/main + name = "\improper Cargo Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/cargo/transit + name = "\improper Cargo Lift Shaft" + icon_state = "shuttle" + +/area/shuttle/cargo/upper + name = "\improper Cargo Lift Top Floor" + icon_state = "shuttle" + +/area/shuttle/command + station_area = 1 + +/area/shuttle/command/main + name = "\improper Command Lift Main Floor" + icon_state = "shuttle" + +/area/shuttle/command/transit + name = "\improper Command Lift Shaft" + icon_state = "shuttle" + +/area/shuttle/command/upper + name = "\improper Command Lift Top Floor" + icon_state = "shuttle" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 44751295b56..09011735756 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -6,7 +6,7 @@ var/list/fingerprintshidden var/fingerprintslast = null var/list/blood_DNA - var/list/other_DNA = list() + var/list/other_DNA var/other_DNA_type = null var/was_bloodied var/blood_color @@ -16,7 +16,7 @@ var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom. var/simulated = 1 //filter for actions - used by lighting overlays var/fluorescent // Shows up under a UV light. - var/list/modifiers = list() + ///Chemistry. var/datum/reagents/reagents = null @@ -27,10 +27,6 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom - - - - /atom/proc/reveal_blood() return @@ -124,77 +120,6 @@ return found - - -/* -Beam code by Gunbuddy - -Beam() proc will only allow one beam to come from a source at a time. Attempting to call it more than -once at a time per source will cause graphical errors. -Also, the icon used for the beam will have to be vertical and 32x32. -The math involved assumes that the icon is vertical to begin with so unless you want to adjust the math, -its easier to just keep the beam vertical. -*/ -/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10) - //BeamTarget represents the target for the beam, basically just means the other end. - //Time is the duration to draw the beam - //Icon is obviously which icon to use for the beam, default is beam.dmi - //Icon_state is what icon state is used. Default is b_beam which is a blue beam. - //Maxdistance is the longest range the beam will persist before it gives up. - var/EndTime=world.time+time - while(BeamTarget&&world.timelength) - var/icon/II=new(icon,icon_state) - II.DrawBox(null,1,(length-N),32,32) - II.Turn(Angle) - X.icon=II - else X.icon=I - var/Pixel_x=round(sin(Angle)+32*sin(Angle)*(N+16)/32) - var/Pixel_y=round(cos(Angle)+32*cos(Angle)*(N+16)/32) - if(DX==0) Pixel_x=0 - if(DY==0) Pixel_y=0 - if(Pixel_x>32) - for(var/a=0, a<=Pixel_x,a+=32) - X.x++ - Pixel_x-=32 - if(Pixel_x<-32) - for(var/a=0, a>=Pixel_x,a-=32) - X.x-- - Pixel_x+=32 - if(Pixel_y>32) - for(var/a=0, a<=Pixel_y,a+=32) - X.y++ - Pixel_y-=32 - if(Pixel_y<-32) - for(var/a=0, a>=Pixel_y,a-=32) - X.y-- - Pixel_y+=32 - X.pixel_x=Pixel_x - X.pixel_y=Pixel_y - sleep(3) //Changing this to a lower value will cause the beam to follow more smoothly with movement, but it will also be more laggy. - //I've found that 3 ticks provided a nice balance for my use. - for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) qdel(O) - - //All atoms /atom/proc/examine(mob/user, var/distance = -1, var/infix = "", var/suffix = "") //This reformat names to get a/an properly working on item descriptions when they are bloody diff --git a/code/game/atoms_init.dm b/code/game/atoms_init.dm new file mode 100644 index 00000000000..2791ec0c061 --- /dev/null +++ b/code/game/atoms_init.dm @@ -0,0 +1,59 @@ +/atom + var/initialized = FALSE + +/atom/New(loc, ...) + // For the (currently unused) DMM Suite. + if(_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() + _preloader.load(src) + + //. = ..() //uncomment if you are dumb enough to add a /datum/New() proc + + var/do_initialize = SSatoms.initialized + if(do_initialize > INITIALIZATION_INSSATOMS) + args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD + if(SSatoms.InitAtom(src, args)) + //we were deleted + return + + var/list/created = SSatoms.created_atoms + if(created) + created += src + +/atom/proc/Initialize(mapload, ...) + if(initialized) + crash_with("Warning: [src]([type]) initialized multiple times!") + initialized = TRUE + + if (light_power && light_range) + update_light() + + if (opacity && isturf(loc)) + var/turf/T = loc + T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways. + + return INITIALIZE_HINT_NORMAL + +//called if Initialize returns INITIALIZE_HINT_LATELOAD +//This version shouldn't be called +/atom/proc/LateInitialize() + var/static/list/warned_types = list() + if(!warned_types[type]) + WARNING("Old style LateInitialize behaviour detected in [type]!") + warned_types[type] = TRUE + Initialize(FALSE) + +/atom/Destroy(force = FALSE) + . = ..() + if (reagents) + QDEL_NULL(reagents) + + LAZYCLEARLIST(our_overlays) + LAZYCLEARLIST(priority_overlays) + + QDEL_NULL(light) + + if (orbiters) + for (var/thing in orbiters) + var/datum/orbit/O = thing + if (O.orbiter) + O.orbiter.stop_orbit() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 097479b0ab9..636c8d05e8e 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -16,43 +16,26 @@ var/item_state = null // Base name of the image used for when the item is worn. Suffixes are added to this. //Also used on holdable mobs for the same info related to their held version - var/auto_init = 1 + var/can_hold_mob = FALSE -/atom/movable/New() - ..() - if (objects_initialized) - if (auto_init) - initialize() - else - objects_init_list += src - -/atom/movable/Del() - if(isnull(gcDestroyed) && loc) +// We don't really need this, and apparently defining it slows down GC. +/*/atom/movable/Del() + if(!QDELING(src) && loc) testing("GC: -- [type] was deleted via del() rather than qdel() --") crash_with("GC: -- [type] was deleted via del() rather than qdel() --") // stick a stack trace in the runtime logs -// else if(isnull(gcDestroyed)) -// testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel() -// else -// testing("GC: [type] was deleted via GC with qdel()") - ..() + ..()*/ /atom/movable/Destroy() . = ..() - if(reagents) - qdel(reagents) - reagents = null for(var/atom/movable/AM in contents) qdel(AM) loc = null + screen_loc = null if (pulledby) if (pulledby.pulling == src) pulledby.pulling = null pulledby = null -/atom/movable/proc/initialize() - if(!isnull(gcDestroyed)) - crash_with("GC: -- [type] had initialize() called after qdel() --") - /atom/movable/Bump(var/atom/A, yes) if(src.throwing) src.throw_impact(A) @@ -258,15 +241,15 @@ y = TRANSITIONEDGE + 1 x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) - if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear - var/datum/game_mode/nuclear/G = ticker.mode + if(istype(SSticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear + var/datum/game_mode/nuclear/G = SSticker.mode G.check_nuke_disks() spawn(0) if(loc) loc.Entered(src) //This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. -var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "6" = 60) +var/list/accessible_z_levels = list("8" = 5, "9" = 10, "7" = 15, "2" = 60) //by default, transition randomly to another zlevel /atom/movable/proc/get_transit_zlevel() @@ -281,13 +264,13 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "6" = 60) /atom/movable/proc/update_client_hook(atom/destination) if(locate(/mob) in src) - for(var/client/C in parallax_on_clients) + for(var/client/C in SSparallax.parallax_on_clients) if((get_turf(C.eye) == destination) && (C.mob.hud_used)) C.mob.hud_used.update_parallax_values() /mob/update_client_hook(atom/destination) if(locate(/mob) in src) - for(var/client/C in parallax_on_clients) + for(var/client/C in SSparallax.parallax_on_clients) if((get_turf(C.eye) == destination) && (C.mob.hud_used)) C.mob.hud_used.update_parallax_values() else if(client && hud_used) diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm index 5872976f53f..23257178aca 100644 --- a/code/game/base_turf.dm +++ b/code/game/base_turf.dm @@ -1,6 +1,14 @@ // Returns the lowest turf available on a given Z-level var/global/list/base_turf_by_z = list( - "5" = /turf/simulated/floor/asteroid // Moonbase. + "1" = /turf/space, + "2" = /turf/space, + "3" = /turf/simulated/floor/asteroid, + "4" = /turf/simulated/floor/asteroid, + "5" = /turf/simulated/floor/asteroid, + "6" = /turf/simulated/open, + "7" = /turf/space, + "8" = /turf/space, + "9" = /turf/space ) proc/get_base_turf(var/z) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 06f6dd0d7a7..329dca17d7b 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -52,8 +52,8 @@ var/obj/item/weapon/reagent_containers/glass/beaker = null var/opened = 0 -/obj/machinery/dna_scannernew/New() - ..() +/obj/machinery/dna_scannernew/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/clonescanner(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/game/gamemodes/changeling/changeling_items.dm b/code/game/gamemodes/changeling/changeling_items.dm index cf27d5301ba..dd34ed6af25 100644 --- a/code/game/gamemodes/changeling/changeling_items.dm +++ b/code/game/gamemodes/changeling/changeling_items.dm @@ -18,18 +18,19 @@ var/mob/living/creator /obj/item/weapon/melee/arm_blade/New() - processing_objects |= src + ..() + START_PROCESSING(SSprocessing, src) /obj/item/weapon/melee/arm_blade/Destroy() - processing_objects -= src - ..() + STOP_PROCESSING(SSprocessing, src) + return ..() /obj/item/weapon/melee/arm_blade/dropped() visible_message("With a sickening crunch, [user] reforms their arm blade into an arm!", "We assimilate the weapon back into our body.", "You hear organic matter ripping and tearing!") playsound(loc, 'sound/effects/blobattack.ogg', 30, 1) - spawn(1) if(src) qdel(src) + QDEL_IN(src, 1) /obj/item/weapon/melee/arm_blade/process() if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) @@ -44,7 +45,7 @@ host.pinned -= src host.embedded -= src host.drop_from_inventory(src) - spawn(1) if(src) qdel(src) + QDEL_IN(src, 1) /obj/item/weapon/shield/riot/changeling name = "shield-like mass" @@ -62,18 +63,19 @@ var/mob/living/creator /obj/item/weapon/shield/riot/changeling/New() - processing_objects |= src + ..() + START_PROCESSING(SSprocessing, src) /obj/item/weapon/shield/riot/changeling/Destroy() - processing_objects -= src - ..() + STOP_PROCESSING(SSprocessing, src) + return ..() /obj/item/weapon/shield/riot/changeling/dropped() visible_message("With a sickening crunch, [user] reforms their arm blade into an arm!", "We assimilate the weapon back into our body.", "You hear organic matter ripping and tearing!") playsound(loc, 'sound/effects/blobattack.ogg', 30, 1) - spawn(1) if(src) qdel(src) + QDEL_IN(src, 1) /obj/item/weapon/shield/riot/changeling/process() if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) @@ -88,4 +90,4 @@ host.pinned -= src host.embedded -= src host.drop_from_inventory(src) - spawn(1) if(src) qdel(src) \ No newline at end of file + QDEL_IN(src, 1) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 8d64ad8498f..a12ff6b5311 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -553,18 +553,18 @@ /obj/structure/cult/pylon/update_icon() - overlays.Cut() + cut_overlays() if (pylonmode == 2) anchored = 1 if (empowered > 0) - overlays += "crystal_overcharge" + add_overlay("crystal_overcharge") set_light(7, 3, l_color = "#a160bf") else set_light(6, 3, l_color = "#3e0000") - overlays += "crystal_turret" + add_overlay("crystal_turret") else if (!isbroken) set_light(5, 2, l_color = "#3e0000") - overlays += "crystal_idle" + add_overlay("crystal_idle") if (pylonmode == 1) anchored = 1 else @@ -633,10 +633,12 @@ return /obj/effect/gateway/active/New() - spawn(rand(30,60) SECONDS) - var/t = pick(spawnable) - new t(src.loc) - qdel(src) + addtimer(CALLBACK(src, .proc/do_spawn), rand(30, 60) SECONDS) + +/obj/effect/gateway/active/proc/do_spawn() + var/thing = pick(spawnable) + new thing(src.loc) + qdel(src) /obj/effect/gateway/active/Crossed(var/atom/A) if(!istype(A, /mob/living)) diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm index 3dcc852da4e..bece6229676 100644 --- a/code/game/gamemodes/cult/hell_universe.dm +++ b/code/game/gamemodes/cult/hell_universe.dm @@ -42,7 +42,6 @@ In short: // Apply changes when entering state /datum/universal_state/hell/OnEnter() set background = 1 - garbage_collector.garbage_collect = 0 escape_list = get_area_turfs(locate(/area/hallway/secondary/exit)) @@ -56,7 +55,6 @@ In short: runedec += 9000 //basically removing the rune cap - /datum/universal_state/hell/proc/AreaSet() for(var/area/A in all_areas) if(!istype(A,/area) || istype(A, /area/space)) @@ -67,16 +65,18 @@ In short: /datum/universal_state/hell/OverlayAndAmbientSet() set waitfor = FALSE - for(var/turf/T in turfs) + for(var/turf/T in world) // Expensive, but CHECK_TICK should prevent lag. if(istype(T, /turf/space)) T.overlays += image(icon = T.icon, icon_state = "hell01") else - if(!T.holy && prob(1) && !(T.z in config.admin_levels)) - new /obj/effect/gateway/active/cult(T) T.underlays += "hell01" + + if (istype(T, /turf/simulated/floor) && !T.holy && prob(1)) + new /obj/effect/gateway/active/cult(T) + CHECK_TICK - for(var/datum/lighting_corner/C in global.all_lighting_corners) + for(var/datum/lighting_corner/C in SSlighting.lighting_corners) if (!C.active) continue @@ -84,11 +84,6 @@ In short: CHECK_TICK /datum/universal_state/hell/proc/MiscSet() - for(var/turf/simulated/floor/T in turfs) - if(!T.holy && prob(1)) - new /obj/effect/gateway/active/cult(T) - CHECK_TICK - for (var/obj/machinery/firealarm/alm in machines) if (!(alm.stat & BROKEN)) alm.ex_act(2) diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm index 4a696a3da49..4ea576d2af1 100644 --- a/code/game/gamemodes/cult/narsie.dm +++ b/code/game/gamemodes/cult/narsie.dm @@ -22,7 +22,7 @@ var/global/list/narsie_list = list() /obj/singularity/narsie/Destroy() narsie_list.Remove(src) - ..() + return ..() /obj/singularity/narsie/large name = "Nar-Sie" @@ -142,6 +142,8 @@ var/global/list/narsie_list = list() return 1 /obj/singularity/narsie/proc/narsiefloor(var/turf/T)//leaving "footprints" + if (QDELETED(T)) + return if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space))) if(T.icon_state != "cult-narsie") T.desc = "something that goes beyond your understanding went this way" @@ -168,6 +170,7 @@ var/global/list/narsie_list = list() old_narsie(A) /obj/singularity/narsie/proc/new_narsie(const/atom/A) + CHECK_TICK if (istype(A, /mob/) && (get_dist(A, src) <= 7)) var/mob/M = A @@ -200,6 +203,8 @@ var/global/list/narsie_list = list() if(!(A.singuloCanEat())) return 0 + CHECK_TICK + if (istype(A, /mob/living/)) var/mob/living/C2 = A @@ -232,6 +237,8 @@ var/global/list/narsie_list = list() if(!(A.singuloCanEat())) return 0 + CHECK_TICK + if (istype(A, /mob/living/)) var/mob/living/C2 = A diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index b173ecf824f..83435fdd572 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -81,7 +81,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," qdel(blood_image) blood_image = null rune_list.Remove(src) - ..() + return ..() examine(mob/user) ..() diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index fda06c032f5..c25de54ec15 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -642,7 +642,7 @@ var/list/sacrificed = list() if(lamb.species.rarity_value > 3) worth = 1 - if (ticker.mode.name == "Cult") + if (SSticker.mode.name == "Cult") if(H.mind == cult.sacrifice_target) if(cultsinrange.len >= 3) sacrificed += H.mind diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm index 2f12370f586..44a5aa5d64e 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm @@ -6,60 +6,55 @@ icon = 'icons/turf/space.dmi' icon_state = "bluespace" - //luminosity = 5 - //l_color="#0066FF" - layer = LIGHTING_LAYER+1 + layer = LIGHTING_LAYER + 1 + light_color = "#0066FF" + light_range = 2 + light_power = 2 - var/spawned=0 // DIR mask - var/next_check=0 + var/spawned = 0 // DIR mask + var/next_check = 0 var/list/avail_dirs = list(NORTH,SOUTH,EAST,WEST) -/turf/unsimulated/wall/supermatter/New() - ..() - processing_turfs.Add(src) - next_check = world.time+5 SECONDS +/turf/unsimulated/wall/supermatter/Initialize() + . = ..() + // Kick-start the timer chain. + addtimer(CALLBACK(src, .proc/tick), 5 SECONDS) -/turf/unsimulated/wall/supermatter/Destroy() - processing_turfs.Remove(src) - ..() - -/turf/unsimulated/wall/supermatter/process() - // Only check infrequently. - if(next_check>world.time) return - - // No more available directions? Shut down process(). - if(avail_dirs.len==0) - processing_objects.Remove(src) - return 1 - - // We're checking, reset the timer. - next_check = world.time+5 SECONDS +/turf/unsimulated/wall/supermatter/proc/tick() + // No more available directions? Bail. + if(avail_dirs.len == 0) + return // Choose a direction. var/pdir = pick(avail_dirs) avail_dirs -= pdir - var/turf/T=get_step(src,pdir) + var/turf/T = get_step(src, pdir) // EXPAND if(!istype(T,type)) // Do pretty fadeout animation for 1s. new /obj/effect/overlay/bluespacify(T) - spawn(10) - // Nom. - for(var/atom/movable/A in T) - if(A) - if(istype(A,/mob/living)) - qdel(A) - else if(istype(A,/mob)) // Observers, AI cameras. - continue - else - qdel(A) - T.ChangeTurf(type) + addtimer(CALLBACK(src, .proc/after_tick, T), 10) if((spawned & (NORTH|SOUTH|EAST|WEST)) == (NORTH|SOUTH|EAST|WEST)) - processing_turfs -= src return + addtimer(CALLBACK(src, .proc/tick), 5 SECONDS) + +/turf/unsimulated/wall/supermatter/proc/after_tick(turf/T) + T.lighting_clear_overlay() + for(var/atom/movable/A in T) + if (A && A.simulated) // No eating lighting overlays. + if(istype(A, /mob/living)) + qdel(A) + else if(istype(A, /mob)) // Observers, AI cameras. + continue + else + qdel(A) + + CHECK_TICK + T.ChangeTurf(type) + /turf/unsimulated/wall/supermatter/attack_generic(mob/user as mob) return attack_hand(user) @@ -98,6 +93,9 @@ /turf/unsimulated/wall/supermatter/Bumped(atom/AM as mob|obj) + if (!AM.simulated) + return ..() + if(istype(AM, /mob/living)) AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\ "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm index fbea24d2d84..06210d5e9d4 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm @@ -14,10 +14,10 @@ var/global/universe_has_ended = 0 /datum/universal_state/supermatter_cascade/OnTurfChange(var/turf/T) if(T.name == "space") - T.overlays += image(icon = T.icon, icon_state = "end01") + T.add_overlay("end01") T.underlays -= "end01" else - T.overlays -= image(icon = T.icon, icon_state = "end01") + T.cut_overlay("end01") /datum/universal_state/supermatter_cascade/DecayTurf(var/turf/T) if(istype(T,/turf/simulated/wall)) @@ -37,7 +37,7 @@ var/global/universe_has_ended = 0 // Apply changes when entering state /datum/universal_state/supermatter_cascade/OnEnter() set background = 1 - garbage_collector.garbage_collect = 0 + world << "You are blinded by a brilliant flash of energy." world << sound('sound/effects/cascade.ogg') @@ -60,8 +60,14 @@ var/global/universe_has_ended = 0 PlayerSet() new /obj/singularity/narsie/large/exit(pick(endgame_exits)) - spawn(rand(30,60) SECONDS) - var/txt = {" + var/time = rand(30, 60) + log_debug("universal_state/cascade: Announcing to world in [time] seconds.") + log_debug("universal_state/cascade: Ending universe in [(time SECONDS + 5 MINUTES)/10] seconds.") + addtimer(CALLBACK(src, .proc/announce_to_world), time SECONDS) + addtimer(CALLBACK(src, .proc/end_universe), time SECONDS + 5 MINUTES) + +/datum/universal_state/supermatter_cascade/proc/announce_to_world() + var/txt = {" There's been a galaxy-wide electromagnetic pulse. All of our systems are heavily damaged and many personnel are dead or dying. We are seeing increasing indications of the universe itself beginning to unravel. [station_name()], you are the only facility nearby a bluespace rift, which is near your research outpost. You are hereby directed to enter the rift using all means necessary, quite possibly as the last of your species alive. @@ -71,18 +77,17 @@ You have five minutes before the universe collapses. Good l\[\[###!!!- AUTOMATED ALERT: Link to [command_name()] lost. The access requirements on the Asteroid Shuttles' consoles have now been revoked. -"} - priority_announcement.Announce(txt,"SUPERMATTER CASCADE DETECTED") + "} + priority_announcement.Announce(txt,"SUPERMATTER CASCADE DETECTED") - for(var/obj/machinery/computer/shuttle_control/C in machines) - if(istype(C, /obj/machinery/computer/shuttle_control/research) || istype(C, /obj/machinery/computer/shuttle_control/mining)) - C.req_access = list() - C.req_one_access = list() + for(var/obj/machinery/computer/shuttle_control/C in machines) + if(istype(C, /obj/machinery/computer/shuttle_control/research) || istype(C, /obj/machinery/computer/shuttle_control/mining)) + C.req_access = list() + C.req_one_access = list() - spawn(5 MINUTES) - ticker.station_explosion_cinematic(0,null) // TODO: Custom cinematic - universe_has_ended = 1 - return +/datum/universal_state/supermatter_cascade/proc/end_universe() + SSticker.station_explosion_cinematic(0,null) // TODO: Custom cinematic + universe_has_ended = 1 /datum/universal_state/supermatter_cascade/proc/AreaSet() for(var/area/A in all_areas) @@ -94,15 +99,15 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked /datum/universal_state/supermatter_cascade/OverlayAndAmbientSet() set waitfor = FALSE - for(var/turf/T in turfs) + for(var/turf/T in world) if(istype(T, /turf/space)) - T.overlays += image(icon = T.icon, icon_state = "end01") + T.add_overlay("end01") else if (!(T.z in config.admin_levels)) T.underlays += "end01" CHECK_TICK - for(var/datum/lighting_corner/C in global.all_lighting_corners) + for(var/datum/lighting_corner/C in SSlighting.lighting_corners) if (!C.active) continue diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm index d657b50d111..df7c87c1d9d 100644 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ b/code/game/gamemodes/epidemic/epidemic.dm @@ -81,8 +81,6 @@ world << "There aren't enough players for this mode!" world << "Rebooting world in 5 seconds." - if(blackbox) - blackbox.save_all_data_to_sql() sleep(50) world.Reboot() @@ -132,7 +130,7 @@ checkwin_counter++ if(checkwin_counter >= 20) if(!finished) - ticker.mode.check_win() + SSticker.mode.check_win() checkwin_counter = 0 return 0 @@ -165,7 +163,7 @@ ///Handle crew failure(station explodes)/// /////////////////////////////////////////// /datum/game_mode/epidemic/proc/crew_lose() - ticker.mode:explosion_in_progress = 1 + SSticker.mode:explosion_in_progress = 1 for(var/mob/M in world) if(M.client) M << 'sound/machines/Alarm.ogg' @@ -175,11 +173,10 @@ world << "[i].." sleep(10) enter_allowed = 0 - if(ticker) - ticker.station_explosion_cinematic(0,null) - if(ticker.mode) - ticker.mode:station_was_nuked = 1 - ticker.mode:explosion_in_progress = 0 + SSticker.station_explosion_cinematic(0,null) + if(SSticker.mode) + SSticker.mode:station_was_nuked = 1 + SSticker.mode:explosion_in_progress = 0 finished = 2 return diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm index 787f28a7ee2..af4d72d03d5 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/game/gamemodes/events/holidays/Christmas.dm @@ -23,9 +23,6 @@ desc = "Directions for use: Requires two people, one to pull each end." var/cracked = 0 -/obj/item/weapon/toy/xmas_cracker/New() - ..() - /obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user, var/target_zone) if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() ) target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index c093642416d..6a06646b9a6 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -106,9 +106,9 @@ var/global/list/additional_antag_types = list() return var/datum/antagonist/antag = all_antag_types[choice] if(antag) - if(!islist(ticker.mode.antag_templates)) - ticker.mode.antag_templates = list() - ticker.mode.antag_templates |= antag + if(!islist(SSticker.mode.antag_templates)) + SSticker.mode.antag_templates = list() + SSticker.mode.antag_templates |= antag message_admins("Admin [key_name_admin(usr)] added [antag.role_text] template to game mode.") // I am very sure there's a better way to do this, but I'm not sure what it might be. ~Z @@ -217,8 +217,8 @@ var/global/list/additional_antag_types = list() emergency_shuttle.auto_recall = 1 feedback_set_details("round_start","[time2text(world.realtime)]") - if(ticker && ticker.mode) - feedback_set_details("game_mode","[ticker.mode]") + if(SSticker.mode) + feedback_set_details("game_mode","[SSticker.mode]") feedback_set_details("server_ip","[world.internet_address]:[world.port]") return 1 @@ -444,7 +444,7 @@ var/global/list/additional_antag_types = list() return candidates // If this is being called post-roundstart then it doesn't care about ready status. - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker.current_state == GAME_STATE_PLAYING) for(var/mob/player in player_list) if(!player.client) continue @@ -602,16 +602,16 @@ proc/get_nt_opposed() set name = "Check Round Info" set category = "OOC" - if(!ticker || !ticker.mode) + if(!SSticker.mode) usr << "Something is terribly wrong; there is no gametype." return if(master_mode != "secret") - usr << "The roundtype is [capitalize(ticker.mode.name)]" - if(ticker.mode.round_description) - usr << "[ticker.mode.round_description]" - if(ticker.mode.extended_round_description) - usr << "[ticker.mode.extended_round_description]" + usr << "The roundtype is [capitalize(SSticker.mode.name)]" + if(SSticker.mode.round_description) + usr << "[SSticker.mode.round_description]" + if(SSticker.mode.extended_round_description) + usr << "[SSticker.mode.extended_round_description]" else usr << "Shhhh. It's a secret." return diff --git a/code/game/gamemodes/game_mode_latespawn.dm b/code/game/gamemodes/game_mode_latespawn.dm index 298cd467221..c531e0de97a 100644 --- a/code/game/gamemodes/game_mode_latespawn.dm +++ b/code/game/gamemodes/game_mode_latespawn.dm @@ -5,7 +5,7 @@ ///process() ///Called by the gameticker -/datum/game_mode/proc/process() +/datum/game_mode/process() if(round_autoantag && world.time >= next_spawn && !emergency_shuttle.departed) process_autoantag() diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm deleted file mode 100644 index 71441625f1f..00000000000 --- a/code/game/gamemodes/gameticker.dm +++ /dev/null @@ -1,467 +0,0 @@ -var/global/datum/controller/gameticker/ticker - -/datum/controller/gameticker - var/const/restart_timeout = 600 - var/current_state = GAME_STATE_PREGAME - - var/hide_mode = 0 - var/datum/game_mode/mode = null - var/post_game = 0 - var/event_time = null - var/event = 0 - - var/login_music // music played in pregame lobby - - var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking. - - var/Bible_icon_state // icon_state the chaplain has chosen for his bible - var/Bible_item_state // item_state the chaplain has chosen for his bible - var/Bible_name // name of the bible - var/Bible_deity_name - - var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders - - var/list/syndicate_coalition = list() // list of traitor-compatible factions - var/list/factions = list() // list of all factions - var/list/availablefactions = list() // list of factions with openings - - var/pregame_timeleft = 0 - - var/delay_end = 0 //if set to nonzero, the round will not restart on it's own - - var/triai = 0//Global holder for Triumvirate - var/tipped = 0 //Did we broadcast the tip of the day yet? - var/selected_tip // What will be the tip of the day? - - var/round_end_announced = 0 // Spam Prevention. Announce round end only once. - -/datum/controller/gameticker/proc/pregame() - login_music = pick(\ - /*'sound/music/halloween/skeletons.ogg',\ - 'sound/music/halloween/halloween.ogg',\ - 'sound/music/halloween/ghosts.ogg'*/ - 'sound/music/space.ogg',\ - 'sound/music/traitor.ogg',\ - 'sound/music/title2.ogg',\ - 'sound/music/clouds.s3m',\ - 'sound/music/space_oddity.ogg') //Ground Control to Major Tom, this song is cool, what's going on? - do - pregame_timeleft = 180 - world << "Welcome to the pre-game lobby!" - world << "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds" - while(current_state == GAME_STATE_PREGAME) - for(var/i=0, i<10, i++) - sleep(1) - vote.process() - if(round_progressing) - pregame_timeleft-- - if(pregame_timeleft == config.vote_autogamemode_timeleft) - if(!vote.time_remaining) - vote.autogamemode() //Quit calling this over and over and over and over. - while(vote.time_remaining) - for(var/i=0, i<10, i++) - sleep(1) - vote.process() - if(pregame_timeleft <= 10 && !tipped) - send_tip_of_the_round() - tipped = 1 - if(pregame_timeleft <= 0) - current_state = GAME_STATE_SETTING_UP - while (!setup()) - - -/datum/controller/gameticker/proc/setup() - //Create and announce mode - if(master_mode=="secret") - src.hide_mode = 1 - - var/list/runnable_modes = config.get_runnable_modes() - if((master_mode=="random") || (master_mode=="secret")) - if(!runnable_modes.len) - current_state = GAME_STATE_PREGAME - world << "Unable to choose playable game mode. Reverting to pre-game lobby." - return 0 - if(secret_force_mode != "secret") - src.mode = config.pick_mode(secret_force_mode) - if(!src.mode) - var/list/weighted_modes = list() - for(var/datum/game_mode/GM in runnable_modes) - weighted_modes[GM.config_tag] = config.probabilities[GM.config_tag] - src.mode = gamemode_cache[pickweight(weighted_modes)] - else - src.mode = config.pick_mode(master_mode) - - if(!src.mode) - current_state = GAME_STATE_PREGAME - world << "Serious error in mode setup! Reverting to pre-game lobby." - return 0 - - job_master.ResetOccupations() - src.mode.create_antagonists() - src.mode.pre_setup() - job_master.DivideOccupations() // Apparently important for new antagonist system to register specific job antags properly. - - if(!src.mode.can_start()) - world << "Unable to start [mode.name]. Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby." - current_state = GAME_STATE_PREGAME - mode.fail_setup() - mode = null - job_master.ResetOccupations() - return 0 - - if(hide_mode) - world << "The current game mode is - Secret!" - if(runnable_modes.len) - var/list/tmpmodes = new - for (var/datum/game_mode/M in runnable_modes) - tmpmodes+=M.name - tmpmodes = sortList(tmpmodes) - if(tmpmodes.len) - world << "Possibilities: [english_list(tmpmodes)]" - else - src.mode.announce() - - setup_economy() - current_state = GAME_STATE_PLAYING - create_characters() //Create player characters and transfer them - collect_minds() - equip_characters() - data_core.manifest() - - callHook("roundstart") - - shuttle_controller.setup_shuttle_docks() - - spawn(0)//Forking here so we dont have to wait for this to finish - mode.post_setup() - //Cleanup some stuff - for(var/obj/effect/landmark/start/S in landmarks_list) - //Deleting Startpoints but we need the ai point to AI-ize people later - if (S.name != "AI") - qdel(S) - world << "Enjoy the game!" - world << sound('sound/AI/welcome.ogg') // Skie - //Holiday Round-start stuff ~Carn - Holiday_Game_Start() - - //start_events() //handles random events and space dust. - //new random event system is handled from the MC. - - var/admins_number = 0 - for(var/client/C) - if(C.holder && (C.holder.rights & (R_MOD|R_ADMIN))) - admins_number++ - if(admins_number == 0) - discord_bot.send_to_admins("@here Round has started with no admins online.") - -/* supply_controller.process() //Start the supply shuttle regenerating points -- TLE // handled in scheduler - master_controller.process() //Start master_controller.process() - lighting_controller.process() //Start processing DynamicAreaLighting updates - */ - - processScheduler.start() - - if(config.sql_enabled) - statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE - - return 1 - -/datum/controller/gameticker - //station_explosion used to be a variable for every mob's hud. Which was a waste! - //Now we have a general cinematic centrally held within the gameticker....far more efficient! - var/obj/screen/cinematic = null - - //Plus it provides an easy way to make cinematics for other events. Just use this as a template :) - proc/station_explosion_cinematic(var/station_missed=0, var/override = null) - if( cinematic ) return //already a cinematic in progress! - - //initialise our cinematic screen object - cinematic = new(src) - cinematic.icon = 'icons/effects/station_explosion.dmi' - cinematic.icon_state = "station_intact" - cinematic.layer = 20 - cinematic.mouse_opacity = 0 - cinematic.screen_loc = "1,0" - - var/obj/structure/bed/temp_buckle = new(src) - //Incredibly hackish. It creates a bed within the gameticker (lol) to stop mobs running around - if(station_missed) - for(var/mob/living/M in living_mob_list) - M.buckled = temp_buckle //buckles the mob so it can't do anything - if(M.client) - M.client.screen += cinematic //show every client the cinematic - else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived" - for(var/mob/living/M in living_mob_list) - M.buckled = temp_buckle - if(M.client) - M.client.screen += cinematic - - switch(M.z) - if(0) //inside a crate or something - var/turf/T = get_turf(M) - if(T && T.z in config.station_levels) //we don't use M.death(0) because it calls a for(/mob) loop and - M.health = 0 - M.stat = DEAD - if(1) //on a z-level 1 turf. - M.health = 0 - M.stat = DEAD - - //Now animate the cinematic - switch(station_missed) - if(1) //nuke was nearby but (mostly) missed - if( mode && !override ) - override = mode.name - switch( override ) - if("mercenary") //Nuke wasn't on station when it blew up - flick("intro_nuke",cinematic) - sleep(35) - world << sound('sound/effects/explosionfar.ogg') - flick("station_intact_fade_red",cinematic) - cinematic.icon_state = "summary_nukefail" - else - flick("intro_nuke",cinematic) - sleep(35) - world << sound('sound/effects/explosionfar.ogg') - //flick("end",cinematic) - - - if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation - sleep(50) - world << sound('sound/effects/explosionfar.ogg') - - - else //station was destroyed - if( mode && !override ) - override = mode.name - switch( override ) - if("mercenary") //Nuke Ops successfully bombed the station - flick("intro_nuke",cinematic) - sleep(35) - flick("station_explode_fade_red",cinematic) - world << sound('sound/effects/explosionfar.ogg') - cinematic.icon_state = "summary_nukewin" - if("AI malfunction") //Malf (screen,explosion,summary) - flick("intro_malf",cinematic) - sleep(76) - flick("station_explode_fade_red",cinematic) - world << sound('sound/effects/explosionfar.ogg') - cinematic.icon_state = "summary_malf" - if("blob") //Station nuked (nuke,explosion,summary) - flick("intro_nuke",cinematic) - sleep(35) - flick("station_explode_fade_red",cinematic) - world << sound('sound/effects/explosionfar.ogg') - cinematic.icon_state = "summary_selfdes" - else //Station nuked (nuke,explosion,summary) - flick("intro_nuke",cinematic) - sleep(35) - flick("station_explode_fade_red", cinematic) - world << sound('sound/effects/explosionfar.ogg') - cinematic.icon_state = "summary_selfdes" - for(var/mob/living/M in living_mob_list) - if(M.loc.z in config.station_levels) - M.death()//No mercy - //If its actually the end of the round, wait for it to end. - //Otherwise if its a verb it will continue on afterwards. - sleep(300) - - if(cinematic) qdel(cinematic) //end the cinematic - if(temp_buckle) qdel(temp_buckle) //release everybody - return - - - proc/create_characters() - for(var/mob/new_player/player in player_list) - if(player && player.ready && player.mind) - if(player.mind.assigned_role=="AI") - player.close_spawn_windows() - player.AIize() - else if(!player.mind.assigned_role) - continue - else - player.create_character() - qdel(player) - - - proc/collect_minds() - for(var/mob/living/player in player_list) - if(player.mind) - ticker.minds += player.mind - - - proc/equip_characters() - var/captainless=1 - for(var/mob/living/carbon/human/player in player_list) - if(player && player.mind && player.mind.assigned_role) - if(player.mind.assigned_role == "Captain") - captainless=0 - if(!player_is_antag(player.mind, only_offstation_roles = 1)) - job_master.EquipRank(player, player.mind.assigned_role, 0) - UpdateFactionList(player) - equip_custom_items(player) - if(captainless) - for(var/mob/M in player_list) - if(!istype(M,/mob/new_player)) - M << "Captainship not forced on anyone." - - - proc/process() - if(current_state != GAME_STATE_PLAYING) - return 0 - - mode.process() - -// emergency_shuttle.process() //handled in scheduler - - var/game_finished = 0 - var/mode_finished = 0 - if (config.continous_rounds) - game_finished = (emergency_shuttle.returned() || mode.station_was_nuked) - mode_finished = (!post_game && mode.check_finished()) - else - game_finished = (mode.check_finished() || (emergency_shuttle.returned() && emergency_shuttle.evac == 1)) || universe_has_ended - mode_finished = game_finished - - if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game)) - current_state = GAME_STATE_FINISHED - - spawn - declare_completion() - - spawn(50) - callHook("roundend") - - if (universe_has_ended) - if(mode.station_was_nuked) - feedback_set_details("end_proper","nuke") - else - feedback_set_details("end_proper","universe destroyed") - if(!delay_end) - world << "Rebooting due to destruction of station in [restart_timeout/10] seconds" - else - feedback_set_details("end_proper","proper completion") - if(!delay_end) - world << "Restarting in [restart_timeout/10] seconds" - - - if(blackbox) - blackbox.save_all_data_to_sql() - - if(!delay_end) - sleep(restart_timeout) - if(!delay_end) - world.Reboot() - else - world << "An admin has delayed the round end" - else - world << "An admin has delayed the round end" - - else if (mode_finished) - post_game = 1 - - mode.cleanup() - - //call a transfer shuttle vote - spawn(50) - if(!round_end_announced) // Spam Prevention. Now it should announce only once. - world << "The round has ended!" - round_end_announced = 1 - vote.autotransfer() - - return 1 - -/datum/controller/gameticker/proc/declare_completion() - world << "


A round of [mode.name] has ended!

" - for(var/mob/Player in player_list) - if(Player.mind && !isnewplayer(Player)) - if(Player.stat != DEAD) - var/turf/playerTurf = get_turf(Player) - if(emergency_shuttle.departed && emergency_shuttle.evac) - if(isNotAdminLevel(playerTurf.z)) - Player << "You managed to survive, but were marooned on [station_name()] as [Player.real_name]..." - else - Player << "You managed to survive the events on [station_name()] as [Player.real_name]." - else if(isAdminLevel(playerTurf.z)) - Player << "You successfully underwent crew transfer after events on [station_name()] as [Player.real_name]." - else if(issilicon(Player)) - Player << "You remain operational after the events on [station_name()] as [Player.real_name]." - else - Player << "You missed the crew transfer after the events on [station_name()] as [Player.real_name]." - else - if(istype(Player,/mob/dead/observer)) - var/mob/dead/observer/O = Player - if(!O.started_as_observer) - Player << "You did not survive the events on [station_name()]..." - else - Player << "You did not survive the events on [station_name()]..." - world << "
" - - for (var/mob/living/silicon/ai/aiPlayer in mob_list) - if (aiPlayer.stat != 2) - world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the round were:" - else - world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were:" - aiPlayer.show_laws(1) - - if (aiPlayer.connected_robots.len) - var/robolist = "The AI's loyal minions were: " - for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots) - robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]" - world << "[robolist]" - - var/dronecount = 0 - - for (var/mob/living/silicon/robot/robo in mob_list) - - if(istype(robo,/mob/living/silicon/robot/drone)) - dronecount++ - continue - - if (!robo.connected_ai) - if (robo.stat != 2) - world << "[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were:" - else - world << "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were:" - - if(robo) //How the hell do we lose robo between here and the world messages directly above this? - robo.laws.show_laws(world) - - if(dronecount) - world << "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] at the end of this round." - - mode.declare_completion()//To declare normal completion. - - //Ask the event manager to print round end information - event_manager.RoundEnd() - - //Print a list of antagonists to the server log - var/list/total_antagonists = list() - //Look into all mobs in world, dead or alive - for(var/datum/mind/Mind in minds) - var/temprole = Mind.special_role - if(temprole) //if they are an antagonist of some sort. - if(temprole in total_antagonists) //If the role exists already, add the name to it - total_antagonists[temprole] += ", [Mind.name]([Mind.key])" - else - total_antagonists.Add(temprole) //If the role doesnt exist in the list, create it and add the mob - total_antagonists[temprole] += ": [Mind.name]([Mind.key])" - - //Now print them all into the log! - log_game("Antagonists at round end were...") - for(var/i in total_antagonists) - log_game("[i]s[total_antagonists[i]].") - - return 1 - -/datum/controller/gameticker/proc/send_tip_of_the_round() - var/m - if(selected_tip) - m = selected_tip - else - var/list/randomtips = file2list("config/tips.txt") - if(randomtips.len) - m = pick(randomtips) - - if(m) - world << "Tip of the round: \ - [html_encode(m)]" diff --git a/code/game/gamemodes/malfunction/malf_research.dm b/code/game/gamemodes/malfunction/malf_research.dm index da7a4df668e..58f7d56c137 100644 --- a/code/game/gamemodes/malfunction/malf_research.dm +++ b/code/game/gamemodes/malfunction/malf_research.dm @@ -43,7 +43,7 @@ // Proc: process() // Parameters: None // Description: Processes CPU gain and research progress based on "realtime" calculation. -/datum/malf_research/proc/process(var/idle = 0) +/datum/malf_research/process(var/idle = 0) if(idle) // No power or running on APU. Do nothing. last_tick = world.time return diff --git a/code/game/gamemodes/malfunction/malf_research_ability.dm b/code/game/gamemodes/malfunction/malf_research_ability.dm index c6916208bd3..f267e9243a3 100644 --- a/code/game/gamemodes/malfunction/malf_research_ability.dm +++ b/code/game/gamemodes/malfunction/malf_research_ability.dm @@ -7,7 +7,7 @@ var/datum/malf_research_ability/next = null // Next research (if applicable). -/datum/malf_research_ability/proc/process(var/time = 0) +/datum/malf_research_ability/process(var/time = 0) invested += time if(invested >= price) - unlocked = 1 \ No newline at end of file + unlocked = 1 diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm index 2fffaa3ca8a..3a07e9d715a 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm @@ -105,9 +105,6 @@ radio.autosay("Self destructing now. Have a nice day.", "Self-Destruct Control") timer-- - if(ticker) - ticker.station_explosion_cinematic(0,null) - if(ticker.mode) - ticker.mode:station_was_nuked = 1 - - + SSticker.station_explosion_cinematic(0,null) + if(SSticker.mode) + SSticker.mode:station_was_nuked = 1 diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 37bce4d2707..d543b10c481 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -20,58 +20,71 @@ var/turf/pickedgoal var/max_i = 10//number of tries to spawn meteor. + switch(pick(1,2,3,4)) + if(1) //NORTH + starty = world.maxy-(TRANSITIONEDGE+2) + startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2)) + endy = TRANSITIONEDGE + endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + if(2) //EAST + starty = rand((TRANSITIONEDGE+2),world.maxy-(TRANSITIONEDGE+1)) + startx = world.maxx-(TRANSITIONEDGE+2) + endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) + endx = TRANSITIONEDGE + if(3) //SOUTH + starty = (TRANSITIONEDGE+2) + startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2)) + endy = world.maxy-TRANSITIONEDGE + endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + if(4) //WEST + starty = rand((TRANSITIONEDGE+2), world.maxy-(TRANSITIONEDGE+2)) + startx = (TRANSITIONEDGE+2) + endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) + endx = world.maxx-TRANSITIONEDGE - do - switch(pick(1,2,3,4)) - if(1) //NORTH - starty = world.maxy-(TRANSITIONEDGE+2) - startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2)) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(2) //EAST - starty = rand((TRANSITIONEDGE+2),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+2) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE - if(3) //SOUTH - starty = (TRANSITIONEDGE+2) - startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2)) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(4) //WEST - starty = rand((TRANSITIONEDGE+2), world.maxy-(TRANSITIONEDGE+2)) - startx = (TRANSITIONEDGE+2) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - - pickedstart = locate(startx, starty, 1) - pickedgoal = locate(endx, endy, 1) - max_i-- - if(max_i<=0) return - - while (!istype(pickedstart, /turf/space)) //FUUUCK, should never happen. - + pickedstart = locate(startx, starty, 2) + pickedgoal = locate(endx, endy, 2) + max_i-- + if(max_i<=0) return var/obj/effect/meteor/M switch(rand(1, 100)) if(1 to 10) M = new /obj/effect/meteor/big( pickedstart ) - if(11 to 75) + if(11 to 50) M = new /obj/effect/meteor( pickedstart ) - if(76 to 100) + if(51 to 55) + M = new /obj/effect/meteor/flaming( pickedstart ) + if(56 to 59) + M = new /obj/effect/meteor/irradiated( pickedstart ) + if(60 to 64) + M = new /obj/effect/meteor/golden( pickedstart ) + if(65 to 69) + M = new /obj/effect/meteor/silver( pickedstart ) + if(70 to 73) + M = new /obj/effect/meteor/emp( pickedstart ) + if(74 to 76) + M = new /obj/effect/meteor/diamond( pickedstart ) + if(77 to 78) + M = new /obj/effect/meteor/artifact( pickedstart ) + if(79 to 80) + M = new /obj/effect/meteor/supermatter( pickedstart ) + if(81 to 82) + M = new /obj/effect/meteor/meaty( pickedstart ) + if(83 to 100) M = new /obj/effect/meteor/small( pickedstart ) M.dest = pickedgoal spawn(1) - walk_towards(M, M.dest, 1) + walk_towards(M, M.dest, 2) return /obj/effect/meteor name = "meteor" icon = 'icons/obj/meteor.dmi' - icon_state = "flaming" + icon_state = "large" density = 1 anchored = 1.0 var/hits = 3 @@ -82,7 +95,8 @@ var/shieldsoundrange = 260 // The maximum number of tiles away the sound can be heard, falls off over distance, so it will be quiet near the limit pass_flags = PASSTABLE var/done = 0//This is set to 1 when the meteor is done colliding, and is used to ignore additional bumps while waiting for deletion - + var/meteordrop = /obj/item/weapon/ore/iron //the thing that the meteors will drop when it explodes + var/dropamt = 3 //amount of said thing /obj/effect/meteor/small name = "small meteor" @@ -93,11 +107,11 @@ hits = 2 detonation_chance = 30 shieldsoundrange = 160 - + dropamt = 1 /obj/effect/meteor/Destroy() walk(src,0) //this cancels the walk_towards() proc - ..() + return ..() /obj/effect/meteor/Bump(atom/A) if (!done) @@ -106,6 +120,8 @@ if (A) A.ex_act(2) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) + make_debris() + meteor_effect() if (istype(A, /obj/effect/energy_field))//If a normal/small meteor impacts an energy field, then it makes a widely audible impact sound and qdels done = 1 @@ -136,15 +152,26 @@ spawn() qdel(src) - - - /obj/effect/meteor/ex_act(severity) if (severity < 4) qdel(src) return +/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pickaxe)) + qdel(src) + return + ..() + +/obj/effect/meteor/proc/make_debris() + for(var/throws = dropamt, throws > 0, throws--) + var/obj/O = new meteordrop(get_turf(src)) + O.throw_at(dest, 5, 10) + +/obj/effect/meteor/proc/meteor_effect() + return + /obj/effect/meteor/big name = "big meteor" hits = 5 @@ -152,6 +179,7 @@ power_step = 1 detonation_chance = 60 shieldsoundrange = 310//This can be set larger than the dimensions of the map, to allow it to remain louder at extreme distance + dropamt = 5 ex_act(severity) return @@ -195,6 +223,8 @@ shake_camera(M, 3, get_dist(M.loc, src.loc) > 20 ? 1 : 3) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) explosion(src.loc, 0, 1, 2, 3, 0) + make_debris() + meteor_effect() if (--src.hits == 0 && !done) done = 1 @@ -206,12 +236,82 @@ spawn() qdel(src) +/obj/effect/meteor/dust + name = "space dust" + icon_state = "dust" + pass_flags = PASSTABLE | PASSGRILLE + hits = 1 + meteordrop = /obj/item/weapon/ore/glass + dropamt = 1 -/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/pickaxe)) - qdel(src) - return +/obj/effect/meteor/flaming + name = "flaming meteor" + icon_state = "flaming" + hits = 3 + meteordrop = /obj/item/weapon/ore/phoron + +/obj/effect/meteor/irradiated + name = "glowing meteor" + icon_state = "glowing" + meteordrop = /obj/item/weapon/ore/uranium + +/obj/effect/meteor/irradiated/meteor_effect() + new /obj/effect/decal/cleanable/greenglow(get_turf(src)) //todo: make this irradiate the place it lands + +/obj/effect/meteor/golden + name = "golden meteor" + icon_state = "sharp" + meteordrop = /obj/item/weapon/ore/gold + +/obj/effect/meteor/silver + name = "silver meteor" + icon_state = "glowing_blue" + meteordrop = /obj/item/weapon/ore/silver + +/obj/effect/meteor/diamond + name = "diamond meteor" + icon_state = "glowing_blue" + meteordrop = /obj/item/weapon/ore/diamond + +/obj/effect/meteor/emp + name = "conducting meteor" + icon_state = "glowing_blue" + meteordrop = /obj/item/weapon/ore/osmium + dropamt = 2 + +/obj/effect/meteor/emp/meteor_effect() + empulse(src, rand(2, 4), rand(4, 10)) + +/obj/effect/meteor/artifact + icon_state = "sharp" + meteordrop = /obj/machinery/artifact + dropamt = 1 + +/obj/effect/meteor/supermatter + name = "supermatter shard" + icon = 'icons/obj/engine.dmi' + icon_state = "darkmatter" + +/obj/effect/meteor/supermatter/New() ..() + if(prob(5)) + meteordrop = /obj/machinery/power/supermatter/shard + dropamt = 1 + +/obj/effect/meteor/supermatter/meteor_effect() + explosion(src.loc, 1, 2, 3, 4, 0) + for(var/obj/machinery/power/apc/A in range(rand(12, 20), src)) + A.energy_fail(round(10 * rand(8, 12))) + +/obj/effect/meteor/meaty + name = "meaty ore" + icon_state = "meateor" + meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey + dropamt = 10 + +/obj/effect/meteor/meaty/meteor_effect() + gibs(loc) + //This function takes a turf to prevent race conditions, as the object calling it will probably be deleted in the same frame /proc/meteor_shield_impact_sound(var/turf/T, var/range) @@ -229,4 +329,3 @@ if(M.ear_deaf <= 0 || !M.ear_deaf) M.playsound_local(T, 'sound/effects/meteorimpact.ogg', range, 1, usepressure = 0) - diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 63832b809ce..71adc589574 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -12,45 +12,51 @@ var/obj/item/weapon/disk/nuclear/the_disk = null var/active = 0 +/obj/item/weapon/pinpointer/attack_self() + if(!active) + active = 1 + START_PROCESSING(SSfast_process, src) + usr << "You activate the pinpointer" + else + active = 0 + STOP_PROCESSING(SSfast_process, src) + icon_state = "pinoff" + usr << "You deactivate the pinpointer" - attack_self() - if(!active) - active = 1 - workdisk() - usr << "You activate the pinpointer" - else - active = 0 - icon_state = "pinoff" - usr << "You deactivate the pinpointer" +/obj/item/weapon/pinpointer/process() + if (active) + workdisk() + else + STOP_PROCESSING(SSfast_process, src) - proc/workdisk() - if(!active) return +/obj/item/weapon/pinpointer/proc/workdisk() + if(!active) return + if(!the_disk) + the_disk = locate() if(!the_disk) - the_disk = locate() - if(!the_disk) - icon_state = "pinonnull" - return - set_dir(get_dir(src,the_disk)) - switch(get_dist(src,the_disk)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - spawn(5) .() + icon_state = "pinonnull" + return + set_dir(get_dir(src,the_disk)) + switch(get_dist(src,the_disk)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" - examine(mob/user) - ..(user) - for(var/obj/machinery/nuclearbomb/bomb in world) - if(bomb.timing) - user << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" +/obj/item/weapon/pinpointer/examine(mob/user) + ..(user) + for(var/obj/machinery/nuclearbomb/bomb in world) + if(bomb.timing) + user << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" /obj/item/weapon/pinpointer/Destroy() active = 0 - ..() + STOP_PROCESSING(SSfast_process, src) + return ..() /obj/item/weapon/pinpointer/advpinpointer name = "Advanced Pinpointer" @@ -60,58 +66,66 @@ var/turf/location = null var/obj/target = null - attack_self() - if(!active) - active = 1 - if(mode == 0) - workdisk() - if(mode == 1) - worklocation() - if(mode == 2) - workobj() - usr << "You activate the pinpointer" - else - active = 0 - icon_state = "pinoff" - usr << "You deactivate the pinpointer" +/obj/item/weapon/pinpointer/advpinpointer/attack_self() + if(!active) + active = 1 + if(mode == 0) + workdisk() + if(mode == 1) + worklocation() + if(mode == 2) + workobj() + START_PROCESSING(SSfast_process, src) + usr << "You activate the pinpointer" + else + active = 0 + icon_state = "pinoff" + usr << "You deactivate the pinpointer" +/obj/item/weapon/pinpointer/advpinpointer/process() + switch(mode) + if (0) + workdisk() + if (1) + worklocation() + if (2) + workobj() - proc/worklocation() - if(!active) - return - if(!location) - icon_state = "pinonnull" - return - set_dir(get_dir(src,location)) - switch(get_dist(src,location)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - spawn(5) .() +/obj/item/weapon/pinpointer/advpinpointer/proc/worklocation() + if(!active) + STOP_PROCESSING(SSfast_process, src) + return + if(!location) + icon_state = "pinonnull" + return + set_dir(get_dir(src,location)) + switch(get_dist(src,location)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" - - proc/workobj() - if(!active) - return - if(!target) - icon_state = "pinonnull" - return - set_dir(get_dir(src,target)) - switch(get_dist(src,target)) - if(0) - icon_state = "pinondirect" - if(1 to 8) - icon_state = "pinonclose" - if(9 to 16) - icon_state = "pinonmedium" - if(16 to INFINITY) - icon_state = "pinonfar" - spawn(5) .() +/obj/item/weapon/pinpointer/advpinpointer/proc/workobj() + if(!active) + STOP_PROCESSING(SSfast_process, src) + return + if(!target) + icon_state = "pinonnull" + return + set_dir(get_dir(src,target)) + switch(get_dist(src,target)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" /obj/item/weapon/pinpointer/advpinpointer/verb/toggle_mode() set category = "Object" @@ -120,7 +134,7 @@ active = 0 icon_state = "pinoff" - target=null + target = null location = null switch(alert("Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", "Location", "Disk Recovery", "Other Signature")) @@ -187,6 +201,7 @@ /obj/item/weapon/pinpointer/nukeop/attack_self(mob/user as mob) if(!active) active = 1 + START_PROCESSING(SSfast_process, src) if(!mode) workdisk() user << "Authentication Disk Locator active." @@ -195,9 +210,15 @@ user << "Shuttle Locator active." else active = 0 + STOP_PROCESSING(SSfast_process, src) icon_state = "pinoff" user << "You deactivate the pinpointer." +/obj/item/weapon/pinpointer/nukeop/process() + if (mode) + workdisk() + else + worklocation() /obj/item/weapon/pinpointer/nukeop/workdisk() if(!active) return @@ -229,9 +250,6 @@ if(16 to INFINITY) icon_state = "pinonfar" - spawn(5) .() - - /obj/item/weapon/pinpointer/nukeop/proc/worklocation() if(!active) return if(!mode) @@ -261,5 +279,3 @@ icon_state = "pinonmedium" if(16 to INFINITY) icon_state = "pinonfar" - - spawn(5) .() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 72e5210b1fb..7a07c066678 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -24,14 +24,14 @@ datum/objective if (process) process_objectives -= src - ..() + return ..() proc/check_completion() return completed proc/find_target() var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) possible_targets += possible_target if(possible_targets.len > 0) @@ -39,12 +39,12 @@ datum/objective proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned. - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) ) target = possible_target break - proc/process() + process() return @@ -618,17 +618,16 @@ datum/objective/capture /datum/objective/absorb proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6) target_amount = rand (lowbound,highbound) - if (ticker) - var/n_p = 1 //autowin - if (ticker.current_state == GAME_STATE_SETTING_UP) - for(var/mob/new_player/P in player_list) - if(P.client && P.ready && P.mind!=owner) - n_p ++ - else if (ticker.current_state == GAME_STATE_PLAYING) - for(var/mob/living/carbon/human/P in player_list) - if(P.client && !(P.mind.changeling) && P.mind!=owner) - n_p ++ - target_amount = min(target_amount, n_p) + var/n_p = 1 //autowin + if (SSticker.current_state == GAME_STATE_SETTING_UP) + for(var/mob/new_player/P in player_list) + if(P.client && P.ready && P.mind!=owner) + n_p ++ + else if (SSticker.current_state == GAME_STATE_PLAYING) + for(var/mob/living/carbon/human/P in player_list) + if(P.client && !(P.mind.changeling) && P.mind!=owner) + n_p ++ + target_amount = min(target_amount, n_p) explanation_text = "Absorb [target_amount] compatible genomes." return target_amount @@ -650,7 +649,7 @@ datum/objective/heist/kidnap var/list/possible_targets = list() var/list/priority_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && (!possible_target.special_role)) possible_targets += possible_target for(var/role in roles) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 387520d100d..9b112eb8a4f 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -276,17 +276,19 @@ return for (var/mob/living/simple_animal/hostile/scarybat/bat in spawned) - bat.friends += src + LAZYADD(bat.friends, src) if (vampire.thralls.len) - bat.friends += vampire.thralls + LAZYADD(bat.friends, vampire.thralls) log_and_message_admins("summoned bats.") vampire.use_blood(60) verbs -= /mob/living/carbon/human/proc/vampire_bats - spawn (1200) - verbs += /mob/living/carbon/human/proc/vampire_bats + addtimer(CALLBACK(src, .proc/vampire_post_bats), 1200) + +/mob/living/carbon/human/proc/vampire_post_bats() + verbs += /mob/living/carbon/human/proc/vampire_bats // Chiropteran Screech /mob/living/carbon/human/proc/vampire_screech() diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 681d84f4a70..2d43693cb84 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -71,7 +71,7 @@ /proc/get_all_access_datums() if(!priv_all_access_datums) priv_all_access_datums = init_subtypes(/datum/access) - priv_all_access_datums = dd_sortedObjectList(priv_all_access_datums) + sortTim(priv_all_access_datums, /proc/cmp_access, FALSE) return priv_all_access_datums diff --git a/code/game/jobs/access_datum.dm b/code/game/jobs/access_datum.dm index 28bbdec8f8f..04474a56d40 100644 --- a/code/game/jobs/access_datum.dm +++ b/code/game/jobs/access_datum.dm @@ -4,9 +4,6 @@ var/region = ACCESS_REGION_NONE var/access_type = ACCESS_TYPE_STATION -/datum/access/dd_SortValue() - return "[access_type][desc]" - /***************** * Station access * *****************/ diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 15b72290326..36634a74d08 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -171,8 +171,8 @@ department = "Cargo" department_flag = CIVILIAN faction = "Station" - total_positions = 3 - spawn_positions = 3 + total_positions = 4 + spawn_positions = 4 supervisors = "the quartermaster and the head of personnel" selection_color = "#dddddd" economic_modifier = 5 diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index a42db58995b..3aa419ed8c5 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -147,11 +147,10 @@ H << "Welp, out of time, buddy. You're stuck. Next time choose faster." accepted = 1 - if(ticker) - ticker.Bible_icon_state = B.icon_state - ticker.Bible_item_state = B.item_state - ticker.Bible_name = B.name - ticker.Bible_deity_name = B.deity_name + SSticker.Bible_icon_state = B.icon_state + SSticker.Bible_item_state = B.item_state + SSticker.Bible_name = B.name + SSticker.Bible_deity_name = B.deity_name feedback_set_details("religion_deity","[new_deity]") feedback_set_details("religion_book","[new_book_style]") return 1 diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index da3fae270eb..32736ab04c0 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -57,7 +57,7 @@ var/species_modifier = (H.species ? economic_species_modifier[H.species.type] : 2) if(!species_modifier) species_modifier = economic_species_modifier[/datum/species/human] - + var/money_amount = (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * species_modifier var/datum/money_account/M = create_account(H.real_name, money_amount, null) if(H.mind) @@ -113,3 +113,56 @@ /datum/job/proc/fetch_age_restriction() if (config.age_restrictions[lowertext(title)]) minimal_player_age = config.age_restrictions[lowertext(title)] + +/datum/job/proc/late_equip(var/mob/living/carbon/human/H) + if(!H) + return 0 + + var/loyalty = 1 + if(H.client) + switch(H.client.prefs.nanotrasen_relation) + if(COMPANY_LOYAL) loyalty = 3 + if(COMPANY_SUPPORTATIVE)loyalty = 2 + if(COMPANY_NEUTRAL) loyalty = 1 + if(COMPANY_SKEPTICAL) loyalty = -2 + if(COMPANY_OPPOSED) loyalty = -3 + + //give them an account in the station database + var/species_modifier = 0 + if(economic_species_modifier[H.species.type]) + switch(economic_species_modifier[H.species.type]) + if(/datum/species/human) species_modifier = 0 + if(/datum/species/skrell) species_modifier = 0 + if(/datum/species/tajaran) species_modifier = -2 + if(/datum/species/unathi) species_modifier = -2 + if(/datum/species/diona) species_modifier = -4 + if(/datum/species/machine) species_modifier = -4 + if(/datum/species/bug) species_modifier = -6 + else species_modifier = -3 + + + var/wealth = (loyalty + economic_modifier + species_modifier) + + switch(wealth) + if(-INFINITY to 2) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) + if(3 to 6) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/hoodie(H), slot_wear_suit) + if(7 to 9) + H.equip_to_slot_or_del(new /obj/item/clothing/under/sl_suit(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/accessory/red(H), slot_tie) + if(10 to 14) + H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand) + if(15 to INFINITY) + H.equip_to_slot_or_del(new /obj/item/clothing/under/sl_suit(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/accessory/red(H), slot_tie) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/accessory/locket(H), slot_tie) + diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 50e77f68be9..71b6ca13012 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -135,38 +135,6 @@ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit) return 1 - - -/datum/job/geneticist - title = "Geneticist" - flag = GENETICIST - department = "Medical" - department_flag = MEDSCI - faction = "Station" - total_positions = 0 - spawn_positions = 0 - supervisors = "the chief medical officer and research director" - selection_color = "#ffeef0" - economic_modifier = 7 - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research) - minimal_access = list(access_medical, access_morgue, access_genetics, access_research) - - - equip(var/mob/living/carbon/human/H) - if(!H) return 0 - H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_medsci(H), slot_l_ear) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt) - switch(H.backbag) - if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back) - if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back) - if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/gen(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) - return 1 - /datum/job/psychiatrist title = "Psychiatrist" flag = PSYCHIATRIST diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 5cdbeaf95ee..d83fd5407ae 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -133,3 +133,33 @@ H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) return 1 + +/datum/job/geneticist + title = "Geneticist" + flag = GENETICIST + department = "Science" + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the research director" + selection_color = "#ffeeff" + economic_modifier = 7 + access = list(access_genetics, access_tox, access_tox_storage, access_morgue, access_research) + minimal_access = list(access_medical, access_morgue, access_genetics, access_research) + + + equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear) + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt) + switch(H.backbag) + if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back) + if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back) + if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/gen(H), slot_back) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) + return 1 \ No newline at end of file diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 576dd761297..cd1955fd45d 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -98,11 +98,10 @@ department = "Security" department_flag = ENGSEC faction = "Station" - total_positions = 2 - spawn_positions = 2 + total_positions = 1 + spawn_positions = 1 supervisors = "the head of security" selection_color = "#ffeeee" - alt_titles = list("Forensic Technician") economic_modifier = 5 access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) @@ -125,20 +124,57 @@ else H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) H.equip_to_slot_or_del(new /obj/item/weapon/flame/lighter/zippo(H), slot_l_store) - if(H.backbag == 1)//Why cant some of these things spawn in his office? + if(H.backbag == 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand) else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) - if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician") - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit, slot_r_hand) + + +/datum/job/forensics + title = "Forensic Technician" + flag = FORENSICS + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of security" + selection_color = "#ffeeee" + economic_modifier = 5 + access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) + minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) + alt_titles = list("Crime Scene Investigator") + minimal_player_age = 3 + equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear) + switch(H.backbag) + if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) + if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) + if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) + H.equip_to_slot_or_del(new /obj/item/clothing/under/det/slob(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt) + if(H.species.name == "Tajaran") + H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black/tajara(H), slot_gloves) + if(H.species.name == "Unathi") + H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black/unathi(H), slot_gloves) else - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_trench(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/det(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) + if(H.mind.role_alt_title && H.mind.role_alt_title == "Crime Scene Investigator") + H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/det_suit(H), slot_wear_suit) + else + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) + + if(H.backbag == 1) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand) + else + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) + return 1 - - /datum/job/officer title = "Security Officer" flag = OFFICER diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 798ad177407..6d2a407296f 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -191,7 +191,7 @@ var/global/datum/controller/occupations/job_master SetupOccupations() //Holder for Triumvirate is stored in the ticker, this just processes it - if(ticker && ticker.triai) + if(SSticker.triai) for(var/datum/job/A in occupations) if(A.title == "AI") A.spawn_positions = 3 @@ -246,7 +246,7 @@ var/global/datum/controller/occupations/job_master // Loop through all jobs for(var/datum/job/job in shuffledoccupations) // SHUFFLE ME BABY - if(!job || (job.title in ticker.mode.disabled_jobs) ) //11/2/16 + if(!job || (job.title in SSticker.mode.disabled_jobs) ) //11/2/16 continue if(jobban_isbanned(player, job.title)) @@ -309,56 +309,57 @@ var/global/datum/controller/occupations/job_master return 1 - proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0) - if(!H) return null + proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0,var/megavend = 0) + if(!H) + return null var/datum/job/job = GetJob(rank) var/list/spawn_in_storage = list() if(job) - //Equip custom gear loadout. var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage. var/list/custom_equip_leftovers = list() - if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI") - - for(var/thing in H.client.prefs.gear) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted - if(G.allowed_roles) - for(var/job_name in G.allowed_roles) - if(job.title == job_name) - permitted = 1 - else - permitted = 1 - - if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted])) - permitted = 0 - - if(!permitted) - H << "Your current job or whitelist status does not permit you to spawn with [thing]!" - continue - - if(G.slot && !(G.slot in custom_equip_slots)) - // This is a miserable way to fix the loadout overwrite bug, but the alternative requires - // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z - var/metadata = H.client.prefs.gear[G.display_name] - if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) - custom_equip_leftovers += thing - else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) - H << "Equipping you with \the [thing]!" - custom_equip_slots.Add(G.slot) - else - custom_equip_leftovers.Add(thing) - else - spawn_in_storage += thing //Equip job items. job.equip(H) - job.setup_account(H) - job.equip_backpack(H) - job.equip_survival(H) job.apply_fingerprints(H) + if(!megavend)//Equip custom gear loadout. + job.equip_backpack(H) + job.equip_survival(H) + job.setup_account(H) + if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI") + + for(var/thing in H.client.prefs.gear) + var/datum/gear/G = gear_datums[thing] + if(G) + var/permitted + if(G.allowed_roles) + for(var/job_name in G.allowed_roles) + if(job.title == job_name) + permitted = 1 + else + permitted = 1 + + if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted])) + permitted = 0 + + if(!permitted) + H << "Your current job or whitelist status does not permit you to spawn with [thing]!" + continue + + if(G.slot && !(G.slot in custom_equip_slots)) + // This is a miserable way to fix the loadout overwrite bug, but the alternative requires + // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z + var/metadata = H.client.prefs.gear[G.display_name] + if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) + custom_equip_leftovers += thing + else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" + custom_equip_slots.Add(G.slot) + else + custom_equip_leftovers.Add(thing) + else + spawn_in_storage += thing // Randomize nutrition. (Between 50-100% of max.) H.nutrition = (rand(50, 100) * 0.01) * H.max_nutrition @@ -422,7 +423,7 @@ var/global/datum/controller/occupations/job_master if("AI") return H if("Captain") - var/sound/announce_sound = (ticker.current_state <= GAME_STATE_SETTING_UP)? null : sound('sound/misc/boatswain.ogg', volume=20) + var/sound/announce_sound = (SSticker.current_state <= GAME_STATE_SETTING_UP)? null : sound('sound/misc/boatswain.ogg', volume=20) captain_announcement.Announce("All hands, Captain [H.real_name] on deck!", new_sound=announce_sound) //Deferred item spawning. @@ -441,7 +442,7 @@ var/global/datum/controller/occupations/job_master else H << "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug." - if(istype(H)) //give humans wheelchairs, if they need them. + if(istype(H) && !megavend) //give humans wheelchairs, if they need them. var/obj/item/organ/external/l_foot = H.get_organ("l_foot") var/obj/item/organ/external/r_foot = H.get_organ("r_foot") if(!l_foot || !r_foot) @@ -465,6 +466,122 @@ var/global/datum/controller/occupations/job_master if(job.req_admin_notify) H << "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp." + //Gives glasses to the vision impaired + if(H.disabilities & NEARSIGHTED && !megavend) + var/equipped = H.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(H), slot_glasses) + if(equipped != 1) + var/obj/item/clothing/glasses/G = H.glasses + G.prescription = 1 + + BITSET(H.hud_updateflag, ID_HUD) + BITSET(H.hud_updateflag, IMPLOYAL_HUD) + BITSET(H.hud_updateflag, SPECIALROLE_HUD) + return H + + proc/EquipPersonal(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0,var/spawning_at) + if(!H) + return null + + switch(rank) + if("Cyborg") + return EquipRank(H, rank, 1) + if("AI") + return EquipRank(H, rank, 1) + if(spawning_at != "Arrivals Shuttle") + return EquipRank(H, rank, 1) + + var/datum/job/job = GetJob(rank) + var/list/spawn_in_storage = list() + addtimer(CALLBACK(GLOBAL_PROC, .proc/handle_player_despawn, H), 15 MINUTES) + + if(job) + + //Equip custom gear loadout. + var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage. + var/list/custom_equip_leftovers = list() + if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI") + + for(var/thing in H.client.prefs.gear) + var/datum/gear/G = gear_datums[thing] + if(G) + var/permitted + if(G.allowed_roles) + for(var/job_name in G.allowed_roles) + if(job.title == job_name) + permitted = 1 + else + permitted = 1 + + if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted])) + permitted = 0 + + if(!permitted) + H << "Your current job or whitelist status does not permit you to spawn with [thing]!" + continue + + if(G.slot && !(G.slot in custom_equip_slots)) + // This is a miserable way to fix the loadout overwrite bug, but the alternative requires + // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z + var/metadata = H.client.prefs.gear[G.display_name] + if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) + custom_equip_leftovers += thing + else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" + custom_equip_slots.Add(G.slot) + else + custom_equip_leftovers.Add(thing) + else + spawn_in_storage += thing + //Equip job items. + job.late_equip(H) + job.equip_backpack(H) + job.equip_survival(H) + job.setup_account(H) + job.apply_fingerprints(H) + + //If some custom items could not be equipped before, try again now. + for(var/thing in custom_equip_leftovers) + var/datum/gear/G = gear_datums[thing] + if(G.slot in custom_equip_slots) + spawn_in_storage += thing + else + var/metadata = H.client.prefs.gear[G.display_name] + if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" + custom_equip_slots.Add(G.slot) + else + spawn_in_storage += thing + else + H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator." + + H.job = rank + + if(spawn_in_storage && spawn_in_storage.len) + var/obj/item/weapon/storage/B + for(var/obj/item/weapon/storage/S in H.contents) + B = S + break + + if(!isnull(B)) + for(var/thing in spawn_in_storage) + H << "Placing \the [thing] in your [B.name]!" + var/datum/gear/G = gear_datums[thing] + var/metadata = H.client.prefs.gear[G.display_name] + G.spawn_item(B, metadata) + else + H << "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug." + + if(istype(H)) //give humans wheelchairs, if they need them. + var/obj/item/organ/external/l_foot = H.get_organ("l_foot") + var/obj/item/organ/external/r_foot = H.get_organ("r_foot") + if(!l_foot || !r_foot) + var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc) + H.buckled = W + H.update_canmove() + W.set_dir(H.dir) + W.buckled_mob = H + W.add_fingerprint(H) + //Gives glasses to the vision impaired if(H.disabilities & NEARSIGHTED) var/equipped = H.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(H), slot_glasses) @@ -601,7 +718,66 @@ var/global/datum/controller/occupations/job_master else H << "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead." H.loc = pick(latejoin) - . = "has arrived on the station" + . = "is inbound from the NTCC Odin" else H.loc = pick(latejoin) - . = "has arrived on the station" + . = "is inbound from the NTCC Odin" + +/proc/handle_player_despawn(var/mob/living/carbon/human/H) + if(istype(get_area(H), /area/centcom/spawning)) + if(!H.client) + despawn_mob(H) + else + var/datum/spawnpoint/spawnpos = spawntypes["Cryogenic Storage"] + + if(spawnpos && istype(spawnpos)) + H << "You come to the sudden realization that you never left the Aurora at all! You were in cryo the whole time!" + H.loc = pick(spawnpos.turfs) + global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], [spawnpos.msg].", "Cryogenic Oversight") + else + despawn_mob(H) //somehow they can't spawn at cryo, so this is the only recourse of action. + +/proc/despawn_mob(var/mob/living/carbon/human/H) + //Update any existing objectives involving this mob. + for(var/datum/objective/O in all_objectives) + // We don't want revs to get objectives that aren't for heads of staff. Letting + // them win or lose based on cryo is silly so we remove the objective. + if(O.target == H.mind) + if(O.owner && O.owner.current) + O.owner.current << "You get the feeling your target is no longer within your reach..." + qdel(O) + + //Handle job slot/tater cleanup. + if (H.mind) + var/job = H.mind.assigned_role + + job_master.FreeRole(job) + + if(H.mind.objectives.len) + qdel(H.mind.objectives) + H.mind.special_role = null + + // Delete them from datacore. + + if(PDA_Manifest.len) + PDA_Manifest.Cut() + for(var/datum/data/record/R in data_core.medical) + if ((R.fields["name"] == H.real_name)) + qdel(R) + for(var/datum/data/record/T in data_core.security) + if ((T.fields["name"] == H.real_name)) + qdel(T) + for(var/datum/data/record/G in data_core.general) + if ((G.fields["name"] == H.real_name)) + qdel(G) + + log_and_message_admins("[key_name(H)] ([H.mind.role_alt_title]) entered cryostorage.") + + global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], has entered long-term storage.", "NTCC Odin Cryogenic Oversight") + H.visible_message("[H.name] makes their way to the Odin's cryostorage, and departs.", 3) + + //This should guarantee that ghosts don't spawn. + H.ckey = null + + // Delete the mob. + qdel(H) diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 7383e1c7bb8..1ad2c4fccdf 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -13,6 +13,7 @@ var/const/AI =(1<<8) var/const/CYBORG =(1<<9) var/const/INTERN_SEC =(1<<10) var/const/INTERN_ENG =(1<<11) +var/const/FORENSICS =(1<<12) var/const/MEDSCI =(1<<1) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index ac736ddfe29..53d0cbf6848 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -23,7 +23,7 @@ Destroy() if(Beacon) qdel(Beacon) - ..() + return ..() // update the invisibility and icon hide(var/intact) diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index 98e6e7999da..e85c813c0c0 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -9,10 +9,10 @@ var/max_cable = 100 var/on = 0 -/obj/machinery/cablelayer/New() +/obj/machinery/cablelayer/Initialize() + . = ..() cable = new(src) cable.amount = 100 - ..() /obj/machinery/cablelayer/Move(new_turf,M_Dir) ..() diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index de7dd161c44..505466d7908 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -13,15 +13,13 @@ var/obj/machinery/computer/operating/computer = null -/obj/machinery/optable/New() - ..() +/obj/machinery/optable/Initialize() + . = ..() for(dir in list(NORTH,EAST,SOUTH,WEST)) computer = locate(/obj/machinery/computer/operating, get_step(src, dir)) if (computer) computer.table = src break -// spawn(100) //Wont the MC just call this process() before and at the 10 second mark anyway? -// process() /obj/machinery/optable/ex_act(severity) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index d255f9f2a98..f5a72b84713 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -20,7 +20,8 @@ ..() beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) -/obj/machinery/sleeper/initialize() +/obj/machinery/sleeper/Initialize() + . = ..() update_icon() /obj/machinery/sleeper/process() diff --git a/code/game/machinery/abstract/abstract.dm b/code/game/machinery/abstract/abstract.dm index 675113713d3..9b864835b40 100644 --- a/code/game/machinery/abstract/abstract.dm +++ b/code/game/machinery/abstract/abstract.dm @@ -11,7 +11,6 @@ desc = "No matter how hard you look at it, you have no idea what it is. (please inform coders if you see this)" simulated = FALSE anchored = 1 - var/should_process = FALSE mouse_opacity = 0 /obj/machinery/abstract/attack_ai(mob/user as mob) @@ -40,8 +39,3 @@ /obj/machinery/abstract/operable(additional_flags = 0) return TRUE - -/obj/machinery/abstract/get_process_type() - . = ..() - if (!should_process) - . &= ~M_PROCESSES diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 8f29f56ead1..412b197cb0e 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -30,7 +30,8 @@ /obj/machinery/bodyscanner/Destroy() // So the GC can qdel this. - src.connected.connected = null + if (connected) + connected.connected = null return ..() /obj/machinery/bodyscanner/relaymove(mob/user as mob) @@ -240,7 +241,8 @@ anchored = 1 /obj/machinery/body_scanconsole/Destroy() - src.connected.connected = null + if (connected) + connected.connected = null return ..() /obj/machinery/body_scanconsole/power_change() @@ -265,13 +267,10 @@ return collapse_desc -/obj/machinery/body_scanconsole/New() - ..() - spawn(5) - src.connected = locate(/obj/machinery/bodyscanner, get_step(src, WEST)) - src.connected.connected = src - return - return +/obj/machinery/body_scanconsole/Initialize() + . = ..() + src.connected = locate(/obj/machinery/bodyscanner, get_step(src, WEST)) + src.connected.connected = src /obj/machinery/body_scanconsole/attack_ai(user as mob) return src.attack_hand(user) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index ecdea629406..31721f2e2cc 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -106,8 +106,8 @@ /obj/machinery/alarm/cold target_temperature = T0C + 5 -/obj/machinery/alarm/server/New() - ..() +/obj/machinery/alarm/server/Initialize() + . = ..() TLV["oxygen"] = list(-1.0, -1.0,-1.0,-1.0) // Partial pressure, kpa TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa TLV["phoron"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa @@ -119,15 +119,15 @@ //While temperature stabilises. //Kitchen freezer -/obj/machinery/alarm/freezer/New() - ..() +/obj/machinery/alarm/freezer/Initialize() + . = ..() TLV["oxygen"] = list(16, 17, 135, 140) // Partial pressure, kpa TLV["pressure"] = list(ONE_ATMOSPHERE*0.50,ONE_ATMOSPHERE*0.70,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) TLV["temperature"] = list(0, 0, 273, T0C+40) // No lower limits. Alarm above 0c. Major alarm at harmful heat //Refridgerated area, cold but above-freezing -/obj/machinery/alarm/cold/New() - ..() +/obj/machinery/alarm/cold/Initialize() + . = ..() TLV["pressure"] = list(ONE_ATMOSPHERE*0.70,ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */ TLV["temperature"] = list(247, 273, 288, T0C+40) // Shouldn't go below 0 @@ -137,13 +137,13 @@ wires = null return ..() -/obj/machinery/alarm/New(var/loc, var/dir, var/building = 0) - ..() +/obj/machinery/alarm/LateInitialize() + apply_mode() + +/obj/machinery/alarm/Initialize(mapload, var/dir, var/building = 0) + . = ..() if(building) - if(loc) - src.loc = loc - if(dir) src.set_dir(dir) @@ -156,6 +156,12 @@ first_run() + set_frequency(frequency) + if (!master_is_operating()) + elect_master() + + return INITIALIZE_HINT_LATELOAD + /obj/machinery/alarm/proc/first_run() alarm_area = get_area(src) area_uid = alarm_area.uid @@ -180,12 +186,6 @@ TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */ TLV["temperature"] = list(T0C-26, T0C, T0C+40, T0C+66) // K - -/obj/machinery/alarm/initialize() - set_frequency(frequency) - if (!master_is_operating()) - elect_master() - /obj/machinery/alarm/process() if((stat & (NOPOWER|BROKEN)) || shorted || buildstage != 2) return @@ -363,46 +363,6 @@ set_light(l_range = L_WALLMOUNT_RANGE, l_power = L_WALLMOUNT_POWER, l_color = new_color) -/obj/machinery/alarm/receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN)) - return - if (alarm_area.master_air_alarm != src) - if (master_is_operating()) - return - elect_master() - if (alarm_area.master_air_alarm != src) - return - if(!signal || signal.encryption) - return - var/id_tag = signal.data["tag"] - if (!id_tag) - return - if (signal.data["area"] != area_uid) - return - if (signal.data["sigtype"] != "status") - return - - var/dev_type = signal.data["device"] - if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names)) - register_env_machine(id_tag, dev_type) - if(dev_type == "AScr") - alarm_area.air_scrub_info[id_tag] = signal.data - else if(dev_type == "AVP") - alarm_area.air_vent_info[id_tag] = signal.data - -/obj/machinery/alarm/proc/register_env_machine(var/m_id, var/device_type) - var/new_name - if (device_type=="AVP") - new_name = "[alarm_area.name] Vent Pump #[alarm_area.air_vent_names.len+1]" - alarm_area.air_vent_names[m_id] = new_name - else if (device_type=="AScr") - new_name = "[alarm_area.name] Air Scrubber #[alarm_area.air_scrub_names.len+1]" - alarm_area.air_scrub_names[m_id] = new_name - else - return - spawn (10) - send_signal(m_id, list("init" = new_name) ) - /obj/machinery/alarm/proc/refresh_all() for(var/id_tag in alarm_area.air_vent_names) var/list/I = alarm_area.air_vent_info[id_tag] @@ -413,12 +373,12 @@ var/list/I = alarm_area.air_scrub_info[id_tag] if (I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time) continue - send_signal(id_tag, list("status") ) + send_signal(id_tag, list("status")) /obj/machinery/alarm/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM) + radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM) /obj/machinery/alarm/proc/send_signal(var/target, var/list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise if(!radio_connection) @@ -481,7 +441,7 @@ update_icon() /obj/machinery/alarm/proc/post_alert(alert_level) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency) + var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency) if(!frequency) return @@ -864,7 +824,7 @@ return else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" + user << "You remove the air alarm assembly from the wall!" new /obj/item/frame/air_alarm(get_turf(user)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) qdel(src) @@ -873,8 +833,7 @@ /obj/machinery/alarm/power_change() ..() - spawn(rand(0,15)) - update_icon() + queue_icon_update() /obj/machinery/alarm/examine(mob/user) ..(user) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 8788ddff63d..f4a80a25efb 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -61,17 +61,18 @@ /obj/machinery/air_sensor/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) -/obj/machinery/air_sensor/initialize() +/obj/machinery/air_sensor/Initialize() + . = ..() set_frequency(frequency) obj/machinery/air_sensor/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - ..() + if(SSradio) + SSradio.remove_object(src,frequency) + return ..() /obj/machinery/computer/general_air_control icon = 'icons/obj/computer.dmi' @@ -88,9 +89,9 @@ obj/machinery/air_sensor/Destroy() circuit = /obj/item/weapon/circuitboard/air_management obj/machinery/computer/general_air_control/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - ..() + if(SSradio) + SSradio.remove_object(src, frequency) + return ..() /obj/machinery/computer/general_air_control/attack_hand(mob/user) if(..(user)) @@ -150,11 +151,12 @@ obj/machinery/computer/general_air_control/Destroy() return output /obj/machinery/computer/general_air_control/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) -/obj/machinery/computer/general_air_control/initialize() +/obj/machinery/computer/general_air_control/Initialize() + . = ..() set_frequency(frequency) diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm index 68062fc9683..1bbc923923a 100644 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ b/code/game/machinery/atmoalter/area_atmos_computer.dm @@ -13,11 +13,10 @@ //Simple variable to prevent me from doing attack_hand in both this and the child computer var/zone = "This computer is working on a wireless range, the range is currently limited to 25 meters." - New() - ..() - //So the scrubbers have time to spawn - spawn(10) - scanscrubbers() + Initialize() + . = ..() + + scanscrubbers() attack_ai(var/mob/user as mob) return src.attack_hand(user) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index ba089d2585d..ccba5d9a523 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -133,7 +133,7 @@ update_flag */ if (src.destroyed) - src.overlays = 0 + cut_overlays() src.icon_state = text("[]-1", src.canister_color) return @@ -143,20 +143,20 @@ update_flag if(check_change()) //Returns 1 if no change needed to icons. return - src.overlays = 0 + cut_overlays() if(update_flag & 1) - overlays += "can-open" + add_overlay("can-open") if(update_flag & 2) - overlays += "can-connector" + add_overlay("can-connector") if(update_flag & 4) - overlays += "can-o0" + add_overlay("can-o0") if(update_flag & 8) - overlays += "can-o1" + add_overlay("can-o1") else if(update_flag & 16) - overlays += "can-o2" + add_overlay("can-o2") else if(update_flag & 32) - overlays += "can-o3" + add_overlay("can-o3") return /obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) @@ -386,36 +386,32 @@ update_flag return 1 -/obj/machinery/portable_atmospherics/canister/phoron/New() - ..() +/obj/machinery/portable_atmospherics/canister/phoron/Initialize() + . = ..() src.air_contents.adjust_gas("phoron", MolesForPressure()) src.update_icon() - return 1 -/obj/machinery/portable_atmospherics/canister/oxygen/New() - ..() +/obj/machinery/portable_atmospherics/canister/oxygen/Initialize() + . = ..() src.air_contents.adjust_gas("oxygen", MolesForPressure()) src.update_icon() - return 1 -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/New() - ..() +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/Initialize() + . = ..() src.air_contents.temperature = 80 src.update_icon() - return 1 -/obj/machinery/portable_atmospherics/canister/sleeping_agent/New() - ..() +/obj/machinery/portable_atmospherics/canister/sleeping_agent/Initialize() + . = ..() air_contents.adjust_gas("sleeping_agent", MolesForPressure()) src.update_icon() - return 1 //Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 -/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New() - ..() +/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/Initialize() + . = ..() air_contents.gas["sleeping_agent"] = 9*4000 spawn(10) var/turf/simulated/location = src.loc @@ -424,52 +420,41 @@ update_flag sleep(10) location.assume_air(air_contents) air_contents = new - return 1 -/obj/machinery/portable_atmospherics/canister/nitrogen/New() - ..() +/obj/machinery/portable_atmospherics/canister/nitrogen/Initialize() + . = ..() src.air_contents.adjust_gas("nitrogen", MolesForPressure()) src.update_icon() - return 1 -/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled/New() - ..() +/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled/Initialize() + . = ..() src.air_contents.temperature = 80 src.update_icon() - return 1 -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New() - ..() +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/Initialize() + . = ..() src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure()) src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/air/New() - ..() +/obj/machinery/portable_atmospherics/canister/air/Initialize() + . = ..() var/list/air_mix = StandardAirMix() src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"]) src.update_icon() - return 1 - - // Special types used for engine setup admin verb, they contain double amount of that of normal canister. -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New() - ..() +/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/Initialize() + . = ..() src.air_contents.adjust_gas("nitrogen", MolesForPressure()) src.update_icon() - return 1 -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New() - ..() +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/Initialize() + . = ..() src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure()) src.update_icon() - return 1 -/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New() - ..() +/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/Initialize() + . = ..() src.air_contents.adjust_gas("phoron", MolesForPressure()) src.update_icon() - return 1 diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index e2a0aed826a..8d46f89e3a0 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -11,12 +11,9 @@ use_power = 1 idle_power_usage = 15 -/obj/machinery/meter/New() - ..() - src.target = locate(/obj/machinery/atmospherics/pipe) in loc - return 1 -/obj/machinery/meter/initialize() +/obj/machinery/meter/Initialize() + . = ..() if (!target) src.target = locate(/obj/machinery/atmospherics/pipe) in loc @@ -50,7 +47,7 @@ icon_state = "meter4" if(frequency) - var/datum/radio_frequency/radio_connection = radio_controller.return_frequency(frequency) + var/datum/radio_frequency/radio_connection = SSradio.return_frequency(frequency) if(!radio_connection) return @@ -108,13 +105,9 @@ // TURF METER - REPORTS A TILE'S AIR CONTENTS -/obj/machinery/meter/turf/New() - ..() +/obj/machinery/meter/turf/Initialize() + . = ..() src.target = loc - return 1 - - -/obj/machinery/meter/turf/initialize() if (!target) src.target = loc diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 6081e40089c..8fd169e7359 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -12,26 +12,21 @@ var/start_pressure = ONE_ATMOSPHERE var/maximum_pressure = 90 * ONE_ATMOSPHERE -/obj/machinery/portable_atmospherics/New() - ..() - - air_contents.volume = volume - air_contents.temperature = T20C - - return 1 - /obj/machinery/portable_atmospherics/Destroy() qdel(air_contents) qdel(holding) - ..() + return ..() -/obj/machinery/portable_atmospherics/initialize() +/obj/machinery/portable_atmospherics/Initialize() . = ..() - spawn() - var/obj/machinery/atmospherics/portables_connector/port = locate() in loc - if(port) - connect(port) - update_icon() + + air_contents.volume = volume + air_contents.temperature = T20C + + var/obj/machinery/atmospherics/portables_connector/port = locate() in loc + if(port) + connect(port) + update_icon() /obj/machinery/portable_atmospherics/process() if(!connected_port) //only react when pipe_network will ont it do it for you @@ -43,7 +38,7 @@ /obj/machinery/portable_atmospherics/Destroy() qdel(air_contents) - ..() + return ..() /obj/machinery/portable_atmospherics/proc/StandardAirMix() return list( diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 90ce07d6eaa..95266dcf664 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -22,15 +22,15 @@ /obj/machinery/portable_atmospherics/powered/pump/filled start_pressure = 90 * ONE_ATMOSPHERE -/obj/machinery/portable_atmospherics/powered/pump/New() - ..() +/obj/machinery/portable_atmospherics/powered/pump/Initialize() + . = ..() cell = new/obj/item/weapon/cell/apc(src) var/list/air_mix = StandardAirMix() src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"]) /obj/machinery/portable_atmospherics/powered/pump/update_icon() - src.overlays = 0 + cut_overlays() if(on && cell && cell.charge) icon_state = "psiphon:1" @@ -38,10 +38,10 @@ icon_state = "psiphon:0" if(holding) - overlays += "siphon-open" + add_overlay("siphon-open") if(connected_port) - overlays += "siphon-connector" + add_overlay("siphon-connector") return diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 35cbbc8d21c..4a19f52b769 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -20,8 +20,8 @@ var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "sleeping_agent") -/obj/machinery/portable_atmospherics/powered/scrubber/New() - ..() +/obj/machinery/portable_atmospherics/powered/scrubber/Initialize() + . = ..() cell = new/obj/item/weapon/cell/apc(src) /obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) @@ -36,7 +36,7 @@ ..(severity) /obj/machinery/portable_atmospherics/powered/scrubber/update_icon() - src.overlays = 0 + cut_overlays() if(on && cell && cell.charge) icon_state = "pscrubber:1" @@ -44,10 +44,10 @@ icon_state = "pscrubber:0" if(holding) - overlays += "scrubber-open" + add_overlay("scrubber-open") if(connected_port) - overlays += "scrubber-connector" + add_overlay("scrubber-connector") return @@ -157,9 +157,9 @@ var/global/gid = 1 var/id = 0 -/obj/machinery/portable_atmospherics/powered/scrubber/huge/New() - ..() - cell = null +/obj/machinery/portable_atmospherics/powered/scrubber/huge/Initialize() + . = ..() + QDEL_NULL(cell) id = gid gid++ diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index e4f4a013f6a..cf049bd23f7 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -24,9 +24,8 @@ var/datum/wires/autolathe/wires = null -/obj/machinery/autolathe/New() - - ..() +/obj/machinery/autolathe/Initialize() + . = ..() wires = new(src) //Create parts for lathe. component_parts = list() diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index e28209268bb..03199f4b286 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -6,12 +6,16 @@ //Create global autolathe recipe list if it hasn't been made already. autolathe_recipes = list() autolathe_categories = list() - for(var/R in typesof(/datum/autolathe/recipe)-/datum/autolathe/recipe) + for(var/R in subtypesof(/datum/autolathe/recipe)) var/datum/autolathe/recipe/recipe = new R autolathe_recipes += recipe autolathe_categories |= recipe.category var/obj/item/I = new recipe.path + // Since this runs before SSatoms runs, we've got to force initialization manually. + if (!I.initialized) + SSatoms.InitAtom(I, list(TRUE)) + if(I.matter && !recipe.resources) //This can be overidden in the datums. recipe.resources = list() for(var/material in I.matter) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index b1f76e21e6b..5fcb4e66686 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -16,8 +16,8 @@ var/capacity = 50 -/obj/machinery/biogenerator/New() - ..() +/obj/machinery/biogenerator/Initialize() + . = ..() var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src @@ -73,6 +73,9 @@ if(i >= capacity) user << "You fill \the [src] to its capacity." break + + CHECK_TICK + if(i < capacity) user << "You empty \the [O] into \the [src]." @@ -154,6 +157,7 @@ points += 1 else points += I.reagents.get_reagent_amount("nutriment") * 10 * eat_eff qdel(I) + CHECK_TICK if(S) processing = 1 update_icon() diff --git a/code/game/machinery/bluespacerelay.dm b/code/game/machinery/bluespacerelay.dm index 4f7ab82207c..d07d12d865f 100644 --- a/code/game/machinery/bluespacerelay.dm +++ b/code/game/machinery/bluespacerelay.dm @@ -25,8 +25,8 @@ else icon_state = "[initial(icon_state)]_off" -/obj/machinery/bluespacerelay/New() - ..() +/obj/machinery/bluespacerelay/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/bluespacerelay(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) @@ -34,6 +34,7 @@ component_parts += new /obj/item/weapon/stock_parts/subspace/filter(src) component_parts += new /obj/item/weapon/stock_parts/subspace/crystal(src) component_parts += new /obj/item/stack/cable_coil(src, 30) + /obj/machinery/bluespacerelay/proc/update_power() if(stat & (BROKEN|NOPOWER|EMPED)) @@ -49,4 +50,4 @@ if(default_part_replacement(user, O)) return - ..() \ No newline at end of file + ..() diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 1b892c3911c..7709c309493 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -110,22 +110,23 @@ /obj/machinery/bot/emp_act(severity) var/was_on = on stat |= EMPED - var/obj/effect/overlay/pulse2 = getFromPool(/obj/effect/overlay, src.loc ) + var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(src.loc) pulse2.icon = 'icons/effects/effects.dmi' pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" pulse2.anchored = 1 pulse2.set_dir(pick(cardinal)) - spawn(10) - qdel(pulse2) + QDEL_IN(pulse2, 10) + if (on) turn_off() - spawn(severity*300) - stat &= ~EMPED - if (was_on) - turn_on() + addtimer(CALLBACK(src, .proc/post_emp, was_on), severity * 300) +/obj/machinery/bot/proc/post_emp(was_on) + stat &= ~EMPED + if (was_on) + turn_on() /obj/machinery/bot/attack_ai(mob/user as mob) src.attack_hand(user) diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 822770afe96..4d474e27972 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -55,34 +55,32 @@ var/bloodiness = 0 // count of bloodiness -/obj/machinery/bot/mulebot/New() - ..() +/obj/machinery/bot/mulebot/Initialize() + . = ..() wires = new(src) botcard = new(src) botcard.access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) cell = new(src) cell.charge = 2000 cell.maxcharge = 2000 + if(SSradio) + SSradio.add_object(src, control_freq, filter = RADIO_MULEBOT) + SSradio.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) - spawn(5) // must wait for map loading to finish - if(radio_controller) - radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT) - radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) - - var/count = 0 - for(var/obj/machinery/bot/mulebot/other in world) - count++ - if(!suffix) - suffix = "#[count]" - name = "Mulebot ([suffix])" + var/count = 0 + for(var/obj/machinery/bot/mulebot/other in world) + count++ + if(!suffix) + suffix = "#[count]" + name = "Mulebot ([suffix])" /obj/machinery/bot/mulebot/Destroy() unload(0) qdel(wires) wires = null - if(radio_controller) - radio_controller.remove_object(src,beacon_freq) - radio_controller.remove_object(src,control_freq) + if(SSradio) + SSradio.remove_object(src,beacon_freq) + SSradio.remove_object(src,control_freq) return ..() // attack by item @@ -821,7 +819,7 @@ if(freq == control_freq && !wires.RemoteTX()) return - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) + var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) if(!frequency) return @@ -870,8 +868,8 @@ var/turf/Tsec = get_turf(src) new /obj/item/device/assembly/prox_sensor(Tsec) - getFromPool(/obj/item/stack/rods, Tsec) - getFromPool(/obj/item/stack/rods, Tsec) + new /obj/item/stack/rods(Tsec) + new /obj/item/stack/rods(Tsec) new /obj/item/stack/cable_coil/cut(Tsec) if (cell) cell.loc = Tsec diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 99df45a1491..beccbdae8ac 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -13,8 +13,8 @@ var/_wifi_id var/datum/wifi/sender/wifi_sender -/obj/machinery/button/initialize() - ..() +/obj/machinery/button/Initialize() + . = ..() update_icon() if(_wifi_id && !wifi_sender) wifi_sender = new/datum/wifi/sender/button(_wifi_id, src) @@ -114,17 +114,18 @@ /obj/machinery/button/mass_driver name = "mass driver button" -/obj/machinery/button/mass_driver/initialize() +/obj/machinery/button/mass_driver/Initialize() + . = ..() if(_wifi_id) wifi_sender = new/datum/wifi/sender/mass_driver(_wifi_id, src) - ..() /obj/machinery/button/mass_driver/activate(mob/living/user) if(active || !istype(wifi_sender)) return active = 1 - use_power(5) + if(use_power) + use_power(active_power_usage) update_icon() wifi_sender.activate() active = 0 @@ -159,10 +160,10 @@ else icon_state = "doorctrl2" -/obj/machinery/button/toggle/door/initialize() +/obj/machinery/button/toggle/door/Initialize() if(_wifi_id) wifi_sender = new/datum/wifi/sender/door(_wifi_id, src) - ..() + . = ..() /obj/machinery/button/toggle/door/activate(mob/living/user) if(operating || !istype(wifi_sender)) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 2327d816e23..b0291595683 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -35,10 +35,11 @@ var/affected_by_emp_until = 0 -/obj/machinery/camera/New() +/obj/machinery/camera/Initialize() wires = new(src) assembly = new(src) assembly.state = 4 + SSmachinery.all_cameras += src /* // Use this to look for cameras that have the same c_tag. for(var/obj/machinery/camera/C in cameranet.cameras) @@ -53,9 +54,10 @@ error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]") ASSERT(src.network) ASSERT(src.network.len > 0) - ..() + return ..() /obj/machinery/camera/Destroy() + SSmachinery.all_cameras -= src deactivate(null, 0) //kick anyone viewing out if(assembly) qdel(assembly) @@ -86,7 +88,6 @@ kick_viewers() update_icon() update_coverage() - processing_objects |= src /obj/machinery/camera/bullet_act(var/obj/item/projectile/P) take_damage(P.get_structure_damage()) diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index b93c976779b..df0a30fd86f 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -75,8 +75,8 @@ var/global/list/engineering_networks = list( // EMP -/obj/machinery/camera/emp_proof/New() - ..() +/obj/machinery/camera/emp_proof/Initialize() + . = ..() upgradeEmpProof() // X-RAY @@ -93,14 +93,14 @@ var/global/list/engineering_networks = list( /obj/machinery/camera/xray/research network = list(NETWORK_RESEARCH) -/obj/machinery/camera/xray/New() - ..() +/obj/machinery/camera/xray/Initialize() + . = ..() upgradeXRay() // MOTION -/obj/machinery/camera/motion/New() - ..() +/obj/machinery/camera/motion/Initialize() + . = ..() upgradeMotion() /obj/machinery/camera/motion/engineering_outpost @@ -115,8 +115,8 @@ var/global/list/engineering_networks = list( /obj/machinery/camera/all/command network = list(NETWORK_COMMAND) -/obj/machinery/camera/all/New() - ..() +/obj/machinery/camera/all/Initialize() + . = ..() upgradeEmpProof() upgradeXRay() upgradeMotion() @@ -126,20 +126,19 @@ var/global/list/engineering_networks = list( var/number = 0 //camera number in area //This camera type automatically sets it's name to whatever the area that it's in is called. -/obj/machinery/camera/autoname/New() - ..() - spawn(10) - number = 1 - var/area/A = get_area(src) - if(A) - for(var/obj/machinery/camera/autoname/C in world) - if(C == src) continue - var/area/CA = get_area(C) - if(CA.type == A.type) - if(C.number) - number = max(number, C.number+1) - c_tag = "[A.name] #[number]" - invalidateCameraCache() +/obj/machinery/camera/autoname/Initialize() + . = ..() + number = 1 + var/area/A = get_area(src) + if(A) + for(var/obj/machinery/camera/autoname/C in world) + if(C == src) continue + var/area/CA = get_area(C) + if(CA.type == A.type) + if(C.number) + number = max(number, C.number+1) + c_tag = "[A.name] #[number]" + invalidateCameraCache() // CHECKS diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index cce88f74cd0..b52afdbd3cc 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -199,21 +199,11 @@ ai_camera_list() /proc/camera_sort(list/L) - var/obj/machinery/camera/a - var/obj/machinery/camera/b - - for (var/i = L.len, i > 0, i--) - for (var/j = 1 to i - 1) - a = L[j] - b = L[j + 1] - if (a.c_tag_order != b.c_tag_order) - if (a.c_tag_order > b.c_tag_order) - L.Swap(j, j + 1) - else - if (sorttext(a.c_tag, b.c_tag) < 0) - L.Swap(j, j + 1) - return L - + if (!L) + return + var/list/target = L.Copy() + // sortTim sorts in-place, but returns a ref to the list anyways. + return sortTim(target, /proc/cmp_camera, FALSE) mob/living/proc/near_camera() if (!isturf(loc)) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 58a0965b843..4b2621ae84e 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -22,12 +22,12 @@ if(chargelevel != newlevel) - overlays.Cut() - overlays += "ccharger-o[newlevel]" + cut_overlays() + add_overlay("ccharger-o[newlevel]") chargelevel = newlevel else - overlays.Cut() + cut_overlays() /obj/machinery/cell_charger/examine(mob/user) if(!..(user, 5)) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 24001431ead..399287e5cdd 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -43,8 +43,8 @@ var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk var/biomass = CLONE_BIOMASS * 3 -/obj/machinery/clonepod/New() - ..() +/obj/machinery/clonepod/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/clonepod(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index f59502a31ba..fa7f1ae1b36 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -11,8 +11,8 @@ var/mob/living/carbon/human/victim = null var/obj/machinery/optable/table = null -/obj/machinery/computer/operating/New() - ..() +/obj/machinery/computer/operating/Initialize() + . = ..() for(dir in list(NORTH,EAST,SOUTH,WEST)) table = locate(/obj/machinery/optable, get_step(src, dir)) if (table) diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm index 3d45813923d..2319288dab3 100644 --- a/code/game/machinery/computer/RCON_Console.dm +++ b/code/game/machinery/computer/RCON_Console.dm @@ -22,7 +22,7 @@ /obj/machinery/computer/rcon/Destroy() qdel(rcon) rcon = null - ..() + return ..() // Proc: attack_hand() // Parameters: 1 (user - Person which clicked this computer) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 7241561d012..ba75ebc3ccc 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -190,7 +190,7 @@ /obj/structure/AIcore/deactivated/Destroy() if(src in empty_playable_ai_cores) empty_playable_ai_cores -= src - ..() + return ..() /obj/structure/AIcore/deactivated/proc/load_ai(var/mob/living/silicon/ai/transfer, var/obj/item/weapon/aicard/card, var/mob/user) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index cd78a90dcc7..13d96e76872 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -30,15 +30,16 @@ /obj/item/toy/cultsword = 1 ) -/obj/machinery/computer/arcade/New() - ..() +/obj/machinery/computer/arcade/Initialize() + . = ..() // If it's a generic arcade machine, pick a random arcade // circuit board for it and make the new machine if(!circuit) var/choice = pick(typesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade) var/obj/item/weapon/circuitboard/CB = new choice() new CB.build_path(loc, CB) - qdel(src) + + return INITIALIZE_HINT_QDEL /obj/machinery/computer/arcade/proc/prizevend() if(!contents.len) @@ -277,4 +278,4 @@ name = "Outbomb Cuban Pete" src.updateUsrDialog() - return 1 \ No newline at end of file + return 1 diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index f2e62715d83..e1c4d32a223 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -12,13 +12,13 @@ var/global/list/minor_air_alarms = list() icon_screen = "alert:0" light_color = LIGHT_COLOR_CYAN -/obj/machinery/computer/atmos_alert/initialize() - ..() +/obj/machinery/computer/atmos_alert/Initialize() + . = ..() atmosphere_alarm.register_alarm(src, /obj/machinery/computer/station_alert/update_icon) /obj/machinery/computer/atmos_alert/Destroy() atmosphere_alarm.unregister_alarm(src) - ..() + return ..() /obj/machinery/computer/atmos_alert/attack_hand(mob/user) ui_interact(user) diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index ebe6d69e1c7..3d122ef28e6 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -15,9 +15,6 @@ var/list/monitored_alarm_ids = null var/datum/nano_module/atmos_control/atmos_control -/obj/machinery/computer/atmoscontrol/New() - ..() - /obj/machinery/computer/atmoscontrol/laptop name = "Atmospherics Laptop" desc = "A cheap laptop." diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 30684a17c4b..b80db0d04e3 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -12,10 +12,10 @@ var/cache_id = 0 circuit = /obj/item/weapon/circuitboard/security -/obj/machinery/computer/security/New() +/obj/machinery/computer/security/Initialize() if(!network) network = station_networks.Copy() - ..() + . = ..() if(network.len) current_network = network[1] @@ -250,10 +250,10 @@ circuit = /obj/item/weapon/circuitboard/security/engineering light_color = "#FAC54B" -/obj/machinery/computer/security/engineering/New() +/obj/machinery/computer/security/engineering/Initialize() if(!network) network = engineering_networks.Copy() - ..() + . = ..() /obj/machinery/computer/security/nuclear name = "head mounted camera monitor" @@ -263,6 +263,6 @@ circuit = null is_holographic = FALSE // I mean, it is, but the holo effect looks terrible with the current merc shuttle floor. -/obj/machinery/computer/security/nuclear/New() - ..() +/obj/machinery/computer/security/nuclear/Initialize() + . = ..() req_access = list(150) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index c385eb93103..3bfb9d38f27 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -16,8 +16,8 @@ var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything. var/loading = 0 // Nice loading text -/obj/machinery/computer/cloning/initialize() - ..() +/obj/machinery/computer/cloning/Initialize() + . = ..() set_expansion(/datum/expansion/multitool, new/datum/expansion/multitool/cryo(src, list(/proc/is_operable))) updatemodules() diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index e9a8dae3e68..d4121a7d7a3 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -422,12 +422,12 @@ dat += "
\[ [(src.aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" return dat -/proc/enable_prison_shuttle(var/mob/user) +/*/proc/enable_prison_shuttle(var/mob/user) for(var/obj/machinery/computer/prison_shuttle/PS in world) - PS.allowedtocall = !(PS.allowedtocall) + PS.allowedtocall = !(PS.allowedtocall)*/ /proc/call_shuttle_proc(var/mob/user) - if ((!( ticker ) || !emergency_shuttle.location())) + if ((!(ROUND_IS_STARTED) || !emergency_shuttle.location())) return if(!universe.OnShuttleCall(usr)) @@ -454,7 +454,7 @@ user << "The emergency shuttle is already on its way." return - if(ticker.mode.name == "blob") + if(SSticker.mode.name == "blob") user << "Under directive 7-10, [station_name()] is quarantined until further notice." return @@ -466,7 +466,7 @@ return /proc/init_shift_change(var/mob/user, var/force = 0) - if ((!( ticker ) || !emergency_shuttle.location())) + if ((!(ROUND_IS_STARTED) || !emergency_shuttle.location())) return if(emergency_shuttle.going_to_centcom()) @@ -491,11 +491,11 @@ user << "The shuttle is refueling. Please wait another [round((54000-world.time)/60)] minutes before trying again." return - if(ticker.mode.auto_recall_shuttle) + if(SSticker.mode.auto_recall_shuttle) //New version pretends to call the shuttle but cause the shuttle to return after a random duration. emergency_shuttle.auto_recall = 1 - if(ticker.mode.name == "blob" || ticker.mode.name == "epidemic") + if(SSticker.mode.name == "blob" || SSticker.mode.name == "epidemic") user << "Under directive 7-10, [station_name()] is quarantined until further notice." return @@ -512,9 +512,9 @@ return /proc/cancel_call_proc(var/mob/user) - if (!( ticker ) || !emergency_shuttle.can_recall()) + if (!(ROUND_IS_STARTED) || !emergency_shuttle.can_recall()) return - if((ticker.mode.name == "blob")||(ticker.mode.name == "Meteor")) + if((SSticker.mode.name == "blob")||(SSticker.mode.name == "Meteor")) return if(!emergency_shuttle.going_to_centcom()) //check that shuttle isn't already heading to centcomm @@ -532,7 +532,7 @@ /obj/machinery/computer/communications/proc/post_status(var/command, var/data1, var/data2) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) if(!frequency) return diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 775b3aa937f..79439c401bb 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -16,11 +16,9 @@ var/overlay_layer var/is_holographic = TRUE -/obj/machinery/computer/New() +/obj/machinery/computer/Initialize() + . = ..() overlay_layer = layer - ..() - -/obj/machinery/computer/initialize() power_change() update_icon() @@ -56,7 +54,7 @@ ..() /obj/machinery/computer/update_icon() - overlays.Cut() + cut_overlays() if(stat & NOPOWER) set_light(0) return @@ -64,11 +62,17 @@ set_light(light_range_on, light_power_on) if(stat & BROKEN) - overlays += image(icon,"[icon_state]_broken", overlay_layer) + if (overlay_layer != layer) + add_overlay(image(icon,"[icon_state]_broken", overlay_layer)) + else + add_overlay("[icon_state]_broken") else if (is_holographic) holographic_overlay(src, src.icon, icon_screen) else - overlays += image(icon, icon_screen, overlay_layer) + if (overlay_layer != layer) + add_overlay(image(icon, icon_screen, overlay_layer)) + else + add_overlay(icon_screen) /obj/machinery/computer/power_change() ..() diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 94eeb8428c7..ed323a9a6b1 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -17,7 +17,7 @@ /obj/machinery/computer/crew/Destroy() qdel(crew_monitor) crew_monitor = null - ..() + return ..() /obj/machinery/computer/crew/attack_ai(mob/user) ui_interact(user) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 19c63736c68..af4983258ee 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -558,7 +558,7 @@ /obj/machinery/computer/med_data/laptop name = "Medical Laptop" desc = "A cheap laptop." - icon_state = "laptop" + icon_state = "medlaptop0" icon_screen = "medlaptop" is_holographic = FALSE diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index b8f1638c4bd..2bb9dcf126e 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -65,7 +65,7 @@ MK.loc = src.loc // Will help make emagging the console not so easy to get away with. MK.info += "

£%@%(*$%&(£&?*(%&£/{}" - spawn(100*length(src.linkedServer.decryptkey)) UnmagConsole() + addtimer(CALLBACK(src, .proc/UnmagConsole), 100 * length(linkedServer.decryptkey)) message = rebootmsg update_icon() return 1 @@ -79,12 +79,12 @@ icon_screen = initial(icon_screen) ..() -/obj/machinery/computer/message_monitor/initialize() +/obj/machinery/computer/message_monitor/Initialize() + . = ..() //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. if(!linkedServer) if(message_servers && message_servers.len > 0) linkedServer = message_servers[1] - return /obj/machinery/computer/message_monitor/attack_hand(var/mob/living/user as mob) if(stat & (NOPOWER|BROKEN)) @@ -517,14 +517,16 @@ name = "Monitor Decryption Key" var/obj/machinery/message_server/server = null -/obj/item/weapon/paper/monitorkey/New() +/obj/item/weapon/paper/monitorkey/Initialize() ..() - spawn(10) - if(message_servers) - for(var/obj/machinery/message_server/server in message_servers) - if(!isnull(server)) - if(!isnull(server.decryptkey)) - info = "

Daily Key Reset


The new message monitor key is '[server.decryptkey]'.
Please keep this a secret and away from the clown.
If necessary, change the password to a more secure one." - info_links = info - icon_state = "paper_words" - break + return INITIALIZE_HINT_LATELOAD + +/obj/item/weapon/paper/monitorkey/LateInitialize() + if(message_servers) + for(var/obj/machinery/message_server/server in message_servers) + if(!isnull(server)) + if(!isnull(server.decryptkey)) + info = "

Daily Key Reset


The new message monitor key is '[server.decryptkey]'.
Please keep this a secret and away from the clown.
If necessary, change the password to a more secure one." + info_links = info + icon_state = "paper_words" + break diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 3e2cda84af5..977d5d1f4b7 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -12,17 +12,12 @@ var/time = 30.0 var/title = "Mass Driver Controls" - -/obj/machinery/computer/pod/New() - ..() - spawn( 5 ) - for(var/obj/machinery/mass_driver/M in world) - if(M.id == id) - connected = M - else - return - return - +/obj/machinery/computer/pod/Initialize() + . = ..() + for(var/obj/machinery/mass_driver/M in world) + if(M.id == id) + connected = M + return /obj/machinery/computer/pod/proc/alarm() if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index b4d2b6fc477..8ad18ad985c 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -143,7 +143,7 @@ var/prison_shuttle_timeleft = 0 proc/post_signal(var/command) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1311) + var/datum/radio_frequency/frequency = SSradio.return_frequency(1311) if(!frequency) return var/datum/signal/status_signal = new status_signal.source = src diff --git a/code/game/machinery/computer/sentencing.dm b/code/game/machinery/computer/sentencing.dm index 09e125eb8ea..3ff81c8eeb2 100644 --- a/code/game/machinery/computer/sentencing.dm +++ b/code/game/machinery/computer/sentencing.dm @@ -302,7 +302,7 @@ . += "There was an error loading the incident, please Try Again" return . - if( !istype( corp_regs )) + if( !istype( SSlaw )) . += "There was an error loading corporate regulations, please Try Again" return . @@ -363,7 +363,7 @@ . += "
" . += "" - for( var/datum/law/L in corp_regs.low_severity ) + for( var/datum/law/L in SSlaw.low_severity ) . += "" . += "" . += "" @@ -393,7 +393,7 @@ . += "" . += "" - for( var/datum/law/L in corp_regs.med_severity ) + for( var/datum/law/L in SSlaw.med_severity ) . += "" . += "" . += "" @@ -422,7 +422,7 @@ . += "" . += "" - for( var/datum/law/L in corp_regs.high_severity ) + for( var/datum/law/L in SSlaw.high_severity ) . += "" . += "" . += "" diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index e40b0751752..215f3f327fd 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -11,7 +11,7 @@ attackby(var/obj/item/weapon/card/W as obj, var/mob/user as mob) if(stat & (BROKEN|NOPOWER)) return - if ((!( istype(W, /obj/item/weapon/card) ) || !( ticker ) || emergency_shuttle.location() || !( user ))) return + if ((!( istype(W, /obj/item/weapon/card) ) || !(ROUND_IS_STARTED) || emergency_shuttle.location() || !( user ))) return if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if (istype(W, /obj/item/device/pda)) var/obj/item/device/pda/pda = W diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 7a0a92b1d2e..f60ab34fcb0 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -3,7 +3,7 @@ /obj/machinery/computer/skills//TODO:SANITY name = "employment records console" desc = "Used to view, edit and maintain employment records." - icon_state = "laptop" + icon_state = "medlaptop0" icon_screen = "medlaptop" light_color = "#00b000" diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index c5039b0d68d..45840470686 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -18,10 +18,10 @@ /obj/machinery/computer/station_alert/all monitor_type = /datum/nano_module/alarm_monitor/all -/obj/machinery/computer/station_alert/initialize() +/obj/machinery/computer/station_alert/Initialize() alarm_monitor = new monitor_type(src) alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon) - ..() + . = ..() if(monitor_type) register_monitor(new monitor_type(src)) diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm index 552b2302660..f73aea65a5c 100644 --- a/code/game/machinery/computer/supply.dm +++ b/code/game/machinery/computer/supply.dm @@ -36,11 +36,11 @@ if(temp) dat = temp else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle if (shuttle) dat += {"
Supply shuttle
Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
-
Supply points: [supply_controller.points]
+
Supply points: [SScargo.points]

\nRequest items

View approved orders

View requests

@@ -62,18 +62,18 @@ //all_supply_groups //Request what? last_viewed_group = "categories" - temp = "Supply points: [supply_controller.points]
" + temp = "Supply points: [SScargo.points]
" temp += "Main Menu


" temp += "Select a category

" for(var/supply_group_name in all_supply_groups ) temp += "[supply_group_name]
" else last_viewed_group = href_list["order"] - temp = "Supply points: [supply_controller.points]
" + temp = "Supply points: [SScargo.points]
" temp += "Back to all categories


" temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] + for(var/supply_name in SScargo.supply_packs ) + var/datum/supply_packs/N = SScargo.supply_packs[supply_name] if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage @@ -84,7 +84,7 @@ return //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] + var/datum/supply_packs/P = SScargo.supply_packs[href_list["doorder"]] if(!istype(P)) return var/timeout = world.time + 600 @@ -101,11 +101,11 @@ else if(issilicon(usr)) idname = usr.real_name - supply_controller.ordernum++ + SScargo.ordernum++ var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) reqform.name = "Requisition Form - [P.name]" reqform.info += "

[station_name] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_controller.ordernum]
" + reqform.info += "INDEX: #[SScargo.ordernum]
" reqform.info += "REQUESTED BY: [idname]
" reqform.info += "RANK: [idrank]
" reqform.info += "REASON: [reason]
" @@ -121,24 +121,24 @@ //make our supply_order datum var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum + O.ordernum = SScargo.ordernum O.object = P O.orderedby = idname - supply_controller.requestlist += O + SScargo.requestlist += O temp = "Thanks for your request. The cargo team will process it as soon as possible.
" temp += "
BackMain Menu" else if (href_list["vieworders"]) temp = "Current approved orders:

" - for(var/S in supply_controller.shoppinglist) + for(var/S in SScargo.shoppinglist) var/datum/supply_order/SO = S temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]
" temp += "
OK" else if (href_list["viewrequests"]) temp = "Current requests:

" - for(var/S in supply_controller.requestlist) + for(var/S in SScargo.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
" temp += "
OK" @@ -163,7 +163,7 @@ if (temp) dat = temp else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle if (shuttle) dat += "
Supply shuttle
" dat += "\nLocation: " @@ -198,7 +198,7 @@ dat += "
\n
" - dat += {"
\nSupply points: [supply_controller.points]
\n
+ dat += {"
\nSupply points: [SScargo.points]
\n
\nOrder items
\n
\nView requests
\n
\nView orders
\n
@@ -216,10 +216,10 @@ return 1 /obj/machinery/computer/supplycomp/Topic(href, href_list) - if(!supply_controller) - world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." + if(!SScargo) + world.log << "## ERROR: Eek. The SScargo controller datum is missing somehow." return - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle if (!shuttle) world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow." return @@ -239,7 +239,7 @@ temp = "Initiating launch sequence. \[Force Launch\]

OK" else shuttle.launch(src) - temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" + temp = "The supply shuttle has been called and will arrive in approximately [round(SScargo.movetime/600,1)] minutes.

OK" post_signal("supply") if (href_list["force_send"]) @@ -254,25 +254,25 @@ //all_supply_groups //Request what? last_viewed_group = "categories" - temp = "Supply points: [supply_controller.points]
" + temp = "Supply points: [SScargo.points]
" temp += "Main Menu


" temp += "Select a category

" for(var/supply_group_name in all_supply_groups ) temp += "[supply_group_name]
" else last_viewed_group = href_list["order"] - temp = "Supply points: [supply_controller.points]
" + temp = "Supply points: [SScargo.points]
" temp += "Back to all categories


" temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] + for(var/supply_name in SScargo.supply_packs ) + var/datum/supply_packs/N = SScargo.supply_packs[supply_name] if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage - /*temp = "Supply points: [supply_controller.points]


Request what?

" + /*temp = "Supply points: [SScargo.points]


Request what?

" - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] + for(var/supply_name in SScargo.supply_packs ) + var/datum/supply_packs/N = SScargo.supply_packs[supply_name] if(N.hidden && !hacked) continue if(N.contraband && !can_order_contraband) continue temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage @@ -285,7 +285,7 @@ return //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] + var/datum/supply_packs/P = SScargo.supply_packs[href_list["doorder"]] if(!istype(P)) return var/timeout = world.time + 600 @@ -302,11 +302,11 @@ else if(issilicon(usr)) idname = usr.real_name - supply_controller.ordernum++ + SScargo.ordernum++ var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) reqform.name = "Requisition Form - [P.name]" reqform.info += "

[station_name] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_controller.ordernum]
" + reqform.info += "INDEX: #[SScargo.ordernum]
" reqform.info += "REQUESTED BY: [idname]
" reqform.info += "RANK: [idrank]
" reqform.info += "REASON: [reason]
" @@ -322,10 +322,10 @@ //make our supply_order datum var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum + O.ordernum = SScargo.ordernum O.object = P O.orderedby = idname - supply_controller.requestlist += O + SScargo.requestlist += O temp = "Order request placed.
" temp += "
Back | Main Menu | Authorize Order" @@ -336,15 +336,15 @@ var/datum/supply_order/O var/datum/supply_packs/P temp = "Invalid Request" - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] + for(var/i=1, i<=SScargo.requestlist.len, i++) + var/datum/supply_order/SO = SScargo.requestlist[i] if(SO.ordernum == ordernum) O = SO P = O.object - if(supply_controller.points >= P.cost) - supply_controller.requestlist.Cut(i,i+1) - supply_controller.points -= P.cost - supply_controller.shoppinglist += O + if(SScargo.points >= P.cost) + SScargo.requestlist.Cut(i,i+1) + SScargo.points -= P.cost + SScargo.shoppinglist += O temp = "Thanks for your order.
" temp += "
BackMain Menu" else @@ -354,7 +354,7 @@ else if (href_list["vieworders"]) temp = "Current approved orders:

" - for(var/S in supply_controller.shoppinglist) + for(var/S in SScargo.shoppinglist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]
"// (Cancel)
" temp += "
OK" @@ -372,7 +372,7 @@ */ else if (href_list["viewrequests"]) temp = "Current requests:

" - for(var/S in supply_controller.requestlist) + for(var/S in SScargo.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] ApproveRemove
" @@ -382,16 +382,16 @@ else if (href_list["rreq"]) var/ordernum = text2num(href_list["rreq"]) temp = "Invalid Request.
" - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] + for(var/i=1, i<=SScargo.requestlist.len, i++) + var/datum/supply_order/SO = SScargo.requestlist[i] if(SO.ordernum == ordernum) - supply_controller.requestlist.Cut(i,i+1) + SScargo.requestlist.Cut(i,i+1) temp = "Request removed.
" break temp += "
BackMain Menu" else if (href_list["clearreq"]) - supply_controller.requestlist.Cut() + SScargo.requestlist.Cut() temp = "List cleared.
" temp += "
OK" @@ -404,7 +404,7 @@ /obj/machinery/computer/supplycomp/proc/post_signal(var/command) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) if(!frequency) return diff --git a/code/game/machinery/crusher_piston.dm b/code/game/machinery/crusher_piston.dm new file mode 100644 index 00000000000..5020bd9fdbf --- /dev/null +++ b/code/game/machinery/crusher_piston.dm @@ -0,0 +1,508 @@ +#define PISTON_MOVE_DAMAGE 30 +#define PISTON_MOVE_DIVISOR 8 + +/obj/machinery/crusher_base + name = "trash compactor" + desc = "A colossal piston used for crushing garbage." + icon = 'icons/obj/machines/crusherbase.dmi' + icon_state = "standalone" + anchored = 1 + density = 1 + //Just 300 Watts here. Power is drawn by the piston when it moves + use_power = 1 + idle_power_usage = 300 + + var/obj/machinery/crusher_piston/pstn //Piston + + var/action = "idle" //Action the piston should perform + // idle -> Do nothing + // extend -> Extend the piston + // retract -> Retract the piston + + var/status = "idle"//The status the piston is in + // idle -> The piston is idle, doing nothing + // pre_start -> The piston is pre-starting + // stage1 -> The piston is at stage 1 + // stage2 -> The piston is at stage 2 + // stage3 -> The piston is at stage 3 + + var/blocked = 0 //If the piston has been blocked by something - Piston is stuck and preassure valve needs to be opened + var/valve_open = 0 //If the de-preassure valve is open - Pison cant be extended + var/num_progress = 0 //Numerical Progress value + + var/asmtype = "standalone" //If the base is a stand alone base or part of a combined crusher + // standalone -> Standalone base + // leftcap -> Left piece of a combined crusher + // middle -> Middle piece of a combined crusher + // rightcap -> Right piece of a combined crusher + + var/action_start_time = null //The time when the action has been started + var/time_stage_pre = 150 //The time it takes for the stage to complete + var/time_stage_1 = 100 //The time it takes for the stage to complete + var/time_stage_2 = 100 //The time it takes for the stage to complete + var/time_stage_3 = 100 //The time it takes for the stage to complete + var/time_stage_full = 100 //The time to wait when the piston is full extended + + var/list/items_to_move = list() //The list of tiems that should be moved by the piston + var/list/items_to_crush = list() //The list of items that should be destroyed by the piston + + var/initial = 1 // initial run of the piston process + + var/process_lock = 0 //If the call to process is locked because it is still running + +/obj/machinery/crusher_base/Initialize() + . = ..() + + //Create parts for crusher. + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/crusher(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) + RefreshParts() + + action_start_time = world.time + + //Spawn the stage 1 pistons south of it with a density of 0 + log_debug("Spawning Crusher Piston Stage") + pstn = new(get_step(src, SOUTH)) + pstn.crs_base = src + + queue_icon_update() + // Change the icons of the neighboring bases + change_neighbor_base_icons() + +/obj/machinery/crusher_base/Destroy() + QDEL_NULL(pstn) + return ..() + +/obj/machinery/crusher_base/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(default_deconstruction_screwdriver(user, O)) + return + //TODO: Add a chance to catch their hand in the mechanic if they do something while the crusher is in operation + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + + //Stuff you can do if the maint hatch is open + if(panel_open) + if(iswrench(O)) + user << "You start [valve_open ? "closing" : "opening"] the pressure relief valve of [src]." + if(do_after(user,50)) + valve_open = !valve_open + user << "You [valve_open ? "open" : "close"] the pressure relief valve of [src]." + if(valve_open) + blocked = 0 + action = "retract" + return + ..() + +/obj/machinery/crusher_base/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) + if(!istype(C)) + return 0 + if(num_progress != 0) //Piston needs to be retracted before you are able to deconstruct it + user << "You can not deconstruct [src] while the piston is extended." + return 0 + return ..() + +/obj/machinery/crusher_base/proc/change_neighbor_base_icons() + var/obj/machinery/crusher_base/left = locate(/obj/machinery/crusher_base, get_step(src, WEST)) + var/obj/machinery/crusher_base/right = locate(/obj/machinery/crusher_base, get_step(src, EAST)) + if (left) + left.queue_icon_update() + + if (right) + right.queue_icon_update() + +/obj/machinery/crusher_base/update_icon() + cut_overlays() + var/obj/machinery/crusher_base/left = locate(/obj/machinery/crusher_base, get_step(src, WEST)) + var/obj/machinery/crusher_base/right = locate(/obj/machinery/crusher_base, get_step(src, EAST)) + + if (left && right) + asmtype = "middle" + icon_state = asmtype + else if (left) + asmtype = "rightcap" + icon_state = asmtype + else if (right) + asmtype = "leftcap" + icon_state = asmtype + else + asmtype = "standalone" + icon_state = asmtype + + if(powered(EQUIP)) + if (blocked == 1) + holographic_overlay(src, icon, "[asmtype]-overlay-red") + else if(action != "idle") + holographic_overlay(src, icon, "[asmtype]-overlay-orange") + else + holographic_overlay(src, icon, "[asmtype]-overlay-green") + if(panel_open) + add_overlay("[asmtype]-hatch") + +/obj/machinery/crusher_base/power_change() + ..() + queue_icon_update() + +/obj/machinery/crusher_base/process() + set waitfor = FALSE + if (process_lock) + log_debug("crusher_piston process() has been called while it was still locked. Aborting") + return + process_lock = 1 + var/timediff = world.time - action_start_time + + //Check what action should be performed + if(action == "idle") + action_start_time = world.time + initial = 1 + else if(action == "extend" && powered(EQUIP)) + //If we are idle, flash the warning lights and then put us into pre_start once we are done + if(status == "idle") + if(initial) + playsound(loc, 'sound/machines/airalarm.ogg', 50, 1) //Plays a beep + initial = 0 + //TODO: Flash the lights + if(timediff > time_stage_pre) + initial = 1 + status = "pre_start" // Bring us into pre start + action_start_time = world.time + + + //We are now ready to expand the first piston + else if(status == "pre_start") + if(valve_check()) + //Call extend on all the stage 1 pistons + if(initial) + initial = 0 + num_progress = 33 + if(!pstn.extend_0_1()) + num_progress = 0 + status = "idle" + action = "idle" + initial = 1 + visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.") + log_debug("Cant extend piston 0-1 - Continue idling") + if(timediff > time_stage_1) + status = "stage1" + action_start_time = world.time + initial = 1 + + //Extend the second piston + else if(status == "stage1") + if(valve_check()) + //Call extend on all the stage 2 pistons + if(initial) + initial = 0 + num_progress = 66 + if(!pstn.extend_1_2()) + num_progress = 33 + action = "idle" + blocked = 1 + visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.") + log_debug("cant extend piston 1-2 - Blocked") + if(timediff > time_stage_2) + status = "stage2" + action_start_time = world.time + initial = 1 + + //Extend the thrid piston + else if(status == "stage2") + if(valve_check()) + //Call extend on all the stage 2 pistons + if(initial) + initial = 0 + num_progress = 100 + if(!pstn.extend_2_3()) + num_progress = 66 + action = "idle" + blocked = 1 + visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.") + log_debug("cant extend piston 2-3 - Blocked") + if(timediff > time_stage_3) + status = "stage3" + action_start_time = world.time + initial = 1 + + //Wait a moment, then reverse the direction + else if(status == "stage3") + if(initial) + initial = 0 + if(timediff > time_stage_full) + action = "retract" + action_start_time = world.time + initial = 1 + + //Update the icon + update_icon() + + //Retract the pistons + else if(action == "retract" && blocked == 0 && powered(EQUIP)) //Only retract if unblocked + update_icon() + num_progress = 0 + + //Retract the 3rd stage pistons + if(status == "stage3") + if(initial) + initial = 0 + pstn.retract_3_0() + if(timediff > time_stage_3) //Once the time is up, reset the icon state + pstn.icon_state = initial(pstn.icon_state) + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + else if(status == "stage2") + if(initial) + initial = 0 + pstn.retract_2_0() + if(timediff > time_stage_2) //Once the time is up, reset the icon state + pstn.icon_state = initial(pstn.icon_state) + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + else if(status == "stage1") + if(initial) + initial = 0 + pstn.retract_1_0() + if(timediff > time_stage_1) //Once the time is up, reset the icon state + pstn.icon_state = initial(pstn.icon_state) + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + else //This shouldnt really happen, but its there just in case + pstn.icon_state = initial(pstn.icon_state) + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + + //Move all the items in the move list + for(var/atom/movable/AM in items_to_move) + if(!AM.simulated) + items_to_move -= AM + continue + if(istype(AM,/obj/machinery/crusher_piston)) + items_to_move -= AM + continue + items_to_move -= AM + //If a item could not be moved. Add it to the crush list + if(!AM.piston_move()) + items_to_crush += AM + CHECK_TICK + + //Destroy all the items in the crush list + for(var/atom/movable/AM in items_to_crush) + items_to_crush -= AM + AM.crush_act() + CHECK_TICK + + process_lock = 0 + + +/obj/machinery/crusher_base/proc/crush_start() + action = "extend" + + +/obj/machinery/crusher_base/proc/crush_abort() + //Abort the crush + //Retract all the pistons, ... + action = "retract" + //TODO-Crusher: Add more stages to the piston so retracting will not cause a visual bug + +/obj/machinery/crusher_base/proc/get_num_progress() + return num_progress + +/obj/machinery/crusher_base/proc/get_action() + return action + +/obj/machinery/crusher_base/proc/get_status() + return status + +/obj/machinery/crusher_base/proc/is_blocked() + return blocked + +/obj/machinery/crusher_base/proc/valve_check() //Check if the depreasurization valve is open + if(valve_open == 1) + visible_message("The hydraulic pump in [src] briefly spins up and then shuts down.","You hear a pump spinning up briefly and then shutting down.") + action = "idle" + return 0 + return 1 + +//Piston Stage 1 +/obj/machinery/crusher_piston + name = "trash compactor piston" + desc = "A colossal piston used for crushing garbage." + icon = 'icons/obj/machines/crusherpiston.dmi' //Placeholder TODO: Get a proper icon + icon_state = "piston_0" + density = 0 + anchored = 1 + pixel_y = -64 + var/stage = 0 //The stage of the piston + var/obj/machinery/crusher_base/crs_base //Crusher Base the piston is linked to + var/obj/effect/piston_blocker/pb1 + var/obj/effect/piston_blocker/pb2 + var/obj/effect/piston_blocker/pb3 + + var/static/list/immovable_items + +/obj/machinery/crusher_piston/Initialize() + . = ..() + + // Setup the immovable items typecache. + // (We only want to do this once as this is a huge list.) + if (!LAZYLEN(immovable_items)) + immovable_items = typecacheof(list( + /obj/machinery, + /obj/structure, + /obj/item/modular_computer/telescreen, + /obj/item/modular_computer/console + )) - /obj/machinery/crusher_piston + +/obj/machinery/crusher_piston/Destroy() + QDEL_NULL(pb1) + QDEL_NULL(pb2) + QDEL_NULL(pb3) + return ..() + +/obj/machinery/crusher_piston/proc/extend_0_1() + use_power(5 KILOWATTS) + var/turf/T = get_turf(src) + if(!can_extend_into(T)) + log_debug("cant extend 0-1 - Abort") + return 0 + icon_state="piston_0_1" + stage = 1 + pb1 = new(loc) + for(var/atom/movable/AM in get_turf(loc)) + crs_base.items_to_move += AM + return 1 + +/obj/machinery/crusher_piston/proc/extend_1_2() + use_power(5 KILOWATTS) + var/turf/T = get_turf(pb1) + var/turf/extension_turf = get_step(T,SOUTH) + if(!can_extend_into(extension_turf)) + log_debug("cant extend 1-2 - Abort") + return 0 + icon_state="piston_1_2" + stage = 2 + pb2 = new(get_step(T,SOUTH)) + for(var/atom/movable/AM in extension_turf) + crs_base.items_to_move += AM + return 1 + +/obj/machinery/crusher_piston/proc/extend_2_3() + use_power(5 KILOWATTS) + var/turf/T = get_turf(pb2) + var/turf/extension_turf = get_step(T,SOUTH) + if(!can_extend_into(extension_turf)) + log_debug("cant extend 2-3 - Abort") + return 0 + icon_state="piston_2_3" + stage = 3 + pb3 = new(get_step(T,SOUTH)) + for(var/atom/movable/AM in extension_turf) + crs_base.items_to_move += AM + return 1 + +/obj/machinery/crusher_piston/proc/retract_3_0() + icon_state="piston_3_0" + stage = 0 + QDEL_NULL(pb1) + QDEL_NULL(pb2) + QDEL_NULL(pb3) +/obj/machinery/crusher_piston/proc/retract_2_0() + icon_state="piston_2_0" + stage = 0 + QDEL_NULL(pb1) + QDEL_NULL(pb2) + QDEL_NULL(pb3) +/obj/machinery/crusher_piston/proc/retract_1_0() + icon_state="piston_1_0" + stage = 0 + QDEL_NULL(pb1) + QDEL_NULL(pb2) + QDEL_NULL(pb3) + +/obj/machinery/crusher_piston/proc/can_extend_into(var/turf/extension_turf) + //Check if atom is of a specific Type + if (istype(extension_turf,/turf/simulated/wall)) + return 0 + for(var/atom/A in extension_turf) + if (is_type_in_typecache(A, immovable_items)) + return 0 + return 1 + +/obj/effect/piston_blocker + name = "trash compactor piston" + desc = "A colossal piston used for crushing garbage." + density = 1 + anchored = 1 + +// +// The piston_move proc for various objects +// +// Return 1 if it could successfully be moved +// Return 0 if it could not be moved +/atom/movable/proc/piston_move() + var/turf/T = get_turf(src) + + var/list/valid_turfs = list() + for(var/dir_to_test in cardinal) + var/turf/new_turf = get_step(T, dir_to_test) + if(!new_turf.contains_dense_objects()) + valid_turfs += new_turf + + while(valid_turfs.len) + T = pick(valid_turfs) + valid_turfs -= T + + if(src.forceMove(T)) + return 1 + // We failed to move our target + return 0 + +/mob/living/piston_move() + for(var/i = 1, i <= PISTON_MOVE_DIVISOR, i++) + adjustBruteLoss(round(PISTON_MOVE_DAMAGE / PISTON_MOVE_DIVISOR)) + AdjustStunned(5) + AdjustWeakened(5) + return ..() + +/mob/living/carbon/piston_move() + if(!(species && (species.flags & NO_PAIN))) + emote("scream") + return ..() + +//Dont call the parent and return 1 to prevent effects from getting moved +/obj/effect/piston_move() + return 1 + +// +// The crush act proc +// +/atom/movable/proc/crush_act() + ex_act(1) + if (!QDELETED(src)) + qdel(src)//Just as a failsafe + + +#undef PISTON_MOVE_DAMAGE +#undef PISTON_MOVE_DIVISOR diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 62ec0bbca9c..20d96c02e49 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -31,7 +31,7 @@ T.contents += contents if(beaker) beaker.loc = get_step(loc, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube - ..() + return ..() /obj/machinery/atmospherics/unary/cryo_cell/initialize() if(node) return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index d611ffd5cfc..7ff4b196657 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -52,7 +52,7 @@ var/dat - if (!( ticker )) + if (!(ROUND_IS_STARTED)) return dat += "

[storage_name]
" @@ -213,10 +213,10 @@ if(occupant) occupant.forceMove(loc) occupant.resting = 1 - ..() + return ..() -/obj/machinery/cryopod/initialize() - ..() +/obj/machinery/cryopod/Initialize() + . = ..() find_control_computer() diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 275ebce38d2..2f01bcb7ba4 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -235,20 +235,16 @@ for reference: return 0 proc/explode() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) /* var/obj/item/stack/rods/ =*/ - getFromPool(/obj/item/stack/rods, Tsec) + new /obj/item/stack/rods(get_turf(src)) spark(src, 3, alldirs) explosion(src.loc,-1,-1,0) - if(src) - qdel(src) + qdel(src) - /obj/machinery/deployable/barrier/emag_act(var/remaining_charges, var/mob/user) if (src.emagged == 0) src.emagged = 1 diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index b51d72ccd8e..1977e3399d7 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -194,6 +194,7 @@ return icon_state = "launcherbtt" + active = 0 update_icon() return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index cae51cb744b..6d523f85750 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -75,6 +75,15 @@ assembly_type = /obj/structure/door_assembly/door_assembly_com hatch_colour = "#446892" +/obj/machinery/door/airlock/sac + name = "Airlock" + icon = 'icons/obj/doors/DoorSAC.dmi' + assembly_type = null + aiControlDisabled = 1 + hackProof = 1 + electrified_until = -1 + open_sound_powered = 'sound/machines/airlock_creaking.ogg' + /obj/machinery/door/airlock/security name = "Airlock" icon = 'icons/obj/doors/Doorsec.dmi' @@ -137,6 +146,9 @@ opacity = 0 hatch_colour = "#606061" +/obj/machinery/door/airlock/centcom/attackby() + return + /obj/machinery/door/airlock/vault name = "Vault" icon = 'icons/obj/doors/vault.dmi' @@ -380,21 +392,6 @@ //------------------------- -/obj/machinery/door/airlock/process() - // Deliberate no call to parent. - if(main_power_lost_until > 0 && world.time >= main_power_lost_until) - regainMainPower() - - if(backup_power_lost_until > 0 && world.time >= backup_power_lost_until) - regainBackupPower() - - else if(electrified_until > 0 && world.time >= electrified_until) - electrify(0) - - ..() - - - /* About the new airlock wires panel: * An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. @@ -470,10 +467,13 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/loseMainPower() main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) + if (main_power_lost_until > 0) + addtimer(CALLBACK(src, .proc/regainMainPower), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) // If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running if(backup_power_lost_until == -1 && !backupPowerCablesCut()) backup_power_lost_until = world.time + SecondsToTicks(10) + addtimer(CALLBACK(src, .proc/regainBackupPower), 10 SECONDS, TIMER_UNIQUE | TIMER_NO_HASH_WAIT) // Disable electricity if required if(electrified_until && isAllPowerLoss()) @@ -481,6 +481,8 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/loseBackupPower() backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) + if (backup_power_lost_until > 0) + addtimer(CALLBACK(src, .proc/regainBackupPower), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) // Disable electricity if required if(electrified_until && isAllPowerLoss()) @@ -517,6 +519,8 @@ About the new airlock wires panel: shockedby += text("\[[time_stamp()]\] - EMP)") message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]." src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration) + if (electrified_until > 0) + addtimer(CALLBACK(src, .proc/electrify, 0), duration SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) if(feedback && message) usr << message @@ -566,9 +570,9 @@ About the new airlock wires panel: // Only set_light() if there's a change, no need to waste processor cycles with lighting updates. /obj/machinery/door/airlock/update_icon() - if (!isnull(gcDestroyed)) + if (QDELING(src)) return - if(overlays) overlays.Cut() + cut_overlays() if(density) if(locked && lights && src.arePowerSystemsOn()) icon_state = "door_locked" @@ -581,52 +585,51 @@ About the new airlock wires panel: set_light(0) has_set_boltlight = FALSE if(p_open || welded) - overlays = list() if(p_open) - overlays += image(icon, "panel_open") + add_overlay("panel_open") if (!(stat & NOPOWER)) if(stat & BROKEN) - overlays += image(icon, "sparks_broken") + add_overlay("sparks_broken") else if (health < maxhealth * 3/4) - overlays += image(icon, "sparks_damaged") + add_overlay("sparks_damaged") if(welded) - overlays += image(icon, "welded") + add_overlay("welded") else if (health < maxhealth * 3/4 && !(stat & NOPOWER)) - overlays += image(icon, "sparks_damaged") + add_overlay("sparks_damaged") if (hatch_image) if (hatchstate) hatch_image.icon_state = "[hatchstyle]_open" else hatch_image.icon_state = hatchstyle - overlays += hatch_image + add_overlay(hatch_image) else icon_state = "door_open" if((stat & BROKEN) && !(stat & NOPOWER)) - overlays += image(icon, "sparks_open") + add_overlay("sparks_open") if (has_set_boltlight) set_light(0) has_set_boltlight = FALSE + update_oo() return /obj/machinery/door/airlock/do_animate(animation) switch(animation) if("opening") - if(overlays) overlays.Cut() + cut_overlays() if(p_open) - spawn(2) // The only work around that works. Downside is that the door will be gone for a millisecond. - flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking - update_icon() + flick("o_door_opening", src) + update_icon() else flick("door_opening", src)//[stat ? "_stat":] update_icon() if("closing") - if(overlays) overlays.Cut() + if(overlays) + cut_overlays() if(p_open) - spawn(2) - flick("o_door_closing", src) - update_icon() + flick("o_door_closing", src) + update_icon() else flick("door_closing", src) update_icon() @@ -642,7 +645,6 @@ About the new airlock wires panel: if (src.arePowerSystemsOn()) flick("door_deny", src) playsound(src.loc, 'sound/machines/hydraulic_short.ogg', 50, 0) - return /obj/machinery/door/airlock/attack_ai(mob/user as mob) ui_interact(user) @@ -911,9 +913,9 @@ About the new airlock wires panel: user << "The airlock's bolts prevent it from being forced." else if(density) - spawn(0) open(1) + open(1) else - spawn(0) close(1) + close(1) else if(istype(C, /obj/item/weapon/material/twohanded/fireaxe) && !arePowerSystemsOn()) if(locked) @@ -923,13 +925,13 @@ About the new airlock wires panel: var/obj/item/weapon/material/twohanded/fireaxe/F = C if(F.wielded) - spawn(0) open(1) + open(1) else user << "You need to be wielding \the [C] to do that." else var/obj/item/weapon/material/twohanded/fireaxe/F = C if(F.wielded) - spawn(0) close(1) + close(1) else user << "You need to be wielding \the [C] to do that." @@ -939,9 +941,9 @@ About the new airlock wires panel: else if( !welded && !operating ) if(density) - spawn(0) open(1) + open(1) else - spawn(0) close(1) + close(1) else ..() return @@ -1121,8 +1123,8 @@ About the new airlock wires panel: return 0 return ..(M) -/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null) - ..() +/obj/machinery/door/airlock/Initialize(mapload, obj/structure/door_assembly/assembly = null) + . = ..() //if assembly is given, create the new door from the assembly if (assembly && istype(assembly)) @@ -1150,7 +1152,7 @@ About the new airlock wires panel: set_dir(assembly.dir) //wires - var/turf/T = get_turf(newloc) + var/turf/T = get_turf(src) if(T && (T.z in config.admin_levels)) secured_wires = 1 if (secured_wires) @@ -1158,13 +1160,11 @@ About the new airlock wires panel: else wires = new/datum/wires/airlock(src) -/obj/machinery/door/airlock/initialize() - if(src.closeOtherId != null) + if(mapload && src.closeOtherId != null) for (var/obj/machinery/door/airlock/A in world) if(A.closeOtherId == src.closeOtherId && A != src) src.closeOther = A break - ..() /obj/machinery/door/airlock/Destroy() qdel(wires) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index bb4b29b88a6..5b481729468 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -21,10 +21,10 @@ obj/machinery/door/airlock/receive_signal(datum/signal/signal) if(id_tag != signal.data["tag"] || !signal.data["command"]) return cur_command = signal.data["command"] - spawn() - execute_current_command() + execute_current_command() obj/machinery/door/airlock/proc/execute_current_command() + set waitfor = FALSE if(operating) return //emagged or busy doing something else @@ -123,14 +123,13 @@ obj/machinery/door/airlock/Bumped(atom/AM) return obj/machinery/door/airlock/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) if(new_frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) - -obj/machinery/door/airlock/initialize() - ..() +obj/machinery/door/airlock/Initialize() + . = ..() if(frequency) set_frequency(frequency) @@ -140,16 +139,13 @@ obj/machinery/door/airlock/initialize() update_icon() -obj/machinery/door/airlock/New() - ..() - - if(radio_controller) + if(SSradio) set_frequency(frequency) obj/machinery/door/airlock/Destroy() - if(frequency && radio_controller) - radio_controller.remove_object(src,frequency) - ..() + if(frequency && SSradio) + SSradio.remove_object(src,frequency) + return ..() obj/machinery/airlock_sensor icon = 'icons/obj/airlock_machines.dmi' @@ -209,22 +205,20 @@ obj/machinery/airlock_sensor/process() update_icon() obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) -obj/machinery/airlock_sensor/initialize() +obj/machinery/airlock_sensor/Initialize() + . = ..() set_frequency(frequency) - -obj/machinery/airlock_sensor/New() - ..() - if(radio_controller) + if(SSradio) set_frequency(frequency) obj/machinery/airlock_sensor/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - ..() + if(SSradio) + SSradio.remove_object(src,frequency) + return ..() obj/machinery/airlock_sensor/airlock_interior command = "cycle_interior" @@ -278,25 +272,20 @@ obj/machinery/access_button/attack_hand(mob/user) obj/machinery/access_button/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) +obj/machinery/access_button/Initialize() + . = ..() -obj/machinery/access_button/initialize() - set_frequency(frequency) - - -obj/machinery/access_button/New() - ..() - - if(radio_controller) + if(SSradio) set_frequency(frequency) obj/machinery/access_button/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - ..() + if(SSradio) + SSradio.remove_object(src, frequency) + return ..() obj/machinery/access_button/airlock_interior frequency = 1379 @@ -305,3 +294,11 @@ obj/machinery/access_button/airlock_interior obj/machinery/access_button/airlock_exterior frequency = 1379 command = "cycle_exterior" + +obj/machinery/door/airlock/proc/command(var/new_command) + cur_command = new_command + + //if there's no power, recieve the signal but just don't do anything. This allows airlocks to continue to work normally once power is restored + if(arePowerSystemsOn()) + spawn() + execute_current_command() \ No newline at end of file diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 8b6ddb58344..01741acfe0f 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -9,19 +9,16 @@ var/air_frequency = 1437 autoclose = 0 -/obj/machinery/door/airlock/alarmlock/New() - ..() - air_connection = new - /obj/machinery/door/airlock/alarmlock/Destroy() - if(radio_controller) - radio_controller.remove_object(src,air_frequency) - ..() + if(SSradio) + SSradio.remove_object(src,air_frequency) + return ..() -/obj/machinery/door/airlock/alarmlock/initialize() - ..() - radio_controller.remove_object(src, air_frequency) - air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) +/obj/machinery/door/airlock/alarmlock/Initialize() + . = ..() + air_connection = new + SSradio.remove_object(src, air_frequency) + air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM) open() diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 22c7da36546..5e34e661de8 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -31,8 +31,8 @@ var/_wifi_id var/datum/wifi/receiver/button/door/wifi_receiver -/obj/machinery/door/blast/initialize() - ..() +/obj/machinery/door/blast/Initialize() + . = ..() if(_wifi_id) wifi_receiver = new(_wifi_id, src) @@ -188,3 +188,8 @@ obj/machinery/door/blast/regular/open icon_state_closed = "shutter1" icon_state_closing = "shutterc1" icon_state = "shutter1" + +/obj/machinery/door/blast/shutters/open + icon_state = "shutter0" + density = 0 + opacity = 0 \ No newline at end of file diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 586804665a1..e279b011141 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -37,27 +37,24 @@ var/datum/browser/menu = new( null, "brig_timer", "Brig Timer", 400, 300 ) -/obj/machinery/door_timer/New() - ..() +/obj/machinery/door_timer/Initialize() + . = ..() - spawn(20) - for(var/obj/machinery/door/window/brigdoor/M in machines) - if (M.id == src.id) - targets += M + for(var/obj/machinery/door/window/brigdoor/M in machines) + if (M.id == src.id) + targets += M - for(var/obj/machinery/flasher/F in machines) - if(F.id == src.id) - targets += F + for(var/obj/machinery/flasher/F in machines) + if(F.id == src.id) + targets += F - for(var/obj/structure/closet/secure_closet/brig/C in world) - if(C.id == src.id) - targets += C + for(var/obj/structure/closet/secure_closet/brig/C in world) + if(C.id == src.id) + targets += C - if(targets.len==0) - stat |= BROKEN - update_icon() - return - return + if(targets.len==0) + stat |= BROKEN + update_icon() //Main door timer loop, if it's timing and time is >0 reduce time by 1. @@ -386,9 +383,8 @@ // Adds an icon in case the screen is broken/off, stolen from status_display.dm /obj/machinery/door_timer/proc/set_picture(var/state) picture_state = state - overlays.Cut() - overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) - + cut_overlays() + add_overlay(picture_state) //Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display // Stolen from status_display diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index b4118abd48a..84c37d7f40c 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -31,7 +31,6 @@ var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. var/open_duration = 150//How long it stays open - var/hashatch = 0//If 1, this door has hatches, and certain small creatures can move through them without opening the door var/hatchstate = 0//0: closed, 1: open var/hatchstyle = "1x1" @@ -60,7 +59,7 @@ playsound(src.loc, hitsound_light, 8, 1, -1) user.do_attack_animation(src) -/obj/machinery/door/New() +/obj/machinery/door/Initialize() . = ..() if(density) layer = closed_layer @@ -87,24 +86,22 @@ return /obj/machinery/door/proc/setup_hatch() + hatch_image = image('icons/obj/doors/hatches.dmi', src, hatchstyle, closed_layer+0.1) + hatch_image.color = hatch_colour + hatch_image.pixel_x = hatch_offset_x + hatch_image.pixel_y = hatch_offset_y + hatch_image.dir = dir - if (overlays != null) - hatch_image = image('icons/obj/doors/hatches.dmi', src, hatchstyle, closed_layer+0.1) - hatch_image.color = hatch_colour - hatch_image.pixel_x = hatch_offset_x - hatch_image.pixel_y = hatch_offset_y - - overlays += hatch_image - update_icon() - else - spawn(10) - setup_hatch() + add_overlay(hatch_image) + update_icon() /obj/machinery/door/proc/open_hatch(var/atom/mover = null) if (!hatchstate) hatchstate = 1 update_icon() playsound(src.loc, hatch_open_sound, 40, 1, -1) + + close_hatch_in(29) if (istype(mover, /mob/living)) @@ -120,28 +117,22 @@ /obj/machinery/door/Destroy() density = 0 update_nearby_tiles() - ..() - return + + return ..() /obj/machinery/door/proc/close_door_in(var/time = 5 SECONDS) - spawn(time) - src.close() + addtimer(CALLBACK(src, .proc/close), time, TIMER_UNIQUE | TIMER_OVERRIDE) -/obj/machinery/door/proc/close_hatch_in(var/time = 5 SECONDS) - spawn(time) - close_hatch() - -/obj/machinery/door/proc/auto_close() - if (!QDELETED(src) && can_close(FALSE) && autoclose) - close() +/obj/machinery/door/proc/close_hatch_in(var/time = 3 SECONDS) + addtimer(CALLBACK(src, .proc/close_hatch), time, TIMER_UNIQUE | TIMER_OVERRIDE) /obj/machinery/door/proc/can_open() - if(!density || operating || !ticker) + if(!density || operating || !ROUND_IS_STARTED) return 0 return 1 /obj/machinery/door/proc/can_close() - if(density || operating || !ticker) + if(density || operating || !ROUND_IS_STARTED) return 0 return 1 @@ -228,7 +219,7 @@ switch (Proj.damage_type) if(BRUTE) new /obj/item/stack/material/steel(src.loc, 2) - getFromPool(/obj/item/stack/rods, src.loc, 3) + new /obj/item/stack/rods(src.loc, 3) if(BURN) new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes! qdel(src) @@ -238,7 +229,6 @@ take_damage(min(damage, 100)) - /obj/machinery/door/hitby(AM as mob|obj, var/speed=5) ..() @@ -400,8 +390,7 @@ /obj/machinery/door/emp_act(severity) if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) ) - spawn(0) - open() + open() ..() @@ -496,14 +485,16 @@ /obj/machinery/door/proc/next_close_time() return (normalspeed ? open_duration : 5) +/obj/machinery/door/proc/autoclose() + if (!QDELETED(src) && can_close(FALSE) && autoclose) + close() + /obj/machinery/door/proc/close(var/forced = 0) if(!can_close(forced)) if (autoclose) - for (var/atom/movable/AM in get_turf(src)) - if (AM.density && AM != src) - spawn(60) - src.auto_close() - return + for (var/atom/movable/M in get_turf(src)) + if (M.density && M != src) + addtimer(CALLBACK(src, .proc/autoclose), 60) operating = 1 do_animate("closing") @@ -533,14 +524,11 @@ return ..(M) /obj/machinery/door/update_nearby_tiles(need_rebuild) - if(!air_master) - return 0 - for(var/turf/T in locs) if (istype(T, /turf/simulated)) var/turf/simulated/turf = T update_heat_protection(turf) - air_master.mark_for_update(turf) + SSair.mark_for_update(turf) return 1 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index a7fce5f1d87..ab9dbcd7e23 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -50,12 +50,11 @@ "cold" ) -/obj/machinery/door/firedoor/New() +/obj/machinery/door/firedoor/Initialize() . = ..() for(var/obj/machinery/door/firedoor/F in loc) if(F != src) - spawn(1) - qdel(src) + QDEL_IN(src, 1) return . var/area/A = get_area(src) ASSERT(istype(A)) @@ -69,6 +68,9 @@ A.all_doors.Add(src) areas_added += A + if (!density) + cut_overlay(hatch_image) // Parent call adds this, but we don't want it just yet. + /obj/machinery/door/firedoor/Destroy() for(var/area/A in areas_added) A.all_doors.Remove(src) @@ -183,21 +185,25 @@ // Accountability! users_to_open |= user.name needs_to_close = !issilicon(user) - spawn() - open() + + open() else - spawn() - close() + close() if(needs_to_close) - spawn(50) - alarmed = 0 - for(var/area/A in areas_added) //Just in case a fire alarm is turned off while the firedoor is going through an autoclose cycle - if(A.fire || A.air_doors_activated) - alarmed = 1 - if(alarmed) - nextstate = FIREDOOR_CLOSED - close() + addtimer(CALLBACK(src, .proc/do_close), 50) + +/obj/machinery/door/firedoor/proc/do_close() + var/alarmed = FALSE + for (var/thing in areas_added) + var/area/A = thing + if (A.fire || A.air_doors_activated) + alarmed = TRUE + break + + if (alarmed) + nextstate = FIREDOOR_CLOSED + close() /obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob) add_fingerprint(user) @@ -279,11 +285,9 @@ "You force \the [ blocked ? "welded" : "" ] [src] [density ? "open" : "closed"] with \the [C]!",\ "You hear metal strain and groan, and a door [density ? "opening" : "closing"].") if(density) - spawn(0) - open(1) + open(1, user) else - spawn(0) - close() + open(0, user) return return ..() @@ -298,6 +302,7 @@ lockdown=0 // Pressure alerts pdiff = getOPressureDifferential(src.loc) + pdiff = QUANTIZE(pdiff) // Hello, sanity. if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) lockdown = 1 if(!pdiff_alert) @@ -316,7 +321,7 @@ continue // Bad data. var/celsius = convert_k2c(tileinfo[1]) - var/alerts=0 + var/alerts = 0 // Temperatures if(celsius >= FIREDOOR_MAX_TEMP) @@ -347,12 +352,12 @@ return /obj/machinery/door/firedoor/close() - overlays.Cut() + cut_overlays() latetoggle() return ..() -/obj/machinery/door/firedoor/open(var/forced = 0) - overlays.Cut() +/obj/machinery/door/firedoor/open(forced = 0, user = usr) + cut_overlays() if(hatch_open) hatch_open = 0 visible_message("The maintenance panel of \the [src] closes.") @@ -364,8 +369,7 @@ else use_power(360) else - log_admin("[usr]([usr.ckey]) has forced open an emergency shutter.",key_name(usr)) - message_admins("[usr]([usr.ckey]) has forced open an emergency shutter.") + log_and_message_admins("has forced open an emergency shutter.", user, loc) latetoggle() return ..() @@ -375,49 +379,52 @@ flick("door_opening", src) if("closing") flick("door_closing", src) - return - /obj/machinery/door/firedoor/update_icon() - overlays.Cut() + cut_overlays() set_light(0) var/do_set_light = 0 if(density) icon_state = "door_closed" if(hatch_open) - overlays += "hatch" + add_overlay("hatch") if(blocked) - overlays += "welded" + add_overlay("welded") if(pdiff_alert) - overlays += "palert" + add_overlay("palert") do_set_light = 1 if(dir_alerts) - for(var/d=1;d<=4;d++) + for (var/d = 1; d <= 4; d++) var/cdir = cardinal[d] - for(var/i=1;i<=ALERT_STATES.len;i++) - if(dir_alerts[d] & (1<<(i-1))) - overlays += new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir) - do_set_light = 1 + if (!dir_alerts[d]) + continue + if (dir_alerts[d] & FIREDOOR_ALERT_COLD) + add_overlay("alert_cold_[cdir]") + if (dir_alerts[d] & FIREDOOR_ALERT_HOT) + add_overlay("alert_hot_[cdir]") + + do_set_light = TRUE + if (hashatch) - hatch_image.color = hatch_colour//This line is unnecessary, but is here for configuring colours ingame. Should be removed when finished if (hatchstate) hatch_image.icon_state = "[hatchstyle]_open" else hatch_image.icon_state = hatchstyle - overlays += hatch_image + add_overlay(hatch_image) else icon_state = "door_open" if(blocked) - overlays += "welded_open" + add_overlay("welded_open") if(do_set_light) - set_light(1.5, 0.5, COLOR_SUN) + set_light(2, 0.5, COLOR_SUN) //These are playing merry hell on ZAS. Sorry fellas :( -/obj/machinery/door/firedoor/border_only -/* +/*/obj/machinery/door/firedoor/border_only + + icon = 'icons/obj/doors/edge_Doorfire.dmi' glass = 1 //There is a glass window so you can see through the door //This is needed due to BYOND limitations in controlling visibility @@ -443,15 +450,15 @@ update_nearby_tiles(need_rebuild) - if(!air_master) return 0 + if(!SSair) return 0 var/turf/simulated/source = loc var/turf/simulated/destination = get_step(source,dir) update_heat_protection(loc) - if(istype(source)) air_master.tiles_to_update += source - if(istype(destination)) air_master.tiles_to_update += destination + if(istype(source)) SSair.tiles_to_update += source + if(istype(destination)) SSair.tiles_to_update += destination return 1 */ diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index bd95273759a..21c62bc05fa 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -4,8 +4,8 @@ hatch_offset_x = 16 hatch_colour = "#d2d2d2" -/obj/machinery/door/airlock/multi_tile/New() - ..() +/obj/machinery/door/airlock/multi_tile/Initialize() + . = ..() SetBounds() /obj/machinery/door/airlock/multi_tile/Move() @@ -42,7 +42,7 @@ hatch_image.pixel_y = hatch_offset_x hatch_image.transform = turn(hatch_image.transform, 90) - overlays += hatch_image + add_overlay(hatch_image) else spawn(10)//If overlays aren't initialised, wait a second and try again setup_hatch() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 8999a9756c5..1e9d22e0ebe 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -16,13 +16,12 @@ explosion_resistance = 5 air_properties_vary_with_direction = 1 -/obj/machinery/door/window/New() - ..() +/obj/machinery/door/window/Initialize() + . = ..() update_nearby_tiles() if (src.req_access && src.req_access.len) src.icon_state = "[src.icon_state]" src.base_state = src.icon_state - return /obj/machinery/door/window/proc/shatter(var/display_message = 1) new /obj/item/weapon/material/shard(src.loc) @@ -54,36 +53,31 @@ /obj/machinery/door/window/Destroy() density = 0 update_nearby_tiles() - ..() + return ..() /obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) - if (!( ismob(AM) )) + if (istype(AM, /obj)) var/mob/living/bot/bot = AM if(istype(bot)) if(density && src.check_access(bot.botcard)) open() - sleep(50) - close() + addtimer(CALLBACK(src, .proc/close), 50) else if(istype(AM, /obj/mecha)) var/obj/mecha/mecha = AM if(density) if(mecha.occupant && src.allowed(mecha.occupant)) open() - sleep(50) - close() + addtimer(CALLBACK(src, .proc/close), 50) return - if (!( ticker )) + if (!( ROUND_IS_STARTED )) return if (src.operating) return if (src.density && (!issmall(AM) || ishuman(AM)) && src.allowed(AM)) open() - if(src.check_access(null)) - sleep(50) - else //secure doors close faster - sleep(20) - close() - return + //secure doors close faster + var/time = check_access(null) ? 50 : 20 + addtimer(CALLBACK(src, .proc/close), time) /obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASSGLASS)) @@ -105,7 +99,7 @@ /obj/machinery/door/window/open() if (src.operating == 1) //doors can still open when emag-disabled return 0 - if (!ticker) + if (!ROUND_IS_STARTED) return 0 if(!src.operating) //in case of emag src.operating = 1 @@ -116,7 +110,6 @@ explosion_resistance = 0 src.density = 0 -// src.sd_SetOpacity(0) //TODO: why is this here? Opaque windoors? ~Carn update_nearby_tiles() if(operating == 1) //emag again @@ -133,8 +126,6 @@ src.density = 1 explosion_resistance = initial(explosion_resistance) -// if(src.visible) -// SetOpacity(1) //TODO: why is this here? Opaque windoors? ~Carn update_nearby_tiles() sleep(10) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 6661468f59e..f762a575739 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -11,7 +11,7 @@ var/list/doppler_arrays = list() /obj/machinery/doppler_array/Destroy() doppler_arrays -= src - ..() + return ..() /obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took) if(stat & NOPOWER) return @@ -48,4 +48,4 @@ var/list/doppler_arrays = list() if( !(stat & NOPOWER) ) icon_state = initial(icon_state) else - icon_state = "[initial(icon_state)]-off" \ No newline at end of file + icon_state = "[initial(icon_state)]-off" diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 35f58176b1a..1ba5d8f0f29 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -12,8 +12,8 @@ var/tag_shuttle_mech_sensor var/tag_secure = 0 -/obj/machinery/embedded_controller/radio/airlock/initialize() - ..() +/obj/machinery/embedded_controller/radio/airlock/Initialize() + . = ..() program = new/datum/computer/file/embedded_program/airlock(src) //Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm index feb5dc510d0..3a5c57ad95f 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm @@ -5,8 +5,8 @@ var/datum/computer/file/embedded_program/docking/airlock/docking_program tag_secure = 1 -/obj/machinery/embedded_controller/radio/airlock/docking_port/initialize() - ..() +/obj/machinery/embedded_controller/radio/airlock/docking_port/Initialize() + . = ..() airlock_program = new/datum/computer/file/embedded_program/airlock/docking(src) docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program) program = docking_program diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm index 6535c9932a8..7dec59de8cd 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm @@ -9,8 +9,8 @@ var/datum/computer/file/embedded_program/docking/multi/docking_program -/obj/machinery/embedded_controller/radio/docking_port_multi/initialize() - ..() +/obj/machinery/embedded_controller/radio/docking_port_multi/Initialize() + . = ..() docking_program = new/datum/computer/file/embedded_program/docking/multi(src) program = docking_program @@ -55,8 +55,8 @@ var/datum/computer/file/embedded_program/airlock/multi_docking/airlock_program tag_secure = 1 -/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/initialize() - ..() +/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Initialize() + . = ..() airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src) program = airlock_program diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index a128e6c4e48..48fb7d14a0f 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -10,9 +10,9 @@ var/on = 1 obj/machinery/embedded_controller/radio/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - ..() + if(SSradio) + SSradio.remove_object(src,frequency) + return ..() /obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) return 0 @@ -57,7 +57,8 @@ obj/machinery/embedded_controller/radio/Destroy() var/datum/radio_frequency/radio_connection unacidable = 1 -/obj/machinery/embedded_controller/radio/initialize() +/obj/machinery/embedded_controller/radio/Initialize() + . = ..() set_frequency(frequency) /obj/machinery/embedded_controller/radio/update_icon() @@ -78,6 +79,6 @@ obj/machinery/embedded_controller/radio/Destroy() qdel(signal) /obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter) \ No newline at end of file + radio_connection = SSradio.add_object(src, frequency, radio_filter) diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm index f579aca6f7a..a8be295ccd1 100644 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ b/code/game/machinery/embedded_controller/embedded_program_base.dm @@ -17,7 +17,7 @@ /datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) return -/datum/computer/file/embedded_program/proc/process() +/datum/computer/file/embedded_program/process() return /datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line) diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm index 635be19024e..2dfd734424e 100644 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm @@ -4,8 +4,8 @@ var/tag_door var/datum/computer/file/embedded_program/docking/simple/docking_program -/obj/machinery/embedded_controller/radio/simple_docking_controller/initialize() - ..() +/obj/machinery/embedded_controller/radio/simple_docking_controller/Initialize() + . = ..() docking_program = new/datum/computer/file/embedded_program/docking/simple(src) program = docking_program diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 5ee94574a88..bdbe66c63e5 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -21,7 +21,7 @@ var/seclevel /obj/machinery/firealarm/update_icon() - overlays.Cut() + cut_overlays() if(wiresexposed) switch(buildstage) @@ -60,7 +60,7 @@ previous_state = icon_state set_light(l_range = L_WALLMOUNT_HI_RANGE, l_power = L_WALLMOUNT_HI_POWER, l_color = "#FF6633") - src.overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]") + add_overlay("overlay_[seclevel]") /obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) if(src.detecting) @@ -160,7 +160,6 @@ src.alarm() src.time = 0 src.timing = 0 - processing_objects.Remove(src) src.updateDialog() last_process = world.timeofday @@ -171,8 +170,7 @@ /obj/machinery/firealarm/power_change() ..() - spawn(rand(0,15)) - update_icon() + queue_icon_update() /obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) var/data[0] @@ -228,12 +226,13 @@ //playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0) return -/obj/machinery/firealarm/New(loc, dir, building) - ..() - - if(loc) - src.loc = loc +/obj/machinery/firealarm/proc/set_security_level(var/newlevel) + if(seclevel != newlevel) + seclevel = newlevel + update_icon() +/obj/machinery/firealarm/Initialize(mapload, dir, building) + . = ..() if(dir) src.set_dir(dir) @@ -244,12 +243,6 @@ pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 -/obj/machinery/firealarm/proc/set_security_level(var/newlevel) - if(seclevel != newlevel) - seclevel = newlevel - update_icon() - -/obj/machinery/firealarm/initialize() if(z in config.contact_levels) set_security_level(security_level? get_security_level() : "green") diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index ba8f037d168..de878480ed6 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -27,8 +27,8 @@ base_state = "pflash" density = 1 -/obj/machinery/flasher/initialize() - ..() +/obj/machinery/flasher/Initialize() + . = ..() if(_wifi_id) wifi_receiver = new(_wifi_id, src) @@ -118,11 +118,11 @@ if (!src.anchored) user.show_message(text("[src] can now be moved.")) - src.overlays.Cut() + cut_overlays() else if (src.anchored) user.show_message(text("[src] is now secured.")) - src.overlays += "[base_state]-s" + add_overlay("[base_state]-s") /obj/machinery/button/flasher name = "flasher button" diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index bc2f84159c3..abb2cc6f8be 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -1,4 +1,3 @@ -//these are probably broken /obj/machinery/floodlight name = "Emergency Floodlight" @@ -10,7 +9,7 @@ var/use = 200 // 200W light var/unlocked = 0 var/open = 0 - var/brightness_on = 8 //can't remember what the maxed out value is + var/brightness_on = 12 //can't remember what the maxed out value is light_color = LIGHT_COLOR_TUNGSTEN light_wedge = LIGHT_WIDE @@ -133,3 +132,19 @@ cell = W user << "You insert the power cell." update_icon() + +/obj/item/weapon/floodlight_diy + name = "Emergency Floodlight Kit" + desc = "A do-it-yourself kit for constructing the finest of emergency floodlights." + icon = 'icons/obj/storage.dmi' + icon_state = "inf_box" + item_state = "syringe_kit" + +/obj/item/weapon/floodlight_diy/attack_self(mob/user) + user << "You start piecing together the kit..." + if(do_after(user, 80)) + var/obj/machinery/floodlight/R = new /obj/machinery/floodlight(user.loc) + user.visible_message("[user] assembles \a [R].\ + ", "You assemble \a [R].") + R.add_fingerprint(user) + qdel(src) diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm index 7298b62abf9..f89200195dc 100644 --- a/code/game/machinery/floor_light.dm +++ b/code/game/machinery/floor_light.dm @@ -14,6 +14,7 @@ var/list/floor_light_cache = list() matter = list(DEFAULT_WALL_MATERIAL = 2500, "glass" = 2750) var/on + var/on_state = "on" var/damaged var/default_light_range = 4 var/default_light_power = 2 @@ -108,7 +109,7 @@ var/list/floor_light_cache = list() if(isnull(damaged)) var/cache_key = "floorlight-[default_light_colour]" if(!floor_light_cache[cache_key]) - var/image/I = image("on") + var/image/I = image("[on_state]") I.color = default_light_colour I.layer = layer+0.001 floor_light_cache[cache_key] = I @@ -150,8 +151,20 @@ var/list/floor_light_cache = list() var/area/A = get_area(src) if(A) on = 0 - ..() + return ..() /obj/machinery/floor_light/cultify() default_light_colour = "#FF0000" - update_brightness() \ No newline at end of file + update_brightness() + +/obj/machinery/floor_light/dance + name = "dance floor" + on_state = "light_on-dancefloor_A" + anchored = 1 + on = TRUE + use_power = 2 + +/obj/machinery/floor_light/dance/alternate + name = "dance floor" + on_state = "light_on-dancefloor_B" + anchored = 1 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index d7c037839d8..658cf85c007 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -205,7 +205,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/Destroy() for (var/mob/living/silicon/ai/master in masters) clear_holo(master) - ..() + return ..() /* Holographic project of everything else. diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 69f12726342..7cdb742b77d 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -15,8 +15,8 @@ var/_wifi_id var/datum/wifi/receiver/button/holosign/wifi_receiver -/obj/machinery/holosign/initialize() - ..() +/obj/machinery/holosign/Initialize() + . = ..() if(_wifi_id) wifi_receiver = new(_wifi_id, src) @@ -72,4 +72,4 @@ M.toggle() return - return \ No newline at end of file + return diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 4c4c40ec7c7..75b47f154c8 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -12,12 +12,8 @@ var/_wifi_id var/datum/wifi/receiver/button/igniter/wifi_receiver -/obj/machinery/igniter/New() - ..() - update_icon() - -/obj/machinery/igniter/initialize() - ..() +/obj/machinery/igniter/Initialize() + . = ..() update_icon() if(_wifi_id) wifi_receiver = new(_wifi_id, src) @@ -76,8 +72,8 @@ var/_wifi_id var/datum/wifi/receiver/button/sparker/wifi_receiver -/obj/machinery/sparker/initialize() - ..() +/obj/machinery/sparker/Initialize() + . = ..() if(_wifi_id) wifi_receiver = new(_wifi_id, src) diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 7be4a5ac81b..00a18328ec6 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -41,7 +41,7 @@ datum/track/New(var/title_name, var/audio) /obj/machinery/media/jukebox/Destroy() StopPlaying() - ..() + return ..() /obj/machinery/media/jukebox/power_change() if(!powered(power_channel) || !anchored) @@ -54,7 +54,7 @@ datum/track/New(var/title_name, var/audio) update_icon() /obj/machinery/media/jukebox/update_icon() - overlays.Cut() + cut_overlays() if(stat & (NOPOWER|BROKEN) || !anchored) if(stat & BROKEN) icon_state = "[state_base]-broken" @@ -64,9 +64,9 @@ datum/track/New(var/title_name, var/audio) icon_state = state_base if(playing) if(emagged) - overlays += "[state_base]-emagged" + add_overlay("[state_base]-emagged") else - overlays += "[state_base]-running" + add_overlay("[state_base]-running") /obj/machinery/media/jukebox/Topic(href, href_list) if(..() || !(Adjacent(usr) || istype(usr, /mob/living/silicon))) diff --git a/code/game/machinery/kitchen/cooking_machines/_appliance.dm b/code/game/machinery/kitchen/cooking_machines/_appliance.dm index 65fc78e2112..20dd9caab23 100644 --- a/code/game/machinery/kitchen/cooking_machines/_appliance.dm +++ b/code/game/machinery/kitchen/cooking_machines/_appliance.dm @@ -40,8 +40,8 @@ var/combine_first = 0//If 1, this appliance will do combinaiton cooking before checking recipes -/obj/machinery/appliance/initialize() - ..() +/obj/machinery/appliance/Initialize() + . = ..() if(output_options.len) verbs += /obj/machinery/appliance/proc/choose_output @@ -540,7 +540,7 @@ // Produce nasty smoke. visible_message("\The [src] vomits a gout of rancid smoke!") - var/datum/effect/effect/system/smoke_spread/bad/smoke = getFromPool(/datum/effect/effect/system/smoke_spread/bad) + var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad smoke.attach(src) smoke.set_up(10, 0, get_turf(src), 300) smoke.start() @@ -685,4 +685,4 @@ max_oil = 0 oil = 0 combine_target = null - //Container is not reset \ No newline at end of file + //Container is not reset diff --git a/code/game/machinery/kitchen/cooking_machines/_cooker.dm b/code/game/machinery/kitchen/cooking_machines/_cooker.dm index 18089e06572..345a3cb400b 100644 --- a/code/game/machinery/kitchen/cooking_machines/_cooker.dm +++ b/code/game/machinery/kitchen/cooking_machines/_cooker.dm @@ -12,7 +12,7 @@ cooking_power = 0 /obj/machinery/appliance/cooker/examine(var/mob/user) - .=..() + . = ..() if (.)//no need to duplicate adjacency check if (!stat) if (temperature < min_temp) @@ -40,16 +40,18 @@ . = cooking_power / optimal_power . *= 100 -/obj/machinery/appliance/cooker/New() - ..() +/obj/machinery/appliance/cooker/Initialize() + . = ..() loss = (active_power_usage / resistance)*0.5 cooking_objs = list() for (var/i = 0, i < max_contents, i++) cooking_objs.Add(new /datum/cooking_item/(new container_type(src))) cooking = 0 + queue_icon_update() + /obj/machinery/appliance/cooker/update_icon() - overlays.Cut() + cut_overlays() var/image/light if (use_power == 2 && !stat) light = image(icon, "light_on") @@ -57,15 +59,11 @@ light = image(icon, "light_off") light.pixel_x = light_x light.pixel_y = light_y - overlays += light - - - + add_overlay(light) /obj/machinery/appliance/cooker/process() if (!stat) heat_up() - else var/turf/T = get_turf(src) if (temperature > T.temperature) @@ -73,8 +71,8 @@ ..() /obj/machinery/appliance/cooker/power_change() - .=..() - update_icon() + . = ..() + queue_icon_update() /obj/machinery/appliance/cooker/proc/update_cooking_power() var/temp_scale = 0 @@ -112,22 +110,17 @@ equalize_temperature() return -1 - /obj/machinery/appliance/cooker/proc/equalize_temperature() temperature -= loss//Temperature will fall somewhat slowly update_cooking_power() - //Cookers do differently, they use containers /obj/machinery/appliance/cooker/has_space(var/obj/item/I) - if (istype(I, /obj/item/weapon/reagent_containers/cooking_container)) //Containers can go into an empty slot if (cooking_objs.len < max_contents) return 1 - else - //Any food items directly added need an empty container. A slot without a container cant hold food for (var/datum/cooking_item/CI in cooking_objs) if (CI.container.check_contents() == 0) @@ -135,9 +128,8 @@ return 0 - /obj/machinery/appliance/cooker/add_content(var/obj/item/I, var/mob/user) var/datum/cooking_item/CI = ..() if (CI && CI.combine_target) user << "The [I] will be used to make a [selected_option]. Output selection is returned to default for future items." - selected_option = null \ No newline at end of file + selected_option = null diff --git a/code/game/machinery/kitchen/cooking_machines/_mixer.dm b/code/game/machinery/kitchen/cooking_machines/_mixer.dm index 2c23fe40701..d5fb8b406b2 100644 --- a/code/game/machinery/kitchen/cooking_machines/_mixer.dm +++ b/code/game/machinery/kitchen/cooking_machines/_mixer.dm @@ -20,8 +20,8 @@ fundamental differences ..() user << span("notice", "It is currently set to make a [selected_option]") -/obj/machinery/appliance/mixer/New() - ..() +/obj/machinery/appliance/mixer/Initialize() + . = ..() cooking_objs.Add(new /datum/cooking_item/(new /obj/item/weapon/reagent_containers/cooking_container(src))) cooking = 0 selected_option = pick(output_options) @@ -134,4 +134,4 @@ fundamental differences /obj/machinery/appliance/mixer/process() if (!stat) for (var/i in cooking_objs) - do_cooking_tick(i) \ No newline at end of file + do_cooking_tick(i) diff --git a/code/game/machinery/kitchen/cooking_machines/fryer.dm b/code/game/machinery/kitchen/cooking_machines/fryer.dm index d96ec32d35f..2fd00ef5a86 100644 --- a/code/game/machinery/kitchen/cooking_machines/fryer.dm +++ b/code/game/machinery/kitchen/cooking_machines/fryer.dm @@ -35,8 +35,8 @@ user << "Oil Level: [oil.total_volume]/[optimal_oil]" -/obj/machinery/appliance/cooker/fryer/New() - ..() +/obj/machinery/appliance/cooker/fryer/Initialize() + . = ..() oil = new/datum/reagents(optimal_oil * 1.25, src) var/variance = rand()*0.15 //Fryer is always a little below full, but its usually negligible diff --git a/code/game/machinery/kitchen/cooking_machines/oven.dm b/code/game/machinery/kitchen/cooking_machines/oven.dm index 00a6fd13395..a168a3bd46c 100644 --- a/code/game/machinery/kitchen/cooking_machines/oven.dm +++ b/code/game/machinery/kitchen/cooking_machines/oven.dm @@ -2,9 +2,7 @@ name = "oven" desc = "Cookies are ready, dear." icon = 'icons/obj/cooking_machines.dmi' - icon_state = "oven_off" - on_icon = "oven_on" - off_icon = "oven_off" + icon_state = "ovenopen" cook_type = "baked" appliancetype = OVEN food_color = "#A34719" diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 20c18e6e2f1..61e2f7c9405 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -22,21 +22,20 @@ /obj/machinery/gibber/autogibber var/turf/input_plate -/obj/machinery/gibber/autogibber/New() - ..() - spawn(5) - for(var/i in cardinal) - var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) - if(input_obj) - if(isturf(input_obj.loc)) - input_plate = input_obj.loc - gib_throw_dir = i - qdel(input_obj) - break +/obj/machinery/gibber/autogibber/Initialize() + . = ..() + for(var/i in cardinal) + var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) ) + if(input_obj) + if(isturf(input_obj.loc)) + input_plate = input_obj.loc + gib_throw_dir = i + qdel(input_obj) + break - if(!input_plate) - log_misc("a [src] didn't find an input plate.") - return + if(!input_plate) + log_misc("a [src] didn't find an input plate.") + return /obj/machinery/gibber/autogibber/Bumped(var/atom/A) if(!input_plate) return @@ -50,22 +49,22 @@ M.gib() -/obj/machinery/gibber/New() - ..() - src.overlays += image('icons/obj/kitchen.dmi', "grjam") +/obj/machinery/gibber/Initialize() + . = ..() + add_overlay("grjam") /obj/machinery/gibber/update_icon() - overlays.Cut() + cut_overlays() if (dirty) - src.overlays += image('icons/obj/kitchen.dmi', "grbloody") + add_overlay("grbloody") if(stat & (NOPOWER|BROKEN)) return if (!occupant) - src.overlays += image('icons/obj/kitchen.dmi', "grjam") + add_overlay("grjam") else if (operating) - src.overlays += image('icons/obj/kitchen.dmi', "gruse") + add_overlay("gruse") else - src.overlays += image('icons/obj/kitchen.dmi', "gridle") + add_overlay("gridle") /obj/machinery/gibber/relaymove(mob/user as mob) src.go_out() @@ -226,7 +225,7 @@ src.operating = 0 src.occupant.gib() - qdel(src.occupant) + occupant = null playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) operating = 0 diff --git a/code/game/machinery/kitchen/icecream.dm b/code/game/machinery/kitchen/icecream.dm index 448b252fd49..5da6a2aecb5 100644 --- a/code/game/machinery/kitchen/icecream.dm +++ b/code/game/machinery/kitchen/icecream.dm @@ -51,8 +51,8 @@ else return "vanilla" -/obj/machinery/icecream_vat/initialize() - ..() +/obj/machinery/icecream_vat/Initialize() + . = ..() create_reagents(100) while(product_types.len < 6) product_types.Add(5) @@ -184,7 +184,7 @@ /obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour_name) name = "[flavour_name] icecream" - src.overlays += "icecream_[flavour_name]" + add_overlay("icecream_[flavour_name]") desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream." ice_creamed = 1 @@ -193,4 +193,4 @@ #undef FLAVOUR_STRAWBERRY #undef FLAVOUR_BLUE #undef CONE_WAFFLE -#undef CONE_CHOC \ No newline at end of file +#undef CONE_CHOC diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index c9763016618..050b180babf 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -25,8 +25,8 @@ * Initialising ********************/ -/obj/machinery/microwave/New() - ..() +/obj/machinery/microwave/Initialize() + . = ..() reagents = new/datum/reagents(100) reagents.my_atom = src if (!available_recipes) @@ -433,4 +433,4 @@ if(mover.checkpass(PASSTABLE)) //Animals can run under them, lots of empty space return 1 - return ..() \ No newline at end of file + return ..() diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index b1b2cf27f35..d1464aeec3a 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -26,8 +26,8 @@ /obj/machinery/smartfridge/secure is_secure = 1 -/obj/machinery/smartfridge/New() - ..() +/obj/machinery/smartfridge/Initialize() + . = ..() if(is_secure) wires = new/datum/wires/smartfridge/secure(src) else @@ -180,9 +180,9 @@ if(istype(O, /obj/item/weapon/screwdriver)) panel_open = !panel_open user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].") - overlays.Cut() + cut_overlays() if(panel_open) - overlays += image(icon, icon_panel) + add_overlay(icon_panel) nanomanager.update_uis(src) return diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index ded7ebc9b98..29003ad54e9 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -12,21 +12,18 @@ var/otherarea = null // luminosity = 1 -/obj/machinery/light_switch/New() - ..() - spawn(5) - src.area = get_area(src) +/obj/machinery/light_switch/Initialize() + . = ..() + src.area = get_area(src) - if(otherarea) - src.area = locate(text2path("/area/[otherarea]")) - - if(!name) - name = "light switch ([area.name])" - - src.on = src.area.lightswitch - updateicon() + if(otherarea) + src.area = locate(text2path("/area/[otherarea]")) + if(!name) + name = "light switch ([area.name])" + src.on = src.area.lightswitch + updateicon() /obj/machinery/light_switch/proc/updateicon() if(stat & NOPOWER) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index f7e791a29dc..7eb2ec1e279 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -114,8 +114,8 @@ Class Procs: var/interact_offline = 0 // Can the machine be interacted with while de-powered. var/printing = 0 // Is this machine currently printing anything? -/obj/machinery/New(l, d=0) - ..(l) +/obj/machinery/Initialize(mapload, d=0) + . = ..() if(d) set_dir(d) @@ -140,24 +140,18 @@ Class Procs: return M_NO_PROCESS -/obj/machinery/proc/get_process_type() - . |= M_PROCESSES - if (use_power || idle_power_usage || active_power_usage) - . |= M_USES_POWER - /obj/machinery/emp_act(severity) if(use_power && stat == 0) use_power(7500/severity) - var/obj/effect/overlay/pulse2 = getFromPool(/obj/effect/overlay, src.loc) + var/obj/effect/overlay/pulse2 = new(src.loc) pulse2.icon = 'icons/effects/effects.dmi' pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" pulse2.anchored = 1 pulse2.set_dir(pick(cardinal)) - spawn(10) - qdel(pulse2) + QDEL_IN(pulse2, 10) ..() /obj/machinery/ex_act(severity) diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index ca044a5a481..2487c6fd8fa 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -36,8 +36,8 @@ center = T spawn(10) // must wait for map loading to finish - if(radio_controller) - radio_controller.add_object(src, freq, RADIO_MAGNETS) + if(SSradio) + SSradio.add_object(src, freq, RADIO_MAGNETS) spawn() magnetic_process() @@ -191,9 +191,9 @@ pulling = 0 /obj/machinery/magnetic_module/Destroy() - if(radio_controller) - radio_controller.remove_object(src, freq) - ..() + if(SSradio) + SSradio.remove_object(src, freq) + return ..() /obj/machinery/magnetic_controller name = "Magnetic Control Console" @@ -230,8 +230,8 @@ spawn(45) // must wait for map loading to finish - if(radio_controller) - radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS) + if(SSradio) + radio_connection = SSradio.add_object(src, frequency, RADIO_MAGNETS) if(path) // check for default path @@ -402,6 +402,6 @@ // there doesn't HAVE to be separators but it makes paths syntatically visible /obj/machinery/magnetic_controller/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - ..() + if(SSradio) + SSradio.remove_object(src, frequency) + return ..() diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 7b2775d9547..7af9846da45 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -17,8 +17,8 @@ var/_wifi_id var/datum/wifi/receiver/button/mass_driver/wifi_receiver -/obj/machinery/mass_driver/initialize() - ..() +/obj/machinery/mass_driver/Initialize() + . = ..() if(_wifi_id) wifi_receiver = new(_wifi_id, src) @@ -51,3 +51,119 @@ return drive() ..(severity) + +/obj/machinery/mass_driver/attackby(obj/item/W, mob/user) + + if(istype(W, /obj/item/weapon/wrench)) + if(!anchored) + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + user.visible_message("[user.name] secures [src] to the floor.", \ + "You secure the external reinforcing bolts to the floor.", \ + "You hear a ratchet") + src.anchored = 1 + else + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + user.visible_message("[user.name] unsecures [src] from the floor.", \ + "You unsecure the external reinforcing bolts from the floor.", \ + "You hear a ratchet") + src.anchored = 0 + +/obj/machinery/mass_driver/verb/rotate() + set name = "Rotate" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + usr << "It is fastened to the floor!" + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 + +/obj/item/weapon/mass_driver_diy + name = "Mass Driver Kit" + desc = "A do-it-yourself kit for constructing the finest of mass drivers." + icon = 'icons/obj/storage.dmi' + icon_state = "inf_box" + item_state = "syringe_kit" + +/obj/item/weapon/mass_driver_diy/attack_self(mob/user) + user << "You start piecing together the kit..." + if(do_after(user, 80)) + var/master_id = "[user.name] - [pick("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")][rand(100,999)]" + var/obj/machinery/mass_driver/mining/R = new /obj/machinery/mass_driver/mining(user.loc) + R.id = master_id + R.power = 2.0 + var/obj/item/weapon/mass_driver_button/B = new /obj/item/weapon/mass_driver_button(user.loc) + B.id = master_id + user.visible_message("[user] assembles \a [R].\ + ", "You assemble \a [R].") + R.add_fingerprint(user) + qdel(src) + +/obj/item/weapon/mass_driver_button + name = "mass driver button" + desc = "An unscrewed mass driver button." + icon = 'icons/obj/objects.dmi' + icon_state = "launcherbtt" + var/id + +/obj/item/weapon/mass_driver_button/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams) + if (!adjacent) + return + + //must place on a wall and user must not be inside a closet/mecha/whatever + var/turf/W = A + if (!iswall(W) || !isturf(user.loc)) + user << "You can't place this here!" + return + + var/placement_dir = get_dir(user, W) + if (!(placement_dir in cardinal)) + user << "You must stand directly in front of the wall you wish to place that on." + return + + //just check if there is a poster on or adjacent to the wall + var/stuff_on_wall = 0 + if (locate(/obj/machinery/button) in W) + stuff_on_wall = 1 + + //crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it. + for (var/dir in cardinal) + var/turf/T = get_step(W, dir) + if (locate(/obj/machinery/button) in T) + stuff_on_wall = 1 + break + + if (stuff_on_wall) + user << "There is already a button there!" + return + + user << "You place down the button." + var/obj/machinery/button/mass_driver/B = new /obj/machinery/button/remote/driver(user.loc) + + switch (placement_dir) + if (NORTH) + B.pixel_x = 0 + B.pixel_y = 32 + if (SOUTH) + B.pixel_x = 0 + B.pixel_y = -32 + if (EAST) + B.pixel_x = 32 + B.pixel_y = 0 + if (WEST) + B.pixel_x = -32 + B.pixel_y = 0 + + B.id = id + B.use_power = 0 + B.add_fingerprint(user) + qdel(src) + +/obj/machinery/mass_driver/mining + name = "mining mass driver" + desc = "Shoots things really hard really fast." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "mass_driver" + anchored = 0 + use_power = 0 \ No newline at end of file diff --git a/code/game/machinery/megavend.dm b/code/game/machinery/megavend.dm new file mode 100644 index 00000000000..688d1af7119 --- /dev/null +++ b/code/game/machinery/megavend.dm @@ -0,0 +1,240 @@ + +/obj/machinery/megavendor + name = "\improper NanoTrasen Auto-Locker" + desc = "This amazing machine is used to deploy the official equipment for your current employment." + icon = 'icons/obj/Cryogenic2.dmi' + icon_state = "clothes_scanner_0" + var/base_icon_state = "clothes_scanner_0" + var/occupied_icon_state = "clothes_scanner_1" + layer = 2.9 + anchored = 1 + density = 1 + use_power = 0 + var/isvending = 0 + var/selectedrank + var/last_reply = 0 + var/last_slogan = 0 //When did we last pitch? + var/slogan_delay = 6000 //How long until we can pitch again? + + // Stuff relating vocalizations + var/list/slogan_list = list("Don't deploy just yet! Grab your gear!","Forgetting something?","Don't hop on in your skivvies, mate!","It's not Casual Friday, y'know?","Heaven's above, put some clothes on!") + var/shut_up = 0 //Stop spouting those godawful pitches! + var/allow_occupant_types = list(/mob/living/carbon/human) + var/mob/occupant = null + var/on_enter_occupant_message = "The Auto-Locker's doors clang shut loudly, encasing you in darkness." + +/obj/machinery/megavendor/proc/check_occupant_allowed(mob/M) + var/correct_type = 0 + for(var/type in allow_occupant_types) + if(istype(M, type)) + correct_type = 1 + break + + if(!correct_type) return 0 + + return 1 + +/obj/machinery/megavendor/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) + + if(istype(G, /obj/item/weapon/grab)) + + if(occupant) + user << "\The [src] is in use." + return + + if(!ismob(G:affecting)) + return + + if(!check_occupant_allowed(G:affecting)) + return + + var/mob/M = G:affecting + + visible_message("[user] starts putting [G:affecting:name] into \the [name].", 3) + + if(do_after(user, 20)) + if(!M || !G || !G:affecting) return + + M.forceMove(src) + + if(M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + + icon_state = occupied_icon_state + + M << "[on_enter_occupant_message]" + set_occupant(M) + + src.add_fingerprint(M) + +/obj/machinery/megavendor/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob) + if(!istype(user)) + return + if(!check_occupant_allowed(O)) + return + if(occupant) + user << "\The [src] is in use." + return + var/mob/living/L = O + + if(L == user) + visible_message("[user] starts climbing into \the [name].", 3) + else + visible_message("[user] starts putting [L] into \the [name].", 3) + + if(do_after(user, 20)) + if(!L) return + + L.loc = src + + if(L.client) + L.client.perspective = EYE_PERSPECTIVE + L.client.eye = src + else + user << "You stop [L == user ? "climbing into" : "putting [L] into"] \the [name]." + return + + icon_state = occupied_icon_state + + L << "[on_enter_occupant_message]" + occupant = L + + src.add_fingerprint(L) + + return + +/obj/machinery/megavendor/verb/eject() + set name = "Eject Auto-Locker" + set category = "Object" + set src in oview(1) + if(usr.stat != 0) + return + + if(isvending) + return + + src.go_out() + add_fingerprint(usr) + return + +/obj/machinery/megavendor/verb/move_inside() + set name = "Enter Auto-Locker" + set category = "Object" + set src in oview(1) + + if(usr.stat != 0 || !check_occupant_allowed(usr)) + return + + if(src.occupant) + usr << "\The [src] is in use." + return + + visible_message("[usr] starts climbing into \the [src].", 3) + + if(do_after(usr, 20)) + + if(!usr || !usr.client) + return + + if(src.occupant) + usr << "\The [src] is in use." + return + + usr.stop_pulling() + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + usr.forceMove(src) + set_occupant(usr) + + icon_state = occupied_icon_state + + usr << "[on_enter_occupant_message]" + + src.add_fingerprint(usr) + + return + +/obj/machinery/megavendor/proc/set_occupant(var/occupant) + src.occupant = occupant + name = initial(name) + if(occupant) + name = "[name] ([occupant])" + +/obj/machinery/megavendor/proc/go_out() + + if(!occupant) + return + + ping("The [src] disgorges its contents with a ping.") + icon_state = base_icon_state + + //Eject any items that aren't meant to be in the pod. + var/list/items = src.contents + if(occupant) items -= occupant + + for(var/obj/item/W in items) + W.forceMove(get_turf(src)) + + if(occupant.client) + occupant.client.eye = src.occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + + occupant.forceMove(get_turf(src)) + set_occupant(null) + + name = initial(name) + icon_state = base_icon_state + isvending = 0 + return + +/obj/machinery/megavendor/process() + if(((src.last_slogan + src.slogan_delay) <= world.time) && (src.slogan_list.len > 0) && (!src.shut_up) && prob(5)) + var/slogan = pick(src.slogan_list) + src.ping(slogan) + src.last_slogan = world.time + if(occupant && !isvending) + isvending = 1 + INVOKE_ASYNC(src, .proc/megavend, occupant) + +/obj/machinery/megavendor/proc/megavend(var/mob/living/carbon/human/H) + if(H.megavend) + src.speak("Scan error: Subject has already used a NT Auto-Locker within the past twelve hours!") + src.go_out() + return + src.speak("Analyzing...") + sleep(40) + src.speak("Record match. Name: [H.real_name]. Current occupation: [H.job].") + src.visible_message("The [src] rumbles to life, and begins to whir loudly.") + playsound(src.loc, 'sound/items/poster_being_created.ogg', 50, 1) + + var/obj/item/weapon/storage/box/gearbox = new(src) + gearbox.name = "\improper Personal possessions box" + gearbox.desc = "All of the personal effects of [H.real_name], packaged neatly by the Auto-Locker." + var/list/items = H.contents + for(var/obj/item/W in items) + if(istype(W,/obj/item/organ)) + items -= W + continue + H.drop_from_inventory(W,gearbox) + items -= W + gearbox.contents += W + if(items.len == 0) + break + + sleep(20) + job_master.EquipRank(H, H.job, 1, 1) + sleep(20) + src.speak("Welcome aboard, [H.real_name]. Have a nice shift.") + H.megavend = 1 + src.go_out() + return + +/obj/machinery/megavendor/proc/speak(var/message) + if (!message) + return + + ping("\The [src] beeps, \"[message]\"") + if(occupant) + occupant << "\The [src] beeps, \"[message]\"" + return diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 443a7049341..8183b0e95a3 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -23,8 +23,8 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do req_access = list(access_engine) - New() - ..() + Initialize() + . = ..() set_codes() @@ -33,14 +33,10 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do // add beacon to MULE bot beacon list if(freq == 1400) - if(!navbeacons) - navbeacons = new() - navbeacons += src - - - spawn(5) // must wait for map loading to finish - if(radio_controller) - radio_controller.add_object(src, freq, RADIO_NAVBEACONS) + LAZYADD(navbeacons, src) + + if(SSradio) + SSradio.add_object(src, freq, RADIO_NAVBEACONS) // set the transponder codes assoc list from codes_txt proc/set_codes() @@ -87,14 +83,13 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do var/request = signal.data["findbeacon"] if(request && ((request in codes) || request == "any" || request == location)) - spawn(1) - post_signal() + addtimer(CALLBACK(src, .proc/post_signal), 1) // return a signal giving location and transponder codes proc/post_signal() - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) + var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) if(!frequency) return @@ -252,6 +247,6 @@ Transponder Codes:
    "} /obj/machinery/navbeacon/Destroy() navbeacons.Remove(src) - if(radio_controller) - radio_controller.remove_object(src, freq) - ..() + if(SSradio) + SSradio.remove_object(src, freq) + return ..() diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 88af4fb76ca..c761b2a4e0f 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -95,6 +95,8 @@ alert_readers(FC.announcement) /datum/feed_network/proc/alert_readers(var/annoncement) + // get_receptions sleeps further down the line, spawn of elsewhere + set waitfor = FALSE for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) NEWSCASTER.newsAlert(annoncement) NEWSCASTER.update_icon() @@ -106,15 +108,14 @@ if (P.toff) continue receiving_pdas += P + + var/datum/receptions/receptions = get_receptions(null, receiving_pdas) // datums are not atoms, thus we have to assume the newscast network always has reception - spawn(0) // get_receptions sleeps further down the line, spawn of elsewhere - var/datum/receptions/receptions = get_receptions(null, receiving_pdas) // datums are not atoms, thus we have to assume the newscast network always has reception + for(var/obj/item/device/pda/PDA in receiving_pdas) + if(!(receptions.receiver_reception[PDA] & TELECOMMS_RECEPTION_RECEIVER)) + continue - for(var/obj/item/device/pda/PDA in receiving_pdas) - if(!(receptions.receiver_reception[PDA] & TELECOMMS_RECEPTION_RECEIVER)) - continue - - PDA.new_news(annoncement) + PDA.new_news(annoncement) var/datum/feed_network/news_network = new /datum/feed_network //The global news-network, which is coincidentally a global list. @@ -172,37 +173,36 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co name = "Security Newscaster" securityCaster = 1 -/obj/machinery/newscaster/New() //Constructor, ho~ +/obj/machinery/newscaster/Initialize() //Constructor, ho~ + . = ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that allCasters += src src.paper_remaining = 15 // Will probably change this to something better - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) // Let's give it an appropriate unit number - src.unit_no++ + src.unit_no = allCasters.len + 1 src.update_icon() //for any custom ones on the map... - ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that /obj/machinery/newscaster/Destroy() allCasters -= src - ..() + return ..() /obj/machinery/newscaster/update_icon() if(!ispowered || isbroken) icon_state = "newscaster_off" if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite. - src.overlays.Cut() - src.overlays += image(src.icon, "crack3") + cut_overlays() + add_overlay("crack3") return - src.overlays.Cut() //reset overlays + cut_overlays() //reset overlays if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message icon_state = "newscaster_wanted" return if(alert) //new message alert overlay - src.overlays += "newscaster_alert" + add_overlay("newscaster_alert") if(hitstaken > 0) //Cosmetic damage overlay - src.overlays += image(src.icon, "crack[hitstaken]") + add_overlay("crack[hitstaken]") icon_state = "newscaster_normal" return @@ -215,10 +215,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co src.ispowered = 1 src.update_icon() else - spawn(rand(0, 15)) - src.ispowered = 0 - src.update_icon() + addtimer(CALLBACK(src, .proc/post_power_loss), rand(0, 15)) +/obj/machinery/newscaster/proc/post_power_loss() + ispowered = 0 + update_icon() /obj/machinery/newscaster/ex_act(severity) switch(severity) @@ -313,11 +314,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(6) dat+="ERROR: Could not submit Feed story to Network.

    " if(src.channel_name=="") - dat+="•Invalid receiving channel name.
    " + dat+="�Invalid receiving channel name.
    " if(src.scanned_user=="Unknown") - dat+="•Channel author unverified.
    " + dat+="�Channel author unverified.
    " if(src.msg == "" || src.msg == "\[REDACTED\]") - dat+="•Invalid message body.
    " + dat+="�Invalid message body.
    " dat+="
    Return
    " if(7) @@ -329,18 +330,18 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else existing_authors += FC.author if(src.scanned_user in existing_authors) - dat+="•There already exists a Feed channel under your name.
    " + dat+="�There already exists a Feed channel under your name.
    " if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") - dat+="•Invalid channel name.
    " + dat+="�Invalid channel name.
    " var/check = 0 for(var/datum/feed_channel/FC in news_network.network_channels) if(FC.channel_name == src.channel_name) check = 1 break if(check) - dat+="•Channel name already in use.
    " + dat+="�Channel name already in use.
    " if(src.scanned_user=="Unknown") - dat+="•Channel author unverified.
    " + dat+="�Channel author unverified.
    " dat+="
    Return
    " if(8) var/total_num=length(news_network.network_channels) @@ -454,11 +455,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(16) dat+="ERROR: Wanted Issue rejected by Network.

    " if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") - dat+="•Invalid name for person wanted.
    " + dat+="�Invalid name for person wanted.
    " if(src.scanned_user=="Unknown") - dat+="•Issue author unverified.
    " + dat+="�Issue author unverified.
    " if(src.msg == "" || src.msg == "\[REDACTED\]") - dat+="•Invalid description.
    " + dat+="�Invalid description.
    " dat+="
    Return
    " if(17) dat+="Wanted Issue successfully deleted from Circulation
    " @@ -828,7 +829,7 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob) switch(screen) if(0) //Cover dat+="
    The Griffon
    " - dat+="
    [company_name]-standard newspaper, for use on [company_name]© Space Facilities

    " + dat+="
    [company_name]-standard newspaper, for use on [company_name]� Space Facilities

    " if(isemptylist(src.news_content)) if(src.important_message) dat+="Contents:
      **Important Security Announcement** \[page [src.pages+2]\]
    " @@ -996,12 +997,14 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob) O.show_message("[src.name] beeps, \"[news_call]\"",2) src.alert = 1 src.update_icon() - spawn(300) - src.alert = 0 - src.update_icon() + addtimer(CALLBACK(src, .proc/clearAlert), 300) playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1) else for(var/mob/O in hearers(world.view-1, T)) O.show_message("[src.name] beeps, \"Attention! Wanted issue distributed!\"",2) playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 75, 1) return + +/obj/machinery/newscaster/proc/clearAlert() + src.alert = 0 + src.update_icon() diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index 55a7f5adfa0..b44a820cb67 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -24,8 +24,8 @@ var/bomb_set var/previous_level = "" var/datum/wires/nuclearbomb/wires = null -/obj/machinery/nuclearbomb/New() - ..() +/obj/machinery/nuclearbomb/Initialize() + . = ..() r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn. wires = new/datum/wires/nuclearbomb(src) @@ -49,12 +49,12 @@ var/bomb_set if (src.auth) if (panel_open == 0) panel_open = 1 - overlays |= "panel_open" + add_overlay("panel_open") user << "You unscrew the control panel of [src]." playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) else panel_open = 0 - overlays -= "panel_open" + cut_overlay("panel_open") user << "You screw the control panel of [src] back on." playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) else @@ -62,7 +62,7 @@ var/bomb_set user << "\The [src] emits a buzzing noise, the panel staying locked in." if (panel_open == 1) panel_open = 0 - overlays -= "panel_open" + cut_overlay("panel_open") user << "You screw the control panel of \the [src] back on." playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) flick("lock", src) @@ -345,8 +345,8 @@ var/bomb_set src.safety = 1 update_icon() playsound(src,'sound/machines/Alarm.ogg',100,0,5) - if (ticker && ticker.mode) - ticker.mode.explosion_in_progress = 1 + if (SSticker.mode) + SSticker.mode.explosion_in_progress = 1 sleep(100) var/off_station = 0 @@ -357,29 +357,27 @@ var/bomb_set else off_station = 2 - if(ticker) - if(ticker.mode && ticker.mode.name == "Mercenary") - var/obj/machinery/computer/shuttle_control/multi/syndicate/syndie_location = locate(/obj/machinery/computer/shuttle_control/multi/syndicate) - if(syndie_location) - ticker.mode:syndies_didnt_escape = (syndie_location.z > 1 ? 0 : 1) //muskets will make me change this, but it will do for now - ticker.mode:nuke_off_station = off_station - ticker.station_explosion_cinematic(off_station,null) - if(ticker.mode) - ticker.mode.explosion_in_progress = 0 - if(off_station == 1) - world << "A nuclear device was set off, but the explosion was out of reach of the station!" - else if(off_station == 2) - world << "A nuclear device was set off, but the device was not on the station!" - else - world << "The station was destoyed by the nuclear blast!" + if(SSticker.mode && SSticker.mode.name == "Mercenary") + var/obj/machinery/computer/shuttle_control/multi/syndicate/syndie_location = locate(/obj/machinery/computer/shuttle_control/multi/syndicate) + if(syndie_location) + SSticker.mode:syndies_didnt_escape = (syndie_location.z > 1 ? 0 : 1) //muskets will make me change this, but it will do for now + SSticker.mode:nuke_off_station = off_station + SSticker.station_explosion_cinematic(off_station,null) + if(SSticker.mode) + SSticker.mode.explosion_in_progress = 0 + if(off_station == 1) + world << "A nuclear device was set off, but the explosion was out of reach of the station!" + else if(off_station == 2) + world << "A nuclear device was set off, but the device was not on the station!" + else + world << "The station was destoyed by the nuclear blast!" - ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated. - //kinda shit but I couldn't get permission to do what I wanted to do. + SSticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated. + //kinda shit but I couldn't get permission to do what I wanted to do. - if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is - universe_has_ended = 1 - return - return + if(!SSticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is + universe_has_ended = 1 + return /obj/machinery/nuclearbomb/update_icon() if(lighthack) @@ -402,8 +400,8 @@ var/bomb_set item_state = "card-id" w_class = 1.0 -/obj/item/weapon/disk/nuclear/New() - ..() +/obj/item/weapon/disk/nuclear/Initialize() + . = ..() nuke_disks |= src /obj/item/weapon/disk/nuclear/Destroy() @@ -431,9 +429,12 @@ var/bomb_set var/list/flash_tiles = list() var/last_turf_state -/obj/machinery/nuclearbomb/station/initialize() +/obj/machinery/nuclearbomb/station/Initialize(mapload) ..() verbs -= /obj/machinery/nuclearbomb/verb/toggle_deployable + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/nuclearbomb/station/LateInitialize() for(var/turf/simulated/floor/T in trange(1, src)) T.set_flooring(get_flooring_data(/decl/flooring/reinforced/circuit/red)) flash_tiles += T diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index aed573d3387..8af7f26a6f8 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -75,8 +75,8 @@ lethal = 1 installation = /obj/item/weapon/gun/energy/laser -/obj/machinery/porta_turret/New() - ..() +/obj/machinery/porta_turret/Initialize() + . = ..() req_access.Cut() req_one_access = list(access_security, access_heads) @@ -85,8 +85,8 @@ setup() -/obj/machinery/porta_turret/crescent/New() - ..() +/obj/machinery/porta_turret/crescent/Initialize() + . = ..() req_one_access.Cut() req_access = list(access_cent_specops) @@ -542,7 +542,7 @@ var/list/turret_icons set_raised_raising(raised, 1) update_icon() - var/atom/flick_holder = getFromPool(/atom/movable/porta_turret_cover, loc) + var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) flick_holder.layer = layer + 0.1 flick("popup", flick_holder) sleep(10) @@ -562,7 +562,7 @@ var/list/turret_icons set_raised_raising(raised, 1) update_icon() - var/atom/flick_holder = getFromPool(/atom/movable/porta_turret_cover, loc) + var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) flick_holder.layer = layer + 0.1 flick("popdown", flick_holder) sleep(10) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 14bc2418126..51d45ec8e14 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -21,8 +21,8 @@ var/weld_power_use = 2300 // power used per point of brute damage repaired. 2.3 kW ~ about the same power usage of a handheld arc welder var/wire_power_use = 500 // power used per point of burn damage repaired. -/obj/machinery/recharge_station/New() - ..() +/obj/machinery/recharge_station/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/recharge_station(src) @@ -171,20 +171,20 @@ desc += "
    It is capable of repairing burn damage." /obj/machinery/recharge_station/proc/build_overlays() - overlays.Cut() + cut_overlays() switch(round(chargepercentage())) if(1 to 20) - overlays += image('icons/obj/objects.dmi', "statn_c0") + add_overlay("statn_c0") if(21 to 40) - overlays += image('icons/obj/objects.dmi', "statn_c20") + add_overlay("statn_c20") if(41 to 60) - overlays += image('icons/obj/objects.dmi', "statn_c40") + add_overlay("statn_c40") if(61 to 80) - overlays += image('icons/obj/objects.dmi', "statn_c60") + add_overlay("statn_c60") if(81 to 98) - overlays += image('icons/obj/objects.dmi', "statn_c80") + add_overlay("statn_c80") if(99 to 110) - overlays += image('icons/obj/objects.dmi', "statn_c100") + add_overlay("statn_c100") /obj/machinery/recharge_station/update_icon() ..() @@ -278,4 +278,4 @@ else user << span("danger","Cancelled loading [C] into the charger. You and [C] must stay still!") return - return ..() \ No newline at end of file + return ..() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index e6a3323af38..a65e8faf20f 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -51,7 +51,10 @@ var/list/obj/machinery/requests_console/allConsoles = list() var/message = ""; var/recipient = ""; //the department which will be receiving the message var/priority = -1 ; //Priority of the message being sent - light_range = 0 + + light_color = LIGHT_COLOR_RED + light_power = 0.25 // It's a tiny light, it ain't going to be bright. + //Form intregration var/SQLquery var/paperstock = 10 @@ -71,9 +74,13 @@ var/list/obj/machinery/requests_console/allConsoles = list() else if(icon_state == "req_comp_off") icon_state = "req_comp[newmessagepriority]" + if (newmessagepriority) + set_light(2) + else + set_light(0) -/obj/machinery/requests_console/New() - ..() +/obj/machinery/requests_console/Initialize() + . = ..() announcement.title = "[department] announcement" announcement.newscast = 1 @@ -87,8 +94,6 @@ var/list/obj/machinery/requests_console/allConsoles = list() if (departmentType & RC_INFO) req_console_information |= department - set_light(1) - /obj/machinery/requests_console/Destroy() allConsoles -= src var/lastDeptRC = 1 @@ -103,7 +108,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() req_console_supplies -= department if (departmentType & RC_INFO) req_console_information -= department - ..() + return ..() /obj/machinery/requests_console/attack_hand(user as mob) if(..(user)) @@ -220,7 +225,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() if (Console.department == department) Console.newmessagepriority = 0 Console.icon_state = "req_comp0" - Console.set_light(1) + Console.set_light(0) if(tempScreen == RCS_MAINMENU) reset_message() screen = tempScreen diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index e9a2081fb2d..b94338bf5fe 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -16,10 +16,10 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob var/datum/seed/new_seed_type if(istype(O, /obj/item/weapon/grown)) var/obj/item/weapon/grown/F = O - new_seed_type = plant_controller.seeds[F.plantname] + new_seed_type = SSplants.seeds[F.plantname] else var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O - new_seed_type = plant_controller.seeds[F.plantname] + new_seed_type = SSplants.seeds[F.plantname] if(new_seed_type) user << "You extract some seeds from [O]." @@ -40,4 +40,4 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob user << "You extract some seeds from the grass tile." new /obj/item/seeds/grassseed(loc) - return \ No newline at end of file + return diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index ad88ce7feae..8f1008418a5 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -11,16 +11,16 @@ var/heating_power = 40000 -/obj/machinery/space_heater/New() - ..() +/obj/machinery/space_heater/Initialize() + . = ..() cell = new(src) update_icon() /obj/machinery/space_heater/update_icon() - overlays.Cut() + cut_overlays() icon_state = "sheater[on]" if(panel_open) - overlays += "sheater-open" + add_overlay("sheater-open") /obj/machinery/space_heater/examine(mob/user) ..(user) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index dd862a77543..2ca4c9eabb3 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -17,6 +17,7 @@ density = 0 use_power = 1 idle_power_usage = 10 + var/hears_arrivals = FALSE var/mode = 1 // 0 = Blank // 1 = Shuttle timer // 2 = Arbitrary message(s) @@ -28,7 +29,6 @@ var/message2 = "" // message line 2 var/index1 // display index for scrolling messages or 0 if non-scrolling var/index2 - var/picture = null var/frequency = 1435 // radio frequency @@ -47,15 +47,18 @@ var/const/STATUS_DISPLAY_CUSTOM = 99 /obj/machinery/status_display/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) + if(SSradio) + SSradio.remove_object(src,frequency) return ..() // register for radio system -/obj/machinery/status_display/initialize() - ..() - if(radio_controller) - radio_controller.add_object(src, frequency) +/obj/machinery/status_display/Initialize() + . = ..() + if(SSradio) + if (hears_arrivals) + SSradio.add_object(src, frequency, RADIO_ARRIVALS) + else + SSradio.add_object(src, frequency) // timed process /obj/machinery/status_display/process() @@ -153,10 +156,8 @@ /obj/machinery/status_display/proc/set_picture(state) remove_display() - if(!picture || picture_state != state) - picture_state = state - picture = image('icons/obj/status_display.dmi', icon_state=picture_state) - overlays |= picture + picture_state = state + add_overlay(picture_state) /obj/machinery/status_display/proc/update_display(line1, line2) var/new_text = {"
    [line1]
    [line2]
    "} @@ -176,7 +177,7 @@ return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" /obj/machinery/status_display/proc/get_supply_shuttle_timer() - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle if (!shuttle) return "Error" @@ -187,9 +188,33 @@ return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" return "" +/obj/machinery/status_display/proc/get_arrivals_shuttle_timer() + var/datum/shuttle/ferry/arrival/shuttle = SSarrivals.shuttle + if (!shuttle) + return "Error" + + if(shuttle.has_arrive_time()) + var/timeleft = round((shuttle.arrive_time - world.time) / 10,1) + if(timeleft < 0) + return "" + return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" + return "" + +/obj/machinery/status_display/proc/get_arrivals_shuttle_timer2() + if (!SSarrivals) + return "Error" + + if(SSarrivals.launch_time) + var/timeleft = round((SSarrivals.launch_time - world.time) / 10,1) + if(timeleft < 0) + return "" + return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" + else + return "Launch" + return "" + /obj/machinery/status_display/proc/remove_display() - if(overlays.len) - overlays.Cut() + cut_overlays() if(maptext) maptext = "" @@ -217,4 +242,4 @@ #undef FOND_SIZE #undef FONT_COLOR #undef FONT_STYLE -#undef SCROLL_SPEED \ No newline at end of file +#undef SCROLL_SPEED diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm index b8730e326ad..d3a1ba88a11 100644 --- a/code/game/machinery/status_display_ai.dm +++ b/code/game/machinery/status_display_ai.dm @@ -78,7 +78,7 @@ var/list/ai_status_emotions = list( /obj/machinery/ai_status_display/proc/update() switch (mode) if (0) // Blank - overlays.Cut() + cut_overlays() if (1) // AI emoticon var/datum/ai_emotion/ai_emotion = ai_status_emotions[emotion] @@ -89,14 +89,12 @@ var/list/ai_status_emotions = list( /obj/machinery/ai_status_display/proc/set_picture(var/state) picture_state = state - if(overlays.len) - overlays.Cut() - overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) + cut_overlays() + add_overlay(picture_state) /obj/machinery/ai_status_display/power_change() ..() if(stat & NOPOWER) - if(overlays.len) - overlays.Cut() + cut_overlays() else update() diff --git a/code/game/machinery/status_display_snowflakes.dm b/code/game/machinery/status_display_snowflakes.dm new file mode 100644 index 00000000000..3f1cf07eec8 --- /dev/null +++ b/code/game/machinery/status_display_snowflakes.dm @@ -0,0 +1,70 @@ +/obj/machinery/status_display/supply_display + ignore_friendc = 1 + +/obj/machinery/status_display/supply_display/update() + if(!..() && mode == STATUS_DISPLAY_CUSTOM) + message1 = "CARGO" + message2 = "" + + var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle + if (!shuttle) + message2 = "Error" + else if(shuttle.has_arrive_time()) + message2 = get_supply_shuttle_timer() + if(lentext(message2) > CHARS_PER_LINE) + message2 = "Error" + else if (shuttle.is_launching()) + if (shuttle.at_station()) + message2 = "Launch" + else + message2 = "ETA" + else + if(shuttle.at_station()) + message2 = "Docked" + else + message1 = "" + update_display(message1, message2) + return 1 + return 0 + +/obj/machinery/status_display/supply_display/receive_signal(datum/signal/signal) + if(signal.data["command"] == "supply") + mode = STATUS_DISPLAY_CUSTOM + else + ..(signal) + +/obj/machinery/status_display/arrivals_display + ignore_friendc = 1 + hears_arrivals = TRUE + +/obj/machinery/status_display/arrivals_display/update() + if(!..() && mode == STATUS_DISPLAY_CUSTOM) + message1 = "ARVLS" + message2 = "" + + var/datum/shuttle/ferry/arrival/shuttle = SSarrivals.shuttle + if (!shuttle) + message2 = "Error" + else if(shuttle.has_arrive_time()) + message2 = get_arrivals_shuttle_timer() + if(lentext(message2) > CHARS_PER_LINE) + message2 = "Error" + else if (shuttle.is_launching()) + if (shuttle.at_station()) + message2 = "Retrn" + else + message2 = "ETA" + else + if(shuttle.at_station()) + message2 = "Docked" + else + message2 = get_arrivals_shuttle_timer2() + update_display(message1, message2) + return 1 + return 0 + +/obj/machinery/status_display/arrivals_display/receive_signal(datum/signal/signal) + if(signal.data["command"] == "arrivals") + mode = STATUS_DISPLAY_CUSTOM + else + ..(signal) diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm deleted file mode 100644 index 97e747c0dba..00000000000 --- a/code/game/machinery/supply_display.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/machinery/status_display/supply_display - ignore_friendc = 1 - -/obj/machinery/status_display/supply_display/update() - if(!..() && mode == STATUS_DISPLAY_CUSTOM) - message1 = "CARGO" - message2 = "" - - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (!shuttle) - message2 = "Error" - else if(shuttle.has_arrive_time()) - message2 = get_supply_shuttle_timer() - if(lentext(message2) > CHARS_PER_LINE) - message2 = "Error" - else if (shuttle.is_launching()) - if (shuttle.at_station()) - message2 = "Launch" - else - message2 = "ETA" - else - if(shuttle.at_station()) - message2 = "Docked" - else - message1 = "" - update_display(message1, message2) - return 1 - return 0 - -/obj/machinery/status_display/supply_display/receive_signal/(datum/signal/signal) - if(signal.data["command"] == "supply") - mode = STATUS_DISPLAY_CUSTOM - else - ..(signal) diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index 041507153ae..8764ffcbd03 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -97,7 +97,7 @@ /obj/machinery/power/supply_beacon/Destroy() if(use_power) deactivate() - ..() + return ..() /obj/machinery/power/supply_beacon/process() if(expended) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index be5b402ee1d..cb11b1d4770 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -152,7 +152,7 @@ /obj/machinery/power/singularity_beacon/Destroy() if(active) Deactivate() - ..() + return ..() //stealth direct power usage /obj/machinery/power/singularity_beacon/process() diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 1d1f3e56d1a..1b46e51e587 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -101,7 +101,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore. if(message_delay) message_delay = 0 - ..() + return ..() /* @@ -255,7 +255,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else if(data == 3) for(var/antag_freq in ANTAG_FREQS) - var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(antag_freq) + var/datum/radio_frequency/antag_connection = SSradio.return_frequency(antag_freq) for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) if(R.receive_range(antag_freq, level) > -1) radios += R @@ -360,30 +360,30 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept //var/blackbox_admin_msg = "[part_a][M.name] (Real name: [M.real_name])[part_blackbox_b][quotedmsg][part_c]" //BR.messages_admin += blackbox_admin_msg - if(istype(blackbox)) + if(istype(SSfeedback)) switch(display_freq) if(PUB_FREQ) - blackbox.msg_common += blackbox_msg + SSfeedback.msg_common += blackbox_msg if(SCI_FREQ) - blackbox.msg_science += blackbox_msg + SSfeedback.msg_science += blackbox_msg if(COMM_FREQ) - blackbox.msg_command += blackbox_msg + SSfeedback.msg_command += blackbox_msg if(MED_FREQ) - blackbox.msg_medical += blackbox_msg + SSfeedback.msg_medical += blackbox_msg if(ENG_FREQ) - blackbox.msg_engineering += blackbox_msg + SSfeedback.msg_engineering += blackbox_msg if(SEC_FREQ) - blackbox.msg_security += blackbox_msg + SSfeedback.msg_security += blackbox_msg if(DTH_FREQ) - blackbox.msg_deathsquad += blackbox_msg + SSfeedback.msg_deathsquad += blackbox_msg if(SYND_FREQ) - blackbox.msg_syndicate += blackbox_msg + SSfeedback.msg_syndicate += blackbox_msg if(SUP_FREQ) - blackbox.msg_cargo += blackbox_msg + SSfeedback.msg_cargo += blackbox_msg if(SRV_FREQ) - blackbox.msg_service += blackbox_msg + SSfeedback.msg_service += blackbox_msg else - blackbox.messages += blackbox_msg + SSfeedback.messages += blackbox_msg //End of research and feedback code. @@ -432,7 +432,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/mob/living/carbon/human/H = new M = H - var/datum/radio_frequency/connection = radio_controller.return_frequency(frequency) + var/datum/radio_frequency/connection = SSradio.return_frequency(frequency) var/display_freq = connection.frequency @@ -464,7 +464,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else if(data == 3) for(var/freq in ANTAG_FREQS) - var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(freq) + var/datum/radio_frequency/antag_connection = SSradio.return_frequency(freq) for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) var/turf/position = get_turf(R) if(position && position.z == level) @@ -535,7 +535,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept part_b_extra = " (Intercepted)" // Create a radio headset for the sole purpose of using its icon - var/obj/item/device/radio/headset/radio = new + var/static/obj/item/device/radio/headset/radio = new var/part_b = " \icon[radio]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE var/part_blackbox_b = " \[[freq_text]\] " // Tweaked for security headsets -- TLE @@ -547,27 +547,27 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if(istype(blackbox)) switch(display_freq) if(PUB_FREQ) - blackbox.msg_common += blackbox_msg + SSfeedback.msg_common += blackbox_msg if(SCI_FREQ) - blackbox.msg_science += blackbox_msg + SSfeedback.msg_science += blackbox_msg if(COMM_FREQ) - blackbox.msg_command += blackbox_msg + SSfeedback.msg_command += blackbox_msg if(MED_FREQ) - blackbox.msg_medical += blackbox_msg + SSfeedback.msg_medical += blackbox_msg if(ENG_FREQ) - blackbox.msg_engineering += blackbox_msg + SSfeedback.msg_engineering += blackbox_msg if(SEC_FREQ) - blackbox.msg_security += blackbox_msg + SSfeedback.msg_security += blackbox_msg if(DTH_FREQ) - blackbox.msg_deathsquad += blackbox_msg + SSfeedback.msg_deathsquad += blackbox_msg if(SYND_FREQ) - blackbox.msg_syndicate += blackbox_msg + SSfeedback.msg_syndicate += blackbox_msg if(SUP_FREQ) - blackbox.msg_cargo += blackbox_msg + SSfeedback.msg_cargo += blackbox_msg if(SRV_FREQ) - blackbox.msg_service += blackbox_msg + SSfeedback.msg_service += blackbox_msg else - blackbox.messages += blackbox_msg + SSfeedback.messages += blackbox_msg //End of research and feedback code. @@ -639,3 +639,31 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept return signal +/proc/telecomms_process_active() + + // First, we want to generate a new radio signal + var/datum/signal/signal = new + signal.transmission_method = 2 // 2 would be a subspace transmission. + + // --- Finally, tag the actual signal with the appropriate values --- + signal.data = list( + "slow" = 0, // how much to sleep() before broadcasting - simulates net lag + "message" = "TEST", + "compression" = rand(45, 50), // If the signal is compressed, compress our message too. + "traffic" = 0, // dictates the total traffic sum that the signal went through + "type" = 4, // determines what type of radio input it is: test broadcast + "reject" = 0, + "done" = 0, + "level" = 5 // The level it is being broadcasted at. + ) + signal.frequency = PUB_FREQ// Common channel + + //#### Sending the signal to all subspace receivers ####// + for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + R.receive_signal(signal) + + //world<< "Done: [signal.data["done"]]" + + return signal + + diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 7bd00aba222..7a9597d3f6a 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -7,9 +7,6 @@ */ -#define STATION_Z 1 -#define TELECOMM_Z 3 - /obj/machinery/telecomms var/temp = "" // output message var/construct_op = 0 @@ -102,7 +99,7 @@ var/obj/machinery/constructable_frame/machine_frame/F = new F.loc = src.loc qdel(src) - + update_icon() /obj/machinery/telecomms/attack_ai(var/mob/user as mob) @@ -176,26 +173,6 @@ user << browse(dat, "window=tcommachine;size=520x500;can_resize=0") onclose(user, "dormitory") - -// Off-Site Relays -// -// You are able to send/receive signals from the station's z level (changeable in the STATION_Z #define) if -// the relay is on the telecomm satellite (changable in the TELECOMM_Z #define) - - -/obj/machinery/telecomms/relay/proc/toggle_level() - - var/turf/position = get_turf(src) - - // Toggle on/off getting signals from the station or the current Z level - if(src.listening_level == STATION_Z) // equals the station - src.listening_level = position.z - return 1 - else if(position.z == TELECOMM_Z) - src.listening_level = STATION_Z - return 1 - return 0 - // Returns a multitool from a user depending on their mobtype. /obj/machinery/telecomms/proc/get_multitool(mob/user as mob) @@ -241,8 +218,6 @@ /obj/machinery/telecomms/relay/Options_Menu() var/dat = "" - if(src.z == TELECOMM_Z) - dat += "
    Signal Locked to Station: [listening_level == STATION_Z ? "TRUE" : "FALSE"]" dat += "
    Broadcasting: [broadcasting ? "YES" : "NO"]" dat += "
    Receiving: [receiving ? "YES" : "NO"]" return dat @@ -255,15 +230,6 @@ if(href_list["broadcast"]) broadcasting = !broadcasting temp = "-% Broadcasting mode changed. %-" - if(href_list["change_listening"]) - //Lock to the station OR lock to the current position! - //You need at least two receivers and two broadcasters for this to work, this includes the machine. - var/result = toggle_level() - if(result) - temp = "-% [src]'s signal has been successfully changed." - else - temp = "-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required." - // BUS /obj/machinery/telecomms/bus/Options_Menu() @@ -403,6 +369,3 @@ if(issilicon(user) || in_range(user, src)) return 1 return 0 - -#undef TELECOMM_Z -#undef STATION_Z diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index dae80c94073..5e17900e9ff 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -7,7 +7,6 @@ /obj/machinery/telecomms/relay/preset/station id = "Station Relay" - listening_level = 1 autolinkers = list("s_relay") /obj/machinery/telecomms/relay/preset/telecomms diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 77a8e2a2bb8..79e975dd737 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -36,7 +36,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) var/circuitboard = null // string pointing to a circuitboard type var/hide = 0 // Is it a hidden machine? - var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. + var/list/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. /obj/machinery/telecomms/proc/relay_information(datum/signal/signal, filter, copysig, amount = 20) @@ -64,7 +64,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() continue if(amount && send_count >= amount) break - if(machine.loc.z != listening_level) + if(!machine.loc.z in listening_level) if(long_range_link == 0 && machine.long_range_link == 0) continue // If we're sending a copy, be sure to create the copy for EACH machine and paste the data @@ -113,18 +113,13 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() else return 0 - /obj/machinery/telecomms/New() telecomms_list += src ..() - //Set the listening_level if there's none. - if(!listening_level) - //Defaults to our Z level! - var/turf/position = get_turf(src) - listening_level = position.z +/obj/machinery/telecomms/Initialize() + . = ..() -/obj/machinery/telecomms/initialize() if(autolinkers.len) // Links nearby machines if(!long_range_link) @@ -133,13 +128,21 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() else for(var/obj/machinery/telecomms/T in telecomms_list) add_link(T) + if(!listening_level) + listening_level = list(z) + var/turf/above = GetAbove(src) + var/turf/below = GetBelow(src) + if(above) + listening_level += above.z + if(below) + listening_level += below.z /obj/machinery/telecomms/Destroy() telecomms_list -= src for(var/obj/machinery/telecomms/comm in telecomms_list) comm.links -= src links = list() - ..() + return ..() // Used in auto linking /obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T) @@ -502,8 +505,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() var/language = "human" var/obj/item/device/radio/headset/server_radio = null -/obj/machinery/telecomms/server/New() - ..() +/obj/machinery/telecomms/server/Initialize() + . = ..() Compiler = new() Compiler.Holder = src server_radio = new() diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index e83fba6d060..40624bb33fc 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -16,8 +16,8 @@ underlays += image('icons/obj/stationobjs.dmi', icon_state = "telecomp-wires") return -/obj/machinery/computer/teleporter/initialize() - ..() +/obj/machinery/computer/teleporter/Initialize() + . = ..() var/obj/machinery/teleport/station/station = locate(/obj/machinery/teleport/station, get_step(src, dir)) var/obj/machinery/teleport/hub/hub if(station) @@ -210,10 +210,13 @@ else spark_system.queue() accurate = 1 - spawn(3000) accurate = 0 //Accurate teleporting for 5 minutes + addtimer(CALLBACK(src, .proc/reset_teleport), 5 MINUTES) for(var/mob/B in hearers(src, null)) B.show_message("Test fire completed.") return + +/obj/machinery/teleport/hub/proc/reset_teleport() + accurate = 0 /* /proc/do_teleport(atom/movable/M as mob|obj, atom/destination, precision) if(istype(M, /obj/effect)) diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 967b7799ed0..66c2dfffaa5 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -42,9 +42,10 @@ var/area/A = control_area if(A && istype(A)) A.turret_controls -= src - ..() + return ..() -/obj/machinery/turretid/initialize() +/obj/machinery/turretid/Initialize() + . = ..() if(!control_area) control_area = get_area(src) else if(istext(control_area)) @@ -61,7 +62,6 @@ control_area = null power_change() //Checks power and initial settings - return /obj/machinery/turretid/proc/isLocked(mob/user) if(ailock && issilicon(user)) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index af383867256..e18bdeae2e1 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -95,27 +95,23 @@ var/obj/item/weapon/coin/coin var/datum/wires/vending/wires = null -/obj/machinery/vending/New() - ..() +/obj/machinery/vending/Initialize() + . = ..() wires = new(src) - spawn(4) - if(src.product_slogans) - src.slogan_list += text2list(src.product_slogans, ";") + if(src.product_slogans) + src.slogan_list += text2list(src.product_slogans, ";") - // So not all machines speak at the exact same time. - // The first time this machine says something will be at slogantime + this random value, - // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated. - src.last_slogan = world.time + rand(0, slogan_delay) + // So not all machines speak at the exact same time. + // The first time this machine says something will be at slogantime + this random value, + // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated. + src.last_slogan = world.time + rand(0, slogan_delay) - if(src.product_ads) - src.ads_list += text2list(src.product_ads, ";") + if(src.product_ads) + src.ads_list += text2list(src.product_ads, ";") - src.build_inventory() - power_change() + src.build_inventory() + power_change() - return - - return /** * Build src.produdct_records from the products lists @@ -213,9 +209,9 @@ else if(istype(W, /obj/item/weapon/screwdriver)) src.panel_open = !src.panel_open user << "You [src.panel_open ? "open" : "close"] the maintenance panel." - src.overlays.Cut() + cut_overlays() if(src.panel_open) - src.overlays += image(src.icon, "[initial(icon_state)]-panel") + add_overlay("[initial(icon_state)]-panel") nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI return diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index ffbd913b3d5..6e5ffa9e734 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -78,7 +78,7 @@ /obj/mecha/combat/marauder/Destroy() qdel(smoke_system) - ..() + return ..() /obj/mecha/combat/marauder/relaymove(mob/user,direction) if(user != src.occupant) //While not "realistic", this piece is player friendly. @@ -213,4 +213,4 @@ src.smoke() if (href_list["toggle_zoom"]) src.zoom() - return \ No newline at end of file + return diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index b55419d8619..6aa75796718 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -23,10 +23,6 @@ return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/New() - ..() - return - /obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page() if(chassis) send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index aa11007a536..4c4cee7b915 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -221,7 +221,7 @@ for(var/a = 1 to 5) spawn(0) - var/obj/effect/effect/water/W = getFromPool(/obj/effect/effect/water, get_turf(chassis)) + var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(chassis)) var/turf/my_target if(a == 1) my_target = T @@ -606,7 +606,7 @@ Destroy() qdel(pr_repair_droid) pr_repair_droid = null - ..() + return ..() attach(obj/mecha/M as obj) ..() @@ -699,7 +699,7 @@ Destroy() qdel(pr_energy_relay) pr_energy_relay = null - ..() + return ..() detach() pr_energy_relay.stop() @@ -787,7 +787,7 @@ Destroy() qdel(pr_mech_generator) pr_mech_generator = null - ..() + return ..() proc/init() fuel = new /obj/item/stack/material/phoron(src) diff --git a/code/game/mecha/equipment/tracking_beacon.dm b/code/game/mecha/equipment/tracking_beacon.dm index d45b7d7aab5..dc97eb88d1b 100644 --- a/code/game/mecha/equipment/tracking_beacon.dm +++ b/code/game/mecha/equipment/tracking_beacon.dm @@ -8,7 +8,8 @@ origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2) var/control = 0// -/obj/item/mecha_parts/mecha_tracking/initialize() +/obj/item/mecha_parts/mecha_tracking/Initialize() + . = ..() if (in_mecha()) exo_beacons.Add(src)//For the sake of exosuits which spawn with a preinstalled tracking beacon diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index cf50e695259..cf6539c0f19 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -10,8 +10,8 @@ var/charge = 45 var/repair = 0 -/obj/machinery/mech_recharger/New() - ..() +/obj/machinery/mech_recharger/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/mech_recharger(src) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index a4f6b701695..b46e7cad8b3 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -25,9 +25,8 @@ var/manufacturer = null var/sync_message = "" -/obj/machinery/mecha_part_fabricator/New() - ..() - +/obj/machinery/mecha_part_fabricator/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/mechfab(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) @@ -38,9 +37,6 @@ RefreshParts() files = new /datum/research(src) //Setup the research data holder. - return - -/obj/machinery/mecha_part_fabricator/initialize() manufacturer = basic_robolimb.company update_categories() @@ -57,13 +53,13 @@ update_icon() /obj/machinery/mecha_part_fabricator/update_icon() - overlays.Cut() + cut_overlays() if(panel_open) icon_state = "fab-o" else icon_state = "fab-idle" if(busy) - overlays += "fab-active" + add_overlay("fab-active") /obj/machinery/mecha_part_fabricator/dismantle() for(var/f in materials) @@ -192,9 +188,10 @@ if(materials[material] + amnt <= res_max_amount) if(stack && stack.amount >= 1) var/count = 0 - overlays += "fab-load-metal" - spawn(10) - overlays -= "fab-load-metal" + + add_overlay("fab-load-[material]") + CUT_OVERLAY_IN("fab-load-[material]", 6) + while(materials[material] + amnt <= res_max_amount && stack.amount >= 1) materials[material] += amnt stack.use(1) @@ -301,7 +298,8 @@ for(var/M in D.materials) materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) if(D.build_path) - var/obj/new_item = D.Fabricate(loc, src) + var/loc_offset = get_step(src, dir) + var/obj/new_item = D.Fabricate(loc_offset, src) visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.") if(mat_efficiency != 1) if(new_item.matter && new_item.matter.len > 0) diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm index a00e9d6594a..dbe94c88a23 100644 --- a/code/game/mecha/mech_sensor.dm +++ b/code/game/mecha/mech_sensor.dm @@ -69,15 +69,16 @@ else icon_state = "airlock_sensor_off" -/obj/machinery/mech_sensor/initialize() +/obj/machinery/mech_sensor/Initialize() + . = ..() set_frequency(frequency) /obj/machinery/mech_sensor/proc/set_frequency(new_frequency) if(radio_connection) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency) + radio_connection = SSradio.add_object(src, frequency) /obj/machinery/mech_sensor/receive_signal(datum/signal/signal) if(stat & NOPOWER) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ccf41e8f6c7..3f000453744 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -90,6 +90,8 @@ var/noexplode = 0//Used for cases where an exosuit is spawned and turned into wreckage + can_hold_mob = TRUE + /obj/mecha/drain_power(var/drain_check) if(drain_check) @@ -158,19 +160,15 @@ cell = null internal_tank = null - qdel(pr_int_temp_processor) - qdel(pr_inertial_movement) - qdel(pr_give_air) - qdel(pr_internal_damage) - qdel(pr_manage_warnings) - qdel(spark_system) - pr_int_temp_processor = null - pr_give_air = null - pr_internal_damage = null - spark_system = null + QDEL_NULL(pr_int_temp_processor) + QDEL_NULL(pr_inertial_movement) + QDEL_NULL(pr_give_air) + QDEL_NULL(pr_internal_damage) + QDEL_NULL(pr_manage_warnings) + QDEL_NULL(spark_system) mechas_list -= src //global mech list - ..() + return ..() //////////////////////// ////// Helpers ///////// @@ -1115,7 +1113,7 @@ A.ex_act(3) sleep(1) - if (A && !(A.gcDestroyed) && A.type == oldtype)//We check if the object has been qdel'd or (for turfs) changed type + if (!QDELETED(A) && A.type == oldtype)//We check if the object has been qdel'd or (for turfs) changed type src.visible_message("[src.name] crashes into the [aname]!") take_damage(damage) return 0//If it survived the impact then we stop breaking things for this proc diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index 027c9f84afc..2c8217bb75a 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -1,5 +1,5 @@ -/obj/mecha/medical/initialize() - ..() +/obj/mecha/medical/Initialize() + . = ..() var/turf/T = get_turf(src) if(isPlayerLevel(T.z)) new /obj/item/mecha_parts/mecha_tracking(src) @@ -21,4 +21,4 @@ var/result = step_rand(src) if(result) playsound(src,'sound/mecha/mechstep.ogg',25,1) - return result \ No newline at end of file + return result diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 0eddf05370b..40cd2bcd24d 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -19,7 +19,7 @@ T.Entered(A) step_rand(A) cargo.Cut() - ..() + return ..() /obj/mecha/working/ripley/firefighter desc = "Standart APLU chassis was refitted with additional thermal protection and cistern." diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index 8ba99ad1c56..ad1faf8b102 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -3,8 +3,8 @@ var/list/cargo = new var/cargo_capacity = 5 -/obj/mecha/working/initialize() - ..() +/obj/mecha/working/Initialize() + . = ..() var/turf/T = get_turf(src) if(isPlayerLevel(T.z)) new /obj/item/mecha_parts/mecha_tracking(src) @@ -23,8 +23,8 @@ if(T) T.Entered(A) step_rand(A) - ..() - return + + return ..() /obj/mecha/working/Topic(href, href_list) ..() diff --git a/code/game/modifiers/modifiers.dm b/code/game/modifiers/modifiers.dm index 516dd3c191c..d957ba2d44e 100644 --- a/code/game/modifiers/modifiers.dm +++ b/code/game/modifiers/modifiers.dm @@ -161,7 +161,7 @@ it should be avoided in favour of manual removal where possible //This is the main proc you should call to create a modifier on a target object /datum/proc/add_modifier(var/typepath, var/_modifier_type, var/_source = null, var/_source_data = 0, var/_strength = 0, var/_duration = 0, var/_check_interval = 0, var/override = 0) var/datum/modifier/D = new typepath(src, _modifier_type, _source, _source_data, _strength, _duration, _check_interval) - if (D && !D.gcDestroyed) + if (!QDELETED(D)) return D.handle_registration(override) else return null//The modifier must have failed creation and deleted itself @@ -249,15 +249,15 @@ it should be avoided in favour of manual removal where possible if (D.type == type) existing = D if (!existing) - processing_modifiers += src - target.modifiers += src + START_PROCESSING(SSmodifiers, src) + LAZYADD(target.modifiers, src) activate() return src else return handle_override(override, existing) /datum/modifier/proc/activate() - if (!gcDestroyed && !active && target) + if (!QDELING(src) && !active && target) active = 1 return 1 return 0 @@ -266,7 +266,7 @@ it should be avoided in favour of manual removal where possible active = 0 return 1 -/datum/modifier/proc/process() +/datum/modifier/process() if (!active) last_tick = world.time @@ -281,7 +281,7 @@ it should be avoided in favour of manual removal where possible /datum/modifier/proc/check_validity() next_check = world.time + check_interval - if (!target || target.gcDestroyed) + if (QDELETED(target)) return validity_fail("Target is gone!") if (modifier_type == MODIFIER_CUSTOM) @@ -296,7 +296,7 @@ it should be avoided in favour of manual removal where possible else if (modifier_type == MODIFIER_TIMED) return 1 - if (!source || source.gcDestroyed)//If we're not timed or custom, then we need a source. If our source is gone, we are invalid + if (QDELETED(source))//If we're not timed or custom, then we need a source. If our source is gone, we are invalid return validity_fail("Source is gone and we need one") switch (modifier_type) @@ -371,8 +371,8 @@ it should be avoided in favour of manual removal where possible //Instant var removes us from the lists immediately, instead of waiting til next frame when qdel goes through if (instant) if (target) - target.modifiers -= src - processing_modifiers -= src + LAZYREMOVE(target.modifiers, src) + STOP_PROCESSING(SSmodifiers, src) if (suspend) deactivate() @@ -389,9 +389,9 @@ it should be avoided in favour of manual removal where possible if (active) deactivate() if (target) - target.modifiers -= src - processing_modifiers -= src - ..() + LAZYREMOVE(target.modifiers, src) + STOP_PROCESSING(SSmodifiers, src) + return ..() //Handles overriding an existing modifier of the same type. @@ -402,14 +402,14 @@ it should be avoided in favour of manual removal where possible qdel(src) return existing if (MODIFIER_OVERRIDE_NEIGHBOR) - processing_modifiers += src - target.modifiers += src + START_PROCESSING(SSmodifiers, src) + LAZYADD(target.modifiers, src) activate() return src if (MODIFIER_OVERRIDE_REPLACE) existing.stop() - processing_modifiers += src - target.modifiers += src + START_PROCESSING(SSmodifiers, src) + LAZYADD(target.modifiers, src) activate() return src if (MODIFIER_OVERRIDE_REFRESH) @@ -451,3 +451,6 @@ it should be avoided in favour of manual removal where possible /datum/modifier/proc/custom_override(var/datum/modifier/existing) qdel(src) return existing + +/atom + var/tmp/list/modifiers diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 0814ece434e..fd1be1a26d7 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -17,9 +17,6 @@ user_buckle_mob(M, user) //Cleanup -/obj/Del() - unbuckle_mob() - return ..() /obj/Destroy() unbuckle_mob() @@ -52,7 +49,7 @@ return /obj/proc/user_buckle_mob(mob/living/M, mob/user) - if(!ticker) + if(!ROUND_IS_STARTED) user << "You can't buckle anyone in before the game starts." if(!user.Adjacent(M) || user.restrained() || user.lying || user.stat || istype(user, /mob/living/silicon/pai)) return diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 24754c22701..6c9a3b651f2 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -49,4 +49,4 @@ visible_message("\The [src.target] is struggling to withstand the acid!") if(0 to 1) visible_message("\The [src.target] begins to crumble under the acid!") - spawn(rand(150, 200)) tick() \ No newline at end of file + addtimer(CALLBACK(src, .proc/tick), rand(150, 200)) diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm index e1f3bb7c38f..1c19a392c3d 100644 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ b/code/game/objects/effects/chem/chemsmoke.dm @@ -71,8 +71,8 @@ var/datum/seed/seed /datum/effect/effect/system/smoke_spread/chem/spores/New(seed_name) - if(seed_name && plant_controller) - seed = plant_controller.seeds[seed_name] + if(seed_name && SSplants) + seed = SSplants.seeds[seed_name] if(!seed) qdel(src) ..() @@ -231,7 +231,7 @@ if(passed_smoke) smoke = passed_smoke else - smoke = getFromPool(/obj/effect/effect/smoke/chem, location, smoke_duration + rand(smoke_duration*-0.25, smoke_duration*0.25), T, I) + smoke = new /obj/effect/effect/smoke/chem(location, smoke_duration + rand(smoke_duration*-0.25, smoke_duration*0.25), T, I) if(chemholder.reagents.reagent_list.len) chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents @@ -242,7 +242,7 @@ /datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/smoke_duration, var/icon/I, var/dist = 1) - var/obj/effect/effect/smoke/chem/spores = getFromPool(/obj/effect/effect/smoke/chem, location) + var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location) spores.name = "cloud of [seed.seed_name] [seed.seed_noun]" ..(T, I, smoke_duration, dist, spores) diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index b7d2acc5411..30b3b3c1410 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -20,20 +20,22 @@ icon_state = "[ismetal? "m" : ""]foam" metal = ismetal playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3) - spawn(3 + metal * 3) - process() - checkReagents() - spawn(120) - processing_objects.Remove(src) - sleep(30) - if(metal) - var/obj/structure/foamedmetal/M = new(src.loc) - M.metal = metal - M.updateicon() - flick("[icon_state]-disolve", src) - sleep(5) - qdel(src) - return + addtimer(CALLBACK(src, .proc/tick), 3 + metal * 3) + addtimer(CALLBACK(src, .proc/post), 120) + +/obj/effect/effect/foam/proc/tick() + process() + checkReagents() + +/obj/effect/effect/foam/proc/post() + processing_objects.Remove(src) + sleep(30) + if(metal) + var/obj/structure/foamedmetal/M = new /obj/structure/foamedmetal(src.loc) + M.metal = metal + M.updateicon() + flick("[icon_state]-disolve", src) + QDEL_IN(src, 5) /obj/effect/effect/foam/proc/checkReagents() // transfer any reagents to the floor if(!metal && reagents) @@ -70,8 +72,7 @@ if(!metal && prob(max(0, exposed_temperature - 475))) flick("[icon_state]-disolve", src) - spawn(5) - qdel(src) + QDEL_IN(src, 5) /obj/effect/effect/foam/Crossed(var/atom/movable/AM) if(metal) @@ -102,23 +103,23 @@ carried_reagents += R.id /datum/effect/effect/system/foam_spread/start() - spawn(0) - var/obj/effect/effect/foam/F = locate() in location - if(F) - F.amount += amount - return + set waitfor = FALSE + var/obj/effect/effect/foam/F = locate() in location + if(F) + F.amount += amount + return - F = getFromPool(/obj/effect/effect/foam, location, metal) - F.amount = amount + F = new /obj/effect/effect/foam(location, metal) + F.amount = amount - if(!metal) // don't carry other chemicals if a metal foam - F.create_reagents(10) + if(!metal) // don't carry other chemicals if a metal foam + F.create_reagents(10) - if(carried_reagents) - for(var/id in carried_reagents) - F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway - else - F.reagents.add_reagent("water", 1, safety = 1) + if(carried_reagents) + for(var/id in carried_reagents) + F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway + else + F.reagents.add_reagent("water", 1, safety = 1) // wall formed by metal foams, dense and opaque, but easy to break @@ -139,7 +140,8 @@ /obj/structure/foamedmetal/Destroy() density = 0 update_nearby_tiles(1) - ..() + set_opacity(0) + return ..() /obj/structure/foamedmetal/proc/updateicon() if(metal == 1) diff --git a/code/game/objects/effects/chem/water.dm b/code/game/objects/effects/chem/water.dm index 1b4d7450019..8ae164f3005 100644 --- a/code/game/objects/effects/chem/water.dm +++ b/code/game/objects/effects/chem/water.dm @@ -7,9 +7,7 @@ /obj/effect/effect/water/New(loc) ..() - spawn(150) // In case whatever made it forgets to delete it - if(src) - qdel(src) + QDEL_IN(src, 15 SECONDS) // In case whatever made it forgets to delete it /obj/effect/effect/water/proc/set_color() // Call it after you move reagents to it icon += reagents.get_color() diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm index 2bf3a2a574d..f5eaf24563a 100644 --- a/code/game/objects/effects/decals/Cleanable/fuel.dm +++ b/code/game/objects/effects/decals/Cleanable/fuel.dm @@ -6,22 +6,22 @@ anchored = 1 var/amount = 1 - New(turf/newLoc,amt=1,nologs=0) - if(!nologs) - message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (JMP)") - log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])") + Initialize(mapload, amt = 1, nologs = 0) + . = ..() + if(!nologs && !mapload) + message_admins("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP)") + log_game("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z])") src.amount = amt var/has_spread = 0 //Be absorbed by any other liquid fuel in the tile. - for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc) + for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc) if(other != src) other.amount += src.amount other.Spread() has_spread = 1 break - . = ..() if(!has_spread) Spread() else @@ -50,7 +50,7 @@ flamethrower_fuel icon_state = "mustard" anchored = 0 - New(newLoc, amt = 1, d = 0) + Initialize(mapload, amt = 1, d = 0) set_dir(d) //Setting this direction means you won't get torched by your own flamethrower. . = ..() diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 72059bc02b5..5c8f379480f 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -21,6 +21,7 @@ var/global/list/image/splatter_cache=list() var/list/datum/disease2/disease/virus2 = list() var/amount = 5 var/drytime + var/dries = TRUE /obj/effect/decal/cleanable/blood/reveal_blood() if(!fluorescent) @@ -33,17 +34,15 @@ var/global/list/image/splatter_cache=list() if(invisibility != 100) invisibility = 100 amount = 0 - processing_objects -= src ..(ignore=1) /obj/effect/decal/cleanable/blood/Destroy() for(var/datum/disease/D in viruses) D.cure(0) - processing_objects -= src return ..() -/obj/effect/decal/cleanable/blood/New() - ..() +/obj/effect/decal/cleanable/blood/Initialize() + . = ..() update_icon() if(istype(src, /obj/effect/decal/cleanable/blood/gibs)) return @@ -54,12 +53,9 @@ var/global/list/image/splatter_cache=list() if (B.blood_DNA) blood_DNA |= B.blood_DNA.Copy() qdel(B) - drytime = world.time + DRYING_TIME * (amount+1) - processing_objects += src - -/obj/effect/decal/cleanable/blood/process() - if(world.time > drytime) - dry() + drytime = DRYING_TIME * (amount+1) + if (dries) + addtimer(CALLBACK(src, /obj/effect/decal/cleanable/blood/.proc/dry), drytime) /obj/effect/decal/cleanable/blood/update_icon() if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]" @@ -71,8 +67,7 @@ var/global/list/image/splatter_cache=list() if(amount < 1) return - if (!blood_DNA || !islist(blood_DNA)) - blood_DNA = list() + LAZYINITLIST(blood_DNA) var/obj/item/organ/external/l_foot = perp.get_organ("l_foot") var/obj/item/organ/external/r_foot = perp.get_organ("r_foot") @@ -89,19 +84,18 @@ var/global/list/image/splatter_cache=list() if(!S.blood_DNA) S.blood_DNA = list() S.blood_overlay.color = basecolor - S.overlays += S.blood_overlay + S.add_overlay(S.blood_overlay) if(S.blood_overlay && S.blood_overlay.color != basecolor) + S.cut_overlay(S.blood_overlay, TRUE) S.blood_overlay.color = basecolor - S.overlays.Cut() - S.overlays += S.blood_overlay + S.add_overlay(S.blood_overlay, TRUE) if(blood_DNA) S.blood_DNA |= blood_DNA.Copy() else if (hasfeet)//Or feet perp.feet_blood_color = basecolor perp.track_blood = max(amount,perp.track_blood) - if(!perp.feet_blood_DNA) - perp.feet_blood_DNA = list() + LAZYINITLIST(perp.feet_blood_DNA) if (blood_DNA) perp.feet_blood_DNA |= blood_DNA.Copy() else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) @@ -116,7 +110,6 @@ var/global/list/image/splatter_cache=list() desc = drydesc color = adjust_brightness(color, -50) amount = 0 - processing_objects -= src /obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) ..() @@ -127,10 +120,11 @@ var/global/list/image/splatter_cache=list() var/taken = rand(1,amount) amount -= taken user << "You get some of \the [src] on your hands." - if (!user.blood_DNA) - user.blood_DNA = list() + LAZYINITLIST(user.blood_DNA) + if (blood_DNA) user.blood_DNA |= blood_DNA.Copy() + user.bloody_hands += taken user.hand_blood_color = basecolor user.update_inv_gloves(1) @@ -150,8 +144,8 @@ var/global/list/image/splatter_cache=list() amount = 0 var/list/drips = list() -/obj/effect/decal/cleanable/blood/drip/New() - ..() +/obj/effect/decal/cleanable/blood/drip/Initialize() + . = ..() drips |= icon_state /obj/effect/decal/cleanable/blood/writing @@ -162,8 +156,8 @@ var/global/list/image/splatter_cache=list() amount = 0 var/message -/obj/effect/decal/cleanable/blood/writing/New() - ..() +/obj/effect/decal/cleanable/blood/writing/Initialize() + . = ..() if(random_icon_states.len) for(var/obj/effect/decal/cleanable/blood/writing/W in loc) random_icon_states.Remove(W.icon_state) @@ -219,22 +213,21 @@ var/global/list/image/splatter_cache=list() /obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/blood/b = getFromPool(/obj/effect/decal/cleanable/blood/splatter, src.loc) - b.basecolor = src.basecolor - b.update_icon() - for(var/datum/disease/D in src.viruses) - var/datum/disease/ND = D.Copy(1) - b.viruses += ND - ND.holder = b - - if (step_to(src, get_step(src, direction), 0)) - break + set waitfor = FALSE + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) + b.basecolor = src.basecolor + b.update_icon() + for(var/datum/disease/D in src.viruses) + var/datum/disease/ND = D.Copy(1) + b.viruses += ND + ND.holder = b + if (step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/mucus name = "mucus" @@ -248,8 +241,11 @@ var/global/list/image/splatter_cache=list() random_icon_states = list("mucus") var/list/datum/disease2/disease/virus2 = list() - var/dry=0 // Keeps the lag down + var/dry = 0 // Keeps the lag down -/obj/effect/decal/cleanable/mucus/New() - spawn(DRYING_TIME * 2) - dry=1 +/obj/effect/decal/cleanable/mucus/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/dry), DRYING_TIME * 2) + +/obj/effect/decal/cleanable/mucus/proc/dry() + dry = TRUE diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index c70a5ab9fc6..28ba4c60c17 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -23,13 +23,6 @@ F.dirt += 4 qdel(src) -/obj/effect/decal/cleanable/greenglow - - New() - ..() - spawn(1200)// 2 minutes - qdel(src) - /obj/effect/decal/cleanable/dirt name = "dirt" desc = "Someone should clean that up." @@ -58,10 +51,17 @@ density = 0 anchored = 1 layer = 2 - light_range = 1 + light_range = 2 + light_power = 0.5 + light_color = LIGHT_COLOR_GREEN + uv_intensity = 0 icon = 'icons/effects/effects.dmi' icon_state = "greenglow" +/obj/effect/decal/cleanable/greenglow/New() + ..() + QDEL_IN(src, 2 MINUTES) + /obj/effect/decal/cleanable/cobweb name = "cobweb" desc = "Somebody should remove that." @@ -105,7 +105,7 @@ Destroy() for(var/datum/disease/D in viruses) D.cure(0) - ..() + return ..() /obj/effect/decal/cleanable/tomato_smudge name = "tomato smudge" diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index bc780a5ee27..51974aeac57 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -5,6 +5,7 @@ icon_state = "gib1" basecolor="#030303" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") + dries = FALSE // So we can avoid setting the timer if it's not going to do anything. /obj/effect/decal/cleanable/blood/gibs/robot/update_icon() color = "#FFFFFF" @@ -13,18 +14,18 @@ return /obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - if (prob(40)) - var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) - streak.update_icon() - else if (prob(10)) - spark(src, 3, alldirs) - if (step_to(src, get_step(src, direction), 0)) - break + set waitfor = FALSE + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + if (prob(40)) + var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) + streak.update_icon() + else if (prob(10)) + spark(src, 3, alldirs) + if (step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/blood/gibs/robot/limb random_icon_states = list("gibarm", "gibleg") @@ -39,6 +40,7 @@ name = "motor oil" desc = "It's black and greasy. Looks like Beepsky made another mess." basecolor="#030303" + dries = FALSE /obj/effect/decal/cleanable/blood/oil/dry() return diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index b8ecb7f60b9..39d35f519cf 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -85,14 +85,21 @@ var/poster_type //So mappers can specify a desired poster var/ruined = 0 -/obj/structure/sign/poster/New(var/newloc, var/placement_dir=null, var/serial=null) - ..(newloc) +/obj/structure/sign/poster/Initialize(mapload, placement_dir = null, serial = null) + . = ..() if(!serial) serial = rand(1, poster_designs.len) //use a random serial if none is given - + serial_number = serial - var/datum/poster/design = poster_designs[serial_number] + + var/datum/poster/design + if (poster_type) + var/path = text2path(poster_type) + design = new path + else + design = poster_designs[serial_number] + set_poster(design) switch (placement_dir) @@ -109,11 +116,6 @@ pixel_x = -32 pixel_y = 0 -/obj/structure/sign/poster/initialize() - if (poster_type) - var/path = text2path(poster_type) - var/datum/poster/design = new path - set_poster(design) /obj/structure/sign/poster/proc/set_poster(var/datum/poster/design) name = "[initial(name)] - [design.name]" diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 964a1301b89..a55fcdc485e 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -11,4 +11,4 @@ /obj/effect/decal/spraystill density = 0 anchored = 1 - layer = 50 \ No newline at end of file + layer = 50 diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm index e22acfad74e..f7f12dc60ca 100644 --- a/code/game/objects/effects/decals/warning_stripes.dm +++ b/code/game/objects/effects/decals/warning_stripes.dm @@ -2,10 +2,10 @@ icon = 'icons/effects/warning_stripes.dmi' layer = 2 -/obj/effect/decal/warning_stripes/New() +/obj/effect/decal/warning_stripes/Initialize() . = ..() - var/turf/T=get_turf(src) - var/image/I=image(icon, icon_state = icon_state, dir = dir) - I.color=color - T.overlays += I + var/turf/T = get_turf(src) + var/image/I = image(icon, icon_state = icon_state, dir = dir) + I.color = color + T.add_overlay(I, TRUE) // Register it as priority so we don't lose it on icon update. qdel(src) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index e5cea9767bd..de7a05fca0d 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -75,7 +75,7 @@ steam.start() -- spawns the effect spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/steam/steam = getFromPool(/obj/effect/effect/steam, src.location) + var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location) var/direction if(src.cardinals) direction = pick(cardinal) @@ -84,8 +84,7 @@ steam.start() -- spawns the effect for(i=0, i 0) + QDEL_IN(src, lifespan) /obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) if(istype(M, /obj/effect)) //sparks don't teleport @@ -50,4 +46,3 @@ do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0) else do_teleport(M, target, 1) ///You will appear adjacent to the beacon - diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index fb4716043f1..a9d9251a7d4 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -151,14 +151,14 @@ name = "TTV bomb - proximity" assembly_type = /obj/item/device/assembly/prox_sensor -/obj/effect/spawner/newbomb/radio/custom/New(var/newloc, ph, ox, co) +/obj/effect/spawner/newbomb/radio/custom/Initialize(mapload, ph, ox, co) if(ph != null) phoron_amt = ph if(ox != null) oxygen_amt = ox if(co != null) carbon_amt = co - ..() + . = ..() -/obj/effect/spawner/newbomb/New(newloc) - ..(newloc) +/obj/effect/spawner/newbomb/Initialize() + . = ..() var/obj/item/device/transfer_valve/V = new(src.loc) var/obj/item/weapon/tank/phoron/PT = new(V) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 3984c272384..4e4a5753497 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -6,9 +6,9 @@ ) gibamounts = list(2,2,1) -/obj/effect/gibspawner/generic/New() +/obj/effect/gibspawner/generic/Initialize() gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list()) - ..() + . = ..() /obj/effect/gibspawner/human gibtypes = list( @@ -21,10 +21,10 @@ /obj/effect/decal/cleanable/blood/gibs/core) gibamounts = list(1,1,1,1,1,1,1) -/obj/effect/gibspawner/human/New() +/obj/effect/gibspawner/human/Initialize() gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) gibamounts[6] = pick(0,1,2) - ..() + . = ..() /obj/effect/gibspawner/robot sparks = 1 @@ -38,10 +38,10 @@ ) gibamounts = list(1,1,1,1,1,1) -/obj/effect/gibspawner/robot/New() +/obj/effect/gibspawner/robot/Initialize() gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs) gibamounts[6] = pick(0,1,2) - ..() + . = ..() /obj/effect/gibspawner/xeno gibtypes = list( @@ -55,7 +55,7 @@ ) gibamounts = list(1,1,1,1,1,1,1) -/obj/effect/gibspawner/xeno/New() +/obj/effect/gibspawner/xeno/Initialize() gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) gibamounts[6] = pick(0,1,2) - ..() \ No newline at end of file + . = ..() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 02d66ed114d..408a441c47c 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -78,19 +78,19 @@ New() pixel_x = rand(3,-3) pixel_y = rand(3,-3) - processing_objects |= src + START_PROCESSING(SSprocessing, src) /obj/effect/spider/eggcluster/New(var/location, var/atom/parent) get_light_and_color(parent) ..() /obj/effect/spider/eggcluster/Destroy() - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) if(istype(loc, /obj/item/organ/external)) var/obj/item/organ/external/O = loc O.implants -= src - ..() + return ..() /obj/effect/spider/eggcluster/process() amount_grown += rand(0,2) @@ -101,7 +101,7 @@ O = loc for(var/i=0, i[src] dies!
    ") - getFromPool(/obj/effect/decal/cleanable/spiderling_remains, src.loc) + visible_message("\The [src] dies!") + new /obj/effect/decal/cleanable/spiderling_remains(src.loc) qdel(src) /obj/effect/spider/spiderling/healthcheck() @@ -248,11 +248,11 @@ icon_state = "cocoon1" health = 60 - New() - icon_state = pick("cocoon1","cocoon2","cocoon3") +/obj/effect/spider/cocoon/New() + icon_state = pick("cocoon1","cocoon2","cocoon3") /obj/effect/spider/cocoon/Destroy() src.visible_message("\The [src] splits open.") for(var/atom/movable/A in contents) - A.loc = src.loc + A.forceMove(src.loc) return ..() diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index ad666f88637..a21a915c17b 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -15,13 +15,12 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0) log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ") if(heavy_range > 1) - var/obj/effect/overlay/pulse = getFromPool(/obj/effect/overlay, epicenter) + var/obj/effect/overlay/pulse = new /obj/effect/overlay(epicenter) pulse.icon = 'icons/effects/effects.dmi' pulse.icon_state = "emppulse" pulse.name = "emp pulse" pulse.anchored = 1 - spawn(20) - qdel(pulse) + QDEL_IN(pulse, 20) if(heavy_range > light_range) light_range = heavy_range @@ -49,4 +48,4 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0) if((world.timeofday - time) >= EMPDEBUG) log_and_message_admins("EMPDEBUG: [T.name] - [T.type] - took [world.timeofday - time]ds to process emp_act()!") #endif - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 8ed69bcd79a..2f5cf8ff901 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,6 +1,6 @@ // explosion logic is in code/controllers/Processes/explosives.dm now -proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, is_rec = config.use_recursive_explosions) +/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, is_rec = config.use_recursive_explosions) src = null //so we don't abort once src is deleted var/datum/explosiondata/data = new data.epicenter = epicenter @@ -14,7 +14,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa data.rec_pow = max(0,devastation_range) * 2 + max(0,heavy_impact_range) + max(0,light_impact_range) // queue work - bomb_processor.queue(data) + SSexplosives.queue(data) // == Recursive Explosions stuff == @@ -25,7 +25,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa d.is_rec = 1 d.epicenter = T d.rec_pow = power - bomb_processor.queue(d) + SSexplosives.queue(d) /obj var/explosion_resistance @@ -55,4 +55,4 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa explosion_resistance = 10 /turf/simulated/wall - explosion_resistance = 10 \ No newline at end of file + explosion_resistance = 10 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cda131d121f..281cb33676a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -195,14 +195,20 @@ var/failure = 0 for(var/obj/item/I in src.loc) + CHECK_TICK + if(I.type in rejections) // To limit bag spamming: any given type only complains once continue + if(!S.can_be_inserted(I)) // Note can_be_inserted still makes noise when the answer is no rejections += I.type // therefore full bags are still a little spammy failure = 1 continue + success = 1 S.handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed. + CHECK_TICK // Because people insist on picking up huge-ass piles of stuff. + if(success && !failure) user << "You put everything in [S]." else if(success) @@ -541,7 +547,7 @@ var/list/global/slot_flags_enumeration = list( /obj/item/clean_blood() . = ..() if(blood_overlay) - overlays.Remove(blood_overlay) + cut_overlay(blood_overlay, TRUE) if(istype(src, /obj/item/clothing/gloves)) var/obj/item/clothing/gloves/G = src G.transfer_blood = 0 @@ -567,7 +573,7 @@ var/list/global/slot_flags_enumeration = list( //apply the blood-splatter overlay if it isn't already in there if(!blood_DNA.len) blood_overlay.color = blood_color - overlays += blood_overlay + add_overlay(blood_overlay, TRUE) // Priority overlay so we don't lose it somehow. //if this blood isn't already in the list, add it if(istype(M)) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 17c7d762480..148a6ce24f5 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -89,9 +89,7 @@ move an amendment to the drawing.

    /area/asteroid, /area/tdome, /area/syndicate_station, - /area/wizard_station, - /area/prison - // /area/derelict //commented out, all hail derelict-rebuilders! + /area/wizard_station ) for (var/type in SPECIALS) if ( istype(A,type) ) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index b991187a7da..2964f914092 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -53,7 +53,7 @@ if (t) src.name = "body bag - " src.name += t - src.overlays += image(src.icon, "bodybag_label") + add_overlay("bodybag_label") else src.name = "body bag" //..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri @@ -61,7 +61,7 @@ else if(istype(W, /obj/item/weapon/wirecutters)) user << "You cut the tag off the bodybag" src.name = "body bag" - src.overlays.Cut() + cut_overlays() return /obj/structure/closet/body_bag/store_mobs(var/stored_units) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 6673d678dbc..fe5fd554bde 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -312,10 +312,10 @@ var/global/list/obj/item/device/pda/PDAs = list() * The Actual PDA */ -/obj/item/device/pda/New() - ..() +/obj/item/device/pda/Initialize() + . = ..() PDAs += src - PDAs = sortAtom(PDAs) + sortTim(PDAs, /proc/cmp_text_asc) if(default_cartridge) cartridge = new default_cartridge(src) new /obj/item/weapon/pen(src) @@ -908,9 +908,9 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/update_icon() ..() - overlays.Cut() + cut_overlays() if(new_message || new_news) - overlays += image('icons/obj/pda.dmi', "pda-r") + add_overlay("pda-r") /obj/item/device/pda/proc/detonate_act(var/obj/item/device/pda/P) //TODO: sometimes these attacks show up on the message server @@ -1396,7 +1396,7 @@ var/global/list/obj/item/device/pda/PDAs = list() PDAs -= src if (src.id && prob(90)) //IDs are kept in 90% of the cases src.id.loc = get_turf(src.loc) - ..() + return ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. if (istype(AM, /mob/living)) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 85bde90cc4a..2eddcc8535e 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -58,9 +58,9 @@ icon_state = "cart-s" access_security = 1 -/obj/item/weapon/cartridge/security/initialize() +/obj/item/weapon/cartridge/security/Initialize() + . = ..() radio = new /obj/item/radio/integrated/beepsky(src) - ..() /obj/item/weapon/cartridge/detective name = "\improper D.E.T.E.C.T. cartridge" @@ -110,9 +110,9 @@ access_reagent_scanner = 1 access_atmos = 1 -/obj/item/weapon/cartridge/signal/initialize() +/obj/item/weapon/cartridge/signal/Initialize() + . = ..() radio = new /obj/item/radio/integrated/signal(src) - ..() /obj/item/weapon/cartridge/signal/Destroy() qdel(radio) @@ -124,9 +124,9 @@ icon_state = "cart-q" access_quartermaster = 1 -/obj/item/weapon/cartridge/quartermaster/initialize() +/obj/item/weapon/cartridge/quartermaster/Initialize() + . = ..() radio = new /obj/item/radio/integrated/mule(src) - ..() /obj/item/weapon/cartridge/head name = "\improper Easy-Record DELUXE" @@ -141,7 +141,8 @@ access_janitor = 1 access_security = 1 -/obj/item/weapon/cartridge/hop/initialize() +/obj/item/weapon/cartridge/hop/Initialize() + . = ..() radio = new /obj/item/radio/integrated/mule(src) /obj/item/weapon/cartridge/hos @@ -150,9 +151,9 @@ access_status_display = 1 access_security = 1 -/obj/item/weapon/cartridge/hos/initialize() +/obj/item/weapon/cartridge/hos/Initialize() + . = ..() radio = new /obj/item/radio/integrated/beepsky(src) - ..() /obj/item/weapon/cartridge/ce name = "\improper Power-On DELUXE" @@ -175,9 +176,9 @@ access_reagent_scanner = 1 access_atmos = 1 -/obj/item/weapon/cartridge/rd/initialize() +/obj/item/weapon/cartridge/rd/Initialize() + . = ..() radio = new /obj/item/radio/integrated/signal(src) - ..() /obj/item/weapon/cartridge/captain name = "\improper Value-PAK cartridge" @@ -202,7 +203,7 @@ /obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) if(!frequency) return var/datum/signal/status_signal = new @@ -392,14 +393,14 @@ if(mode==47) var/supplyData[0] - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle if (shuttle) supplyData["shuttle_moving"] = shuttle.has_arrive_time() supplyData["shuttle_eta"] = shuttle.eta_minutes() supplyData["shuttle_loc"] = shuttle.at_station() ? "Station" : "Dock" var/supplyOrderCount = 0 var/supplyOrderData[0] - for(var/S in supply_controller.shoppinglist) + for(var/S in SScargo.shoppinglist) var/datum/supply_order/SO = S supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) @@ -411,7 +412,7 @@ var/requestCount = 0 var/requestData[0] - for(var/S in supply_controller.requestlist) + for(var/S in SScargo.requestlist) var/datum/supply_order/SO = S requestCount++ requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 7ad2b002009..2d521db062a 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -16,7 +16,7 @@ proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3, s_filter) //world << "Post: [freq]: [key]=[value], [key2]=[value2]" - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) + var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) if(!frequency) return @@ -46,8 +46,8 @@ New() ..() spawn(5) - if(radio_controller) - radio_controller.add_object(src, control_freq, filter = RADIO_SECBOT) + if(SSradio) + SSradio.add_object(src, control_freq, filter = RADIO_SECBOT) // receive radio signals // can detect bot status signals @@ -101,9 +101,9 @@ /obj/item/radio/integrated/beepsky/Destroy() - if(radio_controller) - radio_controller.remove_object(src, control_freq) - ..() + if(SSradio) + SSradio.remove_object(src, control_freq) + return ..() /obj/item/radio/integrated/mule var/list/botlist = null // list of bots @@ -118,9 +118,9 @@ New() ..() spawn(5) - if(radio_controller) - radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT) - radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) + if(SSradio) + SSradio.add_object(src, control_freq, filter = RADIO_MULEBOT) + SSradio.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) spawn(10) post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS) @@ -217,8 +217,9 @@ var/last_transmission var/datum/radio_frequency/radio_connection - initialize() - if(!radio_controller) + Initialize() + . = ..() + if(!SSradio) return if (src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ) @@ -227,9 +228,9 @@ set_frequency(frequency) proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency) + radio_connection = SSradio.add_object(src, frequency) proc/send_signal(message="ACTIVATE") @@ -251,6 +252,6 @@ return /obj/item/radio/integrated/signal/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - ..() + if(SSradio) + SSradio.remove_object(src, frequency) + return ..() diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index d8e62198f86..e130d97a854 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -77,10 +77,10 @@ return 1 /obj/item/weapon/aicard/update_icon() - overlays.Cut() + cut_overlays() if(carded_ai) if (!carded_ai.control_disabled) - overlays += image('icons/obj/pda.dmi', "aicard-on") + add_overlay("aicard-on") if(carded_ai.stat) icon_state = "aicard-404" else diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index e5f54dc18f7..c5c9965da09 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -45,23 +45,23 @@ playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) qdel(active_dummy) active_dummy = null - usr << "You deactivate the [src]." - var/obj/effect/overlay/T = getFromPool(/obj/effect/overlay, get_turf(src)) + usr << "You deactivate \the [src]." + var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) - spawn(8) qdel(T) + QDEL_IN(T, 8) else playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) var/obj/O = new saved_item(src) if(!O) return - var/obj/effect/dummy/chameleon/C = getFromPool(/obj/effect/dummy/chameleon, usr.loc) + var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc) C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src) qdel(O) - usr << "You activate the [src]." + usr << "You activate \the [src]." var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) - spawn(8) qdel(T) + QDEL_IN(T, 8) /obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1) if(active_dummy) @@ -141,4 +141,4 @@ /obj/effect/dummy/chameleon/Destroy() master.disrupt(0) - ..() + return ..() diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 8a7ab6ed3b9..78243782482 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -17,9 +17,11 @@ var/on = 0 var/brightness_on = 3 //luminosity when on -/obj/item/device/flashlight/initialize() - ..() - update_icon() +/obj/item/device/flashlight/Initialize() + if (on) + light_range = brightness_on + update_icon() + . = ..() /obj/item/device/flashlight/update_icon() if(on) @@ -197,7 +199,7 @@ turn_off() if(!fuel) src.icon_state = "[initial(icon_state)]-empty" - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) /obj/item/device/flashlight/flare/proc/turn_off() on = 0 @@ -220,7 +222,7 @@ user.visible_message("[user] activates the flare.", "You pull the cord on the flare, activating it!") src.force = on_damage src.damtype = "fire" - processing_objects += src + START_PROCESSING(SSprocessing, src) /obj/item/device/flashlight/slime gender = PLURAL @@ -236,10 +238,6 @@ light_color = LIGHT_COLOR_SLIME_LAMP light_wedge = LIGHT_OMNI -/obj/item/device/flashlight/slime/New() - ..() - set_light(brightness_on) - /obj/item/device/flashlight/slime/update_icon() return @@ -273,7 +271,7 @@ turn_off() if(!fuel) src.icon_state = "[initial(icon_state)]-empty" - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) /obj/item/device/flashlight/glowstick/proc/turn_off() on = 0 @@ -300,7 +298,7 @@ if(.) user.visible_message("[user] cracks and shakes \the [src].", "You crack and shake \the [src], turning it on!") - processing_objects += src + START_PROCESSING(SSprocessing, src) /obj/item/device/flashlight/glowstick/red name = "red glowstick" diff --git a/code/game/objects/items/devices/magnetic_lock.dm b/code/game/objects/items/devices/magnetic_lock.dm index cb47b4e7b10..81dc8daa483 100644 --- a/code/game/objects/items/devices/magnetic_lock.dm +++ b/code/game/objects/items/devices/magnetic_lock.dm @@ -39,8 +39,8 @@ req_access = null req_one_access = list(access_engine_equip, access_atmospherics) -/obj/item/device/magnetic_lock/New() - ..() +/obj/item/device/magnetic_lock/Initialize() + . = ..() powercell = new /obj/item/weapon/cell/high() internal_cell = new /obj/item/weapon/cell/device() @@ -138,15 +138,15 @@ if (WT.remove_fuel(2, user)) user.visible_message(span("notice", "[user] starts welding the metal shell of [src]."), span("notice", "You start [hacked ? "repairing" : "welding open"] the metal covering of [src].")) playsound(loc, 'sound/items/Welder.ogg', 50, 1) - overlays += "overlay_welding" - if (do_after(user, 25, 1)) + add_overlay("overlay_welding") + if (do_after(user, 25)) user << span("notice", "You are able to [hacked ? "repair" : "weld through"] the metal shell of [src].") if (hacked) locked = 1 else locked = 0 hacked = !hacked - overlays -= "overlay_welding" + cut_overlay("overlay_welding") else - overlays -= "overlay_welding" + cut_overlay("overlay_welding") update_icon() return @@ -269,7 +269,7 @@ user.visible_message("[user] starts mounting [src] onto [newtarget].", "You begin mounting [src] onto [newtarget].") - if (do_after(user, 35, 1)) + if (do_after(user, 35)) if (!check_target(newtarget, user)) return @@ -386,7 +386,7 @@ update_overlays() /obj/item/device/magnetic_lock/proc/update_overlays() - overlays.Cut() + cut_overlays() switch (status) if (STATUS_BROKEN) icon_state = "broken" @@ -394,16 +394,16 @@ if (STATUS_INACTIVE to STATUS_ACTIVE) if (hacked) - overlays += "overlay_hacked" + add_overlay("overlay_hacked") else if (locked) - overlays += "overlay_locked" + add_overlay("overlay_locked") else - overlays += "overlay_unlocked" + add_overlay("overlay_unlocked") switch (constructionstate) if (0) return if (1 to 4) - overlays += "overlay_deconstruct_[constructionstate]" + add_overlay("overlay_deconstruct_[constructionstate]") /obj/item/device/magnetic_lock/proc/takedamage(var/damage) health -= rand(damage/2, damage) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 22b026435a2..5220fabc014 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -64,7 +64,7 @@ return ..(A, user) var/obj/O = A - var/datum/expansion/multitool/MT = O.expansions[/datum/expansion/multitool] + var/datum/expansion/multitool/MT = LAZYACCESS(O.expansions, /datum/expansion/multitool) if(!MT) return ..(A, user) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index dae84ab1de5..4adcc9109fc 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -17,15 +17,15 @@ if(istype(rig)) rig.forced_move(direction, user) -/obj/item/device/paicard/New() - ..() - overlays += "pai-off" +/obj/item/device/paicard/Initialize() + . = ..() + add_overlay("pai_off") /obj/item/device/paicard/Destroy() //Will stop people throwing friend pAIs into the singularity so they can respawn if(!isnull(pai)) pai.death(0) - ..() + return ..() /obj/item/device/paicard/attackby(obj/item/C as obj, mob/user as mob) if(istype(C, /obj/item/weapon/card/id)) @@ -284,7 +284,7 @@ pai << "

    You have been bound to a new master.

    " if(href_list["request"]) src.looking_for_personality = 1 - paiController.findPAI(src, usr) + SSpai.findPAI(src, usr) if(href_list["wipe"]) var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No") if(confirm == "Yes") @@ -320,34 +320,37 @@ /obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality) src.pai = personality - src.overlays += "pai-happy" + add_overlay("pai-happy") /obj/item/device/paicard/proc/removePersonality() src.pai = null - src.overlays.Cut() - src.overlays += "pai-off" + cut_overlays() + add_overlay("pai-off") /obj/item/device/paicard var/current_emotion = 1 /obj/item/device/paicard/proc/setEmotion(var/emotion) if(pai) - src.overlays.Cut() + cut_overlays() + var/new_state switch(emotion) - if(1) src.overlays += "pai-happy" - if(2) src.overlays += "pai-cat" - if(3) src.overlays += "pai-extremely-happy" - if(4) src.overlays += "pai-face" - if(5) src.overlays += "pai-laugh" - if(6) src.overlays += "pai-off" - if(7) src.overlays += "pai-sad" - if(8) src.overlays += "pai-angry" - if(9) src.overlays += "pai-what" - if(10) src.overlays += "pai-neutral" - if(11) src.overlays += "pai-silly" - if(12) src.overlays += "pai-nose" - if(13) src.overlays += "pai-smirk" - if(14) src.overlays += "pai-exclamation" - if(15) src.overlays += "pai-question" + if(1) new_state = "pai-happy" + if(2) new_state = "pai-cat" + if(3) new_state = "pai-extremely-happy" + if(4) new_state = "pai-face" + if(5) new_state = "pai-laugh" + if(6) new_state = "pai-off" + if(7) new_state = "pai-sad" + if(8) new_state = "pai-angry" + if(9) new_state = "pai-what" + if(10) new_state = "pai-neutral" + if(11) new_state = "pai-silly" + if(12) new_state = "pai-nose" + if(13) new_state = "pai-smirk" + if(14) new_state = "pai-exclamation" + if(15) new_state = "pai-question" + if (new_state) + add_overlay(new_state) current_emotion = emotion /obj/item/device/paicard/proc/alertUpdate() diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index a7210721c82..b8911a068ec 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -28,7 +28,7 @@ /obj/item/device/powersink/Destroy() processing_objects.Remove(src) processing_power_items.Remove(src) - ..() + return ..() /obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 7d41e25bc47..e8ac5d0ea4c 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -1,3 +1,5 @@ +var/global/list/teleportbeacons = list() + /obj/item/device/radio/beacon name = "tracking beacon" desc = "A beacon used by a teleporter." @@ -6,6 +8,14 @@ var/code = "electronic" origin_tech = list(TECH_BLUESPACE = 1) +/obj/item/device/radio/beacon/New() + ..() + teleportbeacons += src + +/obj/item/device/radio/beacon/Destroy() + teleportbeacons.Remove(src) + return ..() + /obj/item/device/radio/beacon/hear_talk() return @@ -29,8 +39,7 @@ /obj/item/device/radio/beacon/bacon //Probably a better way of doing this, I'm lazy. proc/digest_delay() - spawn(600) - qdel(src) + QDEL_IN(src, 600) // SINGULO BEACON SPAWNER diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 9bcb17720f8..bfa7f90cb08 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -44,7 +44,7 @@ //..() if(usr.stat || usr.restrained()) return - if(((istype(usr, /mob/living/carbon/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf))))) + if(((istype(usr, /mob/living/carbon/human) && ((!(ROUND_IS_STARTED) || (SSticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf))))) usr.set_machine(src) if(href_list["freq"]) var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 3da67ce1981..dadaabfe38c 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -20,8 +20,8 @@ sprite_sheets = list("Resomi" = 'icons/mob/species/resomi/ears.dmi') -/obj/item/device/radio/headset/New() - ..() +/obj/item/device/radio/headset/Initialize() + . = ..() internal_channels.Cut() if(ks1type) keyslot1 = new ks1type(src) @@ -235,7 +235,7 @@ for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, radiochannels[ch_name]) secure_radio_connections[ch_name] = null @@ -327,13 +327,13 @@ for (var/ch_name in channels) - if(!radio_controller) - sleep(30) // Waiting for the radio_controller to be created. - if(!radio_controller) + if(!SSradio) + sleep(30) // Waiting for the SSradio to be created. + if(!SSradio) src.name = "broken radio headset" return - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) if(setDescription) setupRadioDescription() diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index c319d29b9d5..022bb36cfe5 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -44,23 +44,23 @@ frequency = ENT_FREQ canhear_range = 4 -/obj/item/device/radio/intercom/New() - ..() +/obj/item/device/radio/intercom/Initialize() + . = ..() power_interface = new(loc, src) -/obj/item/device/radio/intercom/department/medbay/New() - ..() +/obj/item/device/radio/intercom/department/medbay/Initialize() + . = ..() internal_channels = default_medbay_channels.Copy() -/obj/item/device/radio/intercom/department/security/New() - ..() +/obj/item/device/radio/intercom/department/security/Initialize() + . = ..() internal_channels = list( num2text(PUB_FREQ) = list(), num2text(SEC_I_FREQ) = list(access_security) ) -/obj/item/device/radio/intercom/entertainment/New() - ..() +/obj/item/device/radio/intercom/entertainment/Initialize() + . = ..() internal_channels = list( num2text(PUB_FREQ) = list(), num2text(ENT_FREQ) = list() @@ -73,8 +73,8 @@ subspace_transmission = 1 syndie = 1 -/obj/item/device/radio/intercom/syndicate/New() - ..() +/obj/item/device/radio/intercom/syndicate/Initialize() + . = ..() internal_channels[num2text(SYND_FREQ)] = list(access_syndicate) /obj/item/device/radio/intercom/Destroy() @@ -83,13 +83,11 @@ /obj/item/device/radio/intercom/attack_ai(mob/user as mob) src.add_fingerprint(user) - spawn (0) - attack_self(user) + INVOKE_ASYNC(src, /obj/item/.proc/attack_self, user) /obj/item/device/radio/intercom/attack_hand(mob/user as mob) src.add_fingerprint(user) - spawn (0) - attack_self(user) + INVOKE_ASYNC(src, /obj/item/.proc/attack_self, user) /obj/item/device/radio/intercom/receive_range(freq, level) if (!on) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 008e9baef29..5bb32b63c89 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -55,35 +55,33 @@ var/global/list/default_medbay_channels = list( var/list/datum/radio_frequency/secure_radio_connections = new proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) - -/obj/item/device/radio/New() - ..() - wires = new(src) - internal_channels = default_internal_channels.Copy() - listening_objects += src + radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT) /obj/item/device/radio/Destroy() qdel(wires) listening_objects -= src wires = null - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) for (var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, radiochannels[ch_name]) return ..() +/obj/item/device/radio/Initialize() + . = ..() -/obj/item/device/radio/initialize() + wires = new(src) + internal_channels = default_internal_channels.Copy() + listening_objects += src if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ) frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) set_frequency(frequency) for (var/ch_name in channels) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) /obj/item/device/radio/attack_self(mob/user as mob) user.set_machine(src) @@ -609,7 +607,7 @@ var/global/list/default_medbay_channels = list( for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, radiochannels[ch_name]) secure_radio_connections[ch_name] = null @@ -661,13 +659,13 @@ var/global/list/default_medbay_channels = list( src.syndie = 1 for (var/ch_name in src.channels) - if(!radio_controller) - sleep(30) // Waiting for the radio_controller to be created. - if(!radio_controller) + if(!SSradio) + sleep(30) // Waiting for the SSradio to be created. + if(!SSradio) src.name = "broken radio" return - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) return @@ -737,14 +735,14 @@ var/global/list/default_medbay_channels = list( ui.open() /obj/item/device/radio/proc/config(op) - if(radio_controller) + if(SSradio) for (var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, radiochannels[ch_name]) secure_radio_connections = new channels = op - if(radio_controller) + if(SSradio) for (var/ch_name in op) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) return /obj/item/device/radio/off @@ -760,6 +758,6 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/phone/medbay frequency = MED_I_FREQ -/obj/item/device/radio/phone/medbay/New() - ..() +/obj/item/device/radio/phone/medbay/Initialize() + . = ..() internal_channels = default_medbay_channels.Copy() diff --git a/code/game/objects/items/devices/radio_jammer.dm b/code/game/objects/items/devices/radio_jammer.dm index ba6828d24a6..03cb77fffb9 100644 --- a/code/game/objects/items/devices/radio_jammer.dm +++ b/code/game/objects/items/devices/radio_jammer.dm @@ -28,7 +28,7 @@ proc/within_jamming_range(var/atom/test) // tests if an object is near a radio j /obj/item/device/radiojammer/Destroy() if (active) active_radio_jammers -= src - ..() + return ..() /obj/item/device/radiojammer/attack_self() @@ -91,7 +91,7 @@ proc/within_jamming_range(var/atom/test) // tests if an object is near a radio j /obj/item/device/radiojammer/improvised/Destroy() if (active) processing_objects.Remove(src) - ..() + return ..() /obj/item/device/radiojammer/improvised/process() diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 50627a048eb..dd9610b15a2 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -33,7 +33,7 @@ REAGENT SCANNER user.show_message("Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message("Body Temperature: ???", 1) return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!usr.IsAdvancedToolUser()) usr << "You don't have the dexterity to do this!" return user.visible_message("[user] has analyzed [M]'s vitals.","You have analyzed [M]'s vitals.") @@ -212,7 +212,7 @@ REAGENT SCANNER if (user.stat) return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!usr.IsAdvancedToolUser()) usr << "You don't have the dexterity to do this!" return @@ -252,7 +252,7 @@ REAGENT SCANNER /obj/item/device/mass_spectrometer/attack_self(mob/user as mob) if (user.stat) return - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return if(reagents.total_volume) @@ -303,7 +303,7 @@ REAGENT SCANNER return if (user.stat) return - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return if(!istype(O)) diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 95937c01185..040ce6a474f 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -17,6 +17,8 @@ origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2) + var/celltype = /obj/item/weapon/cell //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find + matter = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 3500) var/on = 0 //is it turned on? var/cover_open = 0 //is the cover open? @@ -27,11 +29,15 @@ //TODO: make it heat up the surroundings when not in space -/obj/item/device/suit_cooling_unit/New() - processing_objects |= src - - cell = new/obj/item/weapon/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find - cell.loc = src +/obj/item/device/suit_cooling_unit/Initialize() + . = ..() + START_PROCESSING(SSprocessing, src) + cell = new celltype(src) + +/obj/item/device/suit_cooling_unit/Destroy() + STOP_PROCESSING(SSprocessing, src) + QDEL_NULL(cell) + return ..() // Checks whether the cooling unit is being worn on the back/suit slot. // That way you can't carry it in your hands while it's running to cool yourself down. @@ -163,7 +169,7 @@ return ..() /obj/item/device/suit_cooling_unit/update_icon() - overlays.Cut() + cut_overlays() if (cover_open) if (cell) icon_state = "suitcooler1" @@ -178,17 +184,17 @@ switch(round(cell.percent())) if(86 to INFINITY) - overlays.Add("battery-0") + add_overlay("battery-0") if(69 to 85) - overlays.Add("battery-1") + add_overlay("battery-1") if(52 to 68) - overlays.Add("battery-2") + add_overlay("battery-2") if(35 to 51) - overlays.Add("battery-3") + add_overlay("battery-3") if(18 to 34) - overlays.Add("battery-4") + add_overlay("battery-4") if(-INFINITY to 17) - overlays.Add("battery-5") + add_overlay("battery-5") /obj/item/device/suit_cooling_unit/examine(mob/user) if(!..(user, 1)) @@ -199,7 +205,7 @@ user << "It's switched on and running." else if (istype(src.loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src.loc - if (H.get_species()=="Industrial Frame") + if (H.get_species() == "Industrial Frame") user << "It's switched on and running, connected to the cooling systems of [H]." else user << "It's switched on, but not attached to anything." @@ -218,9 +224,4 @@ user << "It doesn't have a power cell installed." /obj/item/device/suit_cooling_unit/improved //those should come with a better powercell - -/obj/item/device/suit_cooling_unit/improved/New() - processing_objects |= src - - cell = new/obj/item/weapon/cell/high() - cell.loc = src + celltype = /obj/item/weapon/cell/high diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 234afcd569e..89381b49a19 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -124,7 +124,7 @@ toggle = 1 /obj/item/device/transfer_valve/update_icon() - overlays.Cut() + cut_overlays() underlays = null if(!tank_one && !tank_two && !attached_device) @@ -133,13 +133,13 @@ icon_state = "valve" if(tank_one) - overlays += "[tank_one.icon_state]" + add_overlay("[tank_one.icon_state]") if(tank_two) var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") J.Shift(WEST, 13) underlays += J if(attached_device) - overlays += "device" + add_overlay("device") /obj/item/device/transfer_valve/proc/remove_tank(obj/item/weapon/tank/T) if(tank_one == T) diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm index 30bd50c30ac..1ef3f45878f 100644 --- a/code/game/objects/items/glassjar.dm +++ b/code/game/objects/items/glassjar.dm @@ -34,7 +34,7 @@ var/obj/effect/spider/spiderling/S = A user.visible_message("[user] scoops [S] into \the [src].", "You scoop [S] into \the [src].") S.forceMove(src) - processing_objects.Remove(S) // No growing inside jars + STOP_PROCESSING(SSprocessing, S) // No growing inside jars contains = 3 update_icon() return @@ -59,7 +59,7 @@ for(var/obj/effect/spider/spiderling/S in src) S.loc = user.loc user.visible_message("[user] releases [S] from \the [src].", "You release [S] from \the [src].") - processing_objects.Add(S) // They can grow after being let out though + START_PROCESSING(SSprocessing, S) // They can grow after being let out though contains = 0 update_icon() return @@ -107,4 +107,4 @@ underlays += victim name = "glass jar with [S]" desc = "A small jar with [S] inside." - return \ No newline at end of file + return diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index f08d5287958..d4fd9819663 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -136,7 +136,7 @@ new_name = "APLU \"Burning Chrome\"" new_desc = "A standard APLU exosuit with stylish blue flame decals." new_icon = "ripley_flames_blue" - + /obj/item/device/kit/paint/ripley/titan name = "\"Titan's Fist\" APLU customisation kit" new_name = "APLU \"Titan's Fist\"" @@ -149,6 +149,16 @@ new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage." new_icon = "earth" +/obj/item/device/kit/paint/ripley/random + name = "quantum ripley kit" + +/obj/item/device/kit/paint/ripley/random/New() + ..() + var/list/ripleys = (typesof(/obj/item/device/kit/paint/ripley) - typesof(/obj/item/device/kit/paint/ripley/fluff)) + var/build_path = pick(ripleys) + new build_path(src.loc) + qdel(src) + // Durand kits. /obj/item/device/kit/paint/durand name = "\"Classic\" Durand customisation kit" diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 1ccd2f88172..5b31e19853e 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -82,24 +82,24 @@ var/obj/item/robot_parts/head/head = null var/created_name = "" -/obj/item/robot_parts/robot_suit/New() - ..() +/obj/item/robot_parts/robot_suit/Initialize() + . = ..() src.updateicon() /obj/item/robot_parts/robot_suit/proc/updateicon() - src.overlays.Cut() + cut_overlays() if(src.l_arm) - src.overlays += "l_arm+o" + add_overlay("l_arm+o") if(src.r_arm) - src.overlays += "r_arm+o" + add_overlay("r_arm+o") if(src.chest) - src.overlays += "chest+o" + add_overlay("chest+o") if(src.l_leg) - src.overlays += "l_leg+o" + add_overlay("l_leg+o") if(src.r_leg) - src.overlays += "r_leg+o" + add_overlay("r_leg+o") if(src.head) - src.overlays += "head+o" + add_overlay("head+o") /obj/item/robot_parts/robot_suit/proc/check_completion() if(src.l_arm && src.r_arm) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index ac46f2beaa9..731cfbc3799 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -160,6 +160,7 @@ return 0 R.emagged = 1 + R.fakeemagged = 1 return 1 /obj/item/borg/upgrade/combat diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index f1c9aa2d145..6b2e6451f57 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -16,7 +16,7 @@ T.pinned_target = null T.density = 1 break - ..() // delete target + return ..() // delete target Move() ..() diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 3d6a5c96261..568ad40f33a 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -1,3 +1,14 @@ +var/global/list/datum/stack_recipe/rod_recipes = list ( \ + new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("mine track", /obj/structure/track, 3, time = 10, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("cane", /obj/item/weapon/cane, 1, time = 6), \ + new/datum/stack_recipe("crowbar", /obj/item/weapon/crowbar, 1, time = 6), \ + new/datum/stack_recipe("screwdriver", /obj/item/weapon/screwdriver, 1, time = 12), \ + new/datum/stack_recipe("wrench", /obj/item/weapon/wrench, 1, time = 6), \ + new/datum/stack_recipe("spade", /obj/item/weapon/shovel/spade, 2, time = 12), \ + new/datum/stack_recipe("bolt", /obj/item/weapon/arrow, 1, time = 6) + ) + /obj/item/stack/rods name = "metal rod" desc = "Some rods. Can be used for building, or something." @@ -22,6 +33,19 @@ charge_costs = list(500) stacktype = /obj/item/stack/rods +/obj/item/stack/rods/New(var/loc, var/amount=null) + ..() + + recipes = rod_recipes + update_icon() + +/obj/item/stack/rods/update_icon() + var/amount = get_amount() + if((amount <= 5) && (amount > 0)) + icon_state = "rods-[amount]" + else + icon_state = "rods" + /obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob) ..() if (istype(W, /obj/item/weapon/weldingtool)) @@ -44,36 +68,3 @@ user.put_in_hands(new_item) return ..() - - -/obj/item/stack/rods/attack_self(mob/user as mob) - src.add_fingerprint(user) - - if(!istype(user.loc,/turf)) return 0 - - if (locate(/obj/structure/grille, usr.loc)) - for(var/obj/structure/grille/G in usr.loc) - if (G.destroyed) - G.health = 10 - G.density = 1 - G.destroyed = 0 - G.icon_state = "grille" - use(1) - else - return 1 - - else if(!in_use) - if(get_amount() < 2) - user << "You need at least two rods to do this." - return - usr << "Assembling grille..." - in_use = 1 - if (!do_after(usr, 10)) - in_use = 0 - return - var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc ) - usr << "You assemble a grille" - in_use = 0 - F.add_fingerprint(usr) - use(2) - return diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index f2e501ca09f..ff38d4385fb 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -189,6 +189,7 @@ if(usr) usr.remove_from_mob(src) qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer + update_icon() return 1 else if(get_amount() < used) @@ -205,6 +206,7 @@ return 0 else amount += extra + update_icon() return 1 else if(!synths || synths.len < uses_charge) return 0 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 0abd300bac1..eb16f8da307 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -77,9 +77,7 @@ for(var/atom/A in get_turf(hit_atom)) src.reagents.touch(A) src.icon_state = "burst" - spawn(5) - if(src) - qdel(src) + QDEL_IN(src, 5) return /obj/item/toy/balloon/update_icon() @@ -184,7 +182,7 @@ afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) if (flag) return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!usr.IsAdvancedToolUser()) usr << "\red You don't have the dexterity to do this!" return src.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index ec1e5dbf414..266b2115684 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -34,7 +34,7 @@ AI MODULES usr << "You haven't selected an AI to transmit laws to!" return - if(ticker && ticker.mode && ticker.mode.name == "blob") + if(SSticker.mode && SSticker.mode.name == "blob") usr << "Law uploads have been disabled by [company_name]!" return diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm index 421bb55a6a5..9a0e0b2eaed 100644 --- a/code/game/objects/items/weapons/candle.dm +++ b/code/game/objects/items/weapons/candle.dm @@ -49,8 +49,7 @@ for(var/mob/O in viewers(usr, null)) O.show_message(flavor_text, 1) set_light(CANDLE_LUM) - processing_objects.Add(src) - + START_PROCESSING(SSprocessing, src) /obj/item/weapon/flame/candle/process() if(!lit) @@ -60,6 +59,8 @@ new/obj/item/trash/candle(src.loc) if(istype(src.loc, /mob)) src.dropped() + + STOP_PROCESSING(SSprocessing, src) qdel(src) update_icon() if(istype(loc, /turf)) //start a fire if possible diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 8dfbc83145f..60663c8596c 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -114,6 +114,7 @@ var/const/NO_EMAG_ACT = -50 var/sex = "\[UNSET\]" var/icon/front var/icon/side + var/mining_points //miners gotta eat //alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system var/assignment = null //can be alt title or the actual job @@ -182,6 +183,8 @@ var/const/NO_EMAG_ACT = -50 dat += text("Fingerprint: []
    \n", fingerprint_hash) dat += text("Blood Type: []
    \n", blood_type) dat += text("DNA Hash: []

    \n", dna_hash) + if(mining_points) + dat += text("Ore Redemption Points: []

    \n", mining_points) if(front && side) dat +="
" dat += "
[AH.category]Button
[L.name][L.desc]Button
[L.name][L.desc]Button
[L.name][L.desc] Photo:
" @@ -279,6 +282,8 @@ var/const/NO_EMAG_ACT = -50 usr << "The blood type on the card is [blood_type]." usr << "The DNA hash on the card is [dna_hash]." usr << "The fingerprint hash on the card is [fingerprint_hash]." + if(mining_points) + usr << "A ticker indicates the card has [mining_points] ore redemption points available." return /obj/item/weapon/card/id/silver @@ -322,6 +327,17 @@ var/const/NO_EMAG_ACT = -50 access = get_all_station_access() + access_synth ..() +/obj/item/weapon/card/id/synthetic/minedrone + name = "\improper Minedrone ID" + desc = "Access module for NanoTrasen Minedrones" + icon_state = "id-robot" + item_state = "tdgreen" + assignment = "Minedrone" + +/obj/item/weapon/card/id/synthetic/minedrone/New() + access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) + ..() + /obj/item/weapon/card/id/centcom name = "\improper CentCom. ID" desc = "An ID straight from Cent. Com." @@ -340,7 +356,7 @@ var/const/NO_EMAG_ACT = -50 obj/item/weapon/card/id/centcom/ERT/New() ..() access = get_all_accesses() + get_centcom_access("Emergency Response Team") - + /obj/item/weapon/card/id/all_access name = "\improper Administrator's spare ID" desc = "The spare ID of the Lord of Lords himself." diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm index a8c51ba7710..c537e6f73da 100644 --- a/code/game/objects/items/weapons/cards_ids_syndicate.dm +++ b/code/game/objects/items/weapons/cards_ids_syndicate.dm @@ -193,7 +193,7 @@ CS.item_state = initial(ID.item_state) CS.name = initial(ID.name) + " - " + initial(ID.icon_state) id_card_states += CS - id_card_states = dd_sortedObjectList(id_card_states) + sortTim(id_card_states, /proc/cmp_cardstate, FALSE) return id_card_states @@ -201,6 +201,3 @@ var/name var/icon_state var/item_state - -/datum/card_state/dd_SortValue() - return name diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 48998682eab..269d2247dea 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -95,8 +95,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/weldermes = "USER lights NAME with FLAME" var/ignitermes = "USER lights NAME with FLAME" -/obj/item/clothing/mask/smokable/New() - ..() +/obj/item/clothing/mask/smokable/Initialize() + . = ..() flags |= NOREACT // so it doesn't react until you light it create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15 @@ -290,8 +290,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM slot_flags = SLOT_EARS throwforce = 1 -/obj/item/weapon/cigbutt/New() - ..() +/obj/item/weapon/cigbutt/Initialize() + . = ..() pixel_x = rand(-10,10) pixel_y = rand(-10,10) transform = turn(transform,rand(0,360)) @@ -326,8 +326,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM weldermes = "USER recklessly lights NAME with FLAME." ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science." -/obj/item/clothing/mask/smokable/pipe/New() - ..() +/obj/item/clothing/mask/smokable/pipe/Initialize() + . = ..() name = "empty [initial(name)]" /obj/item/clothing/mask/smokable/pipe/light(var/flavor_text = "[usr] lights the [name].") diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm index 3153adab03e..39ec0ee0dff 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm @@ -167,10 +167,10 @@ build_path = /obj/machinery/computer/area_atmos origin_tech = list(TECH_DATA = 2) -/obj/item/weapon/circuitboard/prison_shuttle +/*/obj/item/weapon/circuitboard/prison_shuttle name = T_BOARD("prison shuttle control console") build_path = /obj/machinery/computer/prison_shuttle - origin_tech = list(TECH_DATA = 2) + origin_tech = list(TECH_DATA = 2)*/ /obj/item/weapon/circuitboard/rcon_console name = T_BOARD("RCON remote control console") diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index ab3d272b1f5..1ee61fc7633 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -80,4 +80,4 @@ obj/item/weapon/circuitboard/ntnet_relay board_type = "machine" origin_tech = list(TECH_DATA = 4) req_components = list( - "/obj/item/stack/cable_coil" = 15) + "/obj/item/stack/cable_coil" = 15) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/trashcompactor.dm b/code/game/objects/items/weapons/circuitboards/machinery/trashcompactor.dm new file mode 100644 index 00000000000..cb2a4fd28b9 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/trashcompactor.dm @@ -0,0 +1,13 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/crusher + name = T_BOARD("crusher") + build_path = "/obj/machinery/crusher_base" + board_type = "machine" + origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 1, TECH_MAGNET = 1, TECH_MATERIALS = 3) + req_components = list( + "/obj/item/weapon/stock_parts/matter_bin" = 4, + "/obj/item/weapon/stock_parts/manipulator" = 3, + "/obj/item/weapon/reagent_containers/glass/beaker" = 3) \ No newline at end of file diff --git a/code/game/objects/items/weapons/cloaking_device.dm b/code/game/objects/items/weapons/cloaking_device.dm index 221bcc47f97..fd9808589f5 100644 --- a/code/game/objects/items/weapons/cloaking_device.dm +++ b/code/game/objects/items/weapons/cloaking_device.dm @@ -30,7 +30,7 @@ cell = new /obj/item/weapon/cell/high(src) /obj/item/weapon/cloaking_device/Destroy() - ..() + . = ..() cloaking_devices -= src @@ -189,4 +189,4 @@ if (. == 1) var/obj/item/weapon/cloaking_device/C = source if (!C.active) - return validity_fail("Cloak is inactive!") \ No newline at end of file + return validity_fail("Cloak is inactive!") diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 09213c8c501..e42470b9420 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -68,7 +68,7 @@ spawn(timer*10) explode(get_turf(target)) -/obj/item/weapon/plastique/proc/explode(var/location) +/obj/item/weapon/plastique/proc/explode(var/turf/location) if(!target) target = get_atom_on_turf(src) if(!target) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 4cdf35254d0..6e288a58dca 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -116,7 +116,7 @@ spawn(0) if(!src || !reagents.total_volume) return - var/obj/effect/effect/water/W = getFromPool(/obj/effect/effect/water, get_turf(src)) + var/obj/effect/effect/water/W = new(get_turf(src)) var/turf/my_target if(a <= the_targets.len) my_target = the_targets[a] diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 731c2e34602..351b21b0cb3 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -29,8 +29,8 @@ qdel(igniter) if(ptank) qdel(ptank) - ..() - return + + return ..() /obj/item/weapon/flamethrower/process() @@ -48,13 +48,13 @@ /obj/item/weapon/flamethrower/update_icon() - overlays.Cut() + cut_overlays() if(igniter) - overlays += "+igniter[status]" + add_overlay("+igniter[status]") if(ptank) - overlays += "+ptank" + add_overlay("+ptank") if(lit) - overlays += "+lit" + add_overlay("+lit") item_state = "flamethrower_1" else item_state = "flamethrower_0" @@ -82,7 +82,7 @@ if(ptank) ptank.loc = T ptank = null - getFromPool(/obj/item/stack/rods, T) + new /obj/item/stack/rods(T) qdel(src) return diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 984cde9d208..361071771cc 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -181,9 +181,9 @@ C.throw_mode_off() invisibility = INVISIBILITY_MAXIMUM //Why am i doing this? - spawn(50) //To make sure all reagents can work - qdel(src) //correctly before deleting the grenade. - + //To make sure all reagents can work + //correctly before deleting the grenade. + QDEL_IN(src, 50) /obj/item/weapon/grenade/chem_grenade/large name = "large chem grenade" diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 87aae87fb62..98b177f2f2b 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -143,8 +143,7 @@ spawn(0) new /obj/item/weapon/grenade/flashbang/clusterbang/segment(A)//Creates a 'segment' that launches a few more flashbangs playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(1) - qdel(src) + QDEL_IN(src, 1) /obj/item/weapon/grenade/flashbang/clusterbang/segment desc = "A smaller segment of a clusterbang. Better run." @@ -161,8 +160,7 @@ var/temploc = src.loc//Saves the current location to know where to step away from walk_away(src,temploc,stepdist)//I must go, my people need me var/dettime = rand(15,60) - spawn(dettime) - prime() + addtimer(CALLBACK(src, .proc/prime), dettime) ..() /obj/item/weapon/grenade/flashbang/clusterbang/segment/prime() @@ -176,18 +174,16 @@ new /obj/item/weapon/grenade/flashbang/cluster(A) playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(1) - qdel(src) + QDEL_IN(src, 1) /obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang - spawn(0) - icon_state = "flashbang_active" - active = 1 - banglet = 1 - var/stepdist = rand(1,3) - var/temploc = src.loc - walk_away(src,temploc,stepdist) - var/dettime = rand(15,60) - spawn(dettime) - prime() - ..() + set waitfor = FALSE + icon_state = "flashbang_active" + active = 1 + banglet = 1 + var/stepdist = rand(1,3) + var/temploc = src.loc + walk_away(src,temploc,stepdist) + var/dettime = rand(15,60) + addtimer(CALLBACK(src, .proc/prime), dettime) + ..() diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index f354cb607f1..8661cea3238 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -10,7 +10,7 @@ /obj/item/weapon/grenade/smokebomb/New() ..() - src.smoke = getFromPool(/datum/effect/effect/system/smoke_spread/bad) + src.smoke = new /datum/effect/effect/system/smoke_spread/bad src.smoke.attach(src) /obj/item/weapon/grenade/smokebomb/Destroy() diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index ecd9a8a610f..38113fbb659 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -14,43 +14,44 @@ var/allow_reagents = 0 var/malfunction = 0 - proc/trigger(emote, source as mob) - return +/obj/item/weapon/implant/proc/trigger(emote, source as mob) + return - proc/activate() - return +/obj/item/weapon/implant/proc/activate() + return // What does the implant do upon injection? // return 0 if the implant fails (ex. Revhead and loyalty implant.) // return 1 if the implant succeeds (ex. Nonrevhead and loyalty implant.) - proc/implanted(var/mob/source) - return 1 +/obj/item/weapon/implant/proc/implanted(var/mob/source) + return 1 - proc/get_data() - return "No information available" +/obj/item/weapon/implant/proc/get_data() + return "No information available" - proc/hear(message, source as mob) - return +/obj/item/weapon/implant/proc/hear(message, source as mob) + return - proc/islegal() - return 0 +/obj/item/weapon/implant/proc/islegal() + return 0 - proc/meltdown() //breaks it down, making implant unrecongizible - imp_in << "You feel something melting inside [part ? "your [part.name]" : "you"]!" - if (part) - part.take_damage(burn = 15, used_weapon = "Electronics meltdown") - else - var/mob/living/M = imp_in - M.apply_damage(15,BURN) - name = "melted implant" - desc = "Charred circuit in melted plastic case. Wonder what that used to be..." - icon_state = "implant_melted" - malfunction = MALFUNCTION_PERMANENT +/obj/item/weapon/implant/proc/meltdown() //breaks it down, making implant unrecongizible + imp_in << "You feel something melting inside [part ? "your [part.name]" : "you"]!" + if (part) + part.take_damage(burn = 15, used_weapon = "Electronics meltdown") + else + var/mob/living/M = imp_in + M.apply_damage(15,BURN) + name = "melted implant" + desc = "Charred circuit in melted plastic case. Wonder what that used to be..." + icon_state = "implant_melted" + malfunction = MALFUNCTION_PERMANENT - Destroy() - if(part) - part.implants.Remove(src) - return ..() +/obj/item/weapon/implant/Destroy() + if(part) + part.implants.Remove(src) + STOP_PROCESSING(SSprocessing, src) + return ..() /obj/item/weapon/implant/tracking name = "tracking implant" @@ -58,8 +59,8 @@ var/id = 1.0 - get_data() - var/dat = {"Implant Specifications:
+/obj/item/weapon/implant/tracking/get_data() + . = {"Implant Specifications:
Name: Tracking Beacon
Life: 10 minutes after death of host
Important Notes: None
@@ -73,23 +74,22 @@ disintegrate into bio-safe elements.
Integrity: Gradient creates slight risk of being overcharged and frying the circuitry. As a result neurotoxins can cause massive damage.
Implant Specifics:
"} - return dat - emp_act(severity) - if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning - return - malfunction = MALFUNCTION_TEMPORARY +/obj/item/weapon/implant/tracking/emp_act(severity) + if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning + return + malfunction = MALFUNCTION_TEMPORARY - var/delay = 20 - switch(severity) - if(1) - if(prob(60)) - meltdown() - if(2) - delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time + var/delay = 20 + switch(severity) + if(1) + if(prob(60)) + meltdown() + if(2) + delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time - spawn(delay) - malfunction-- + spawn(delay) + malfunction-- /obj/item/weapon/implant/dexplosive @@ -97,8 +97,8 @@ Implant Specifics:
"} desc = "And boom goes the weasel." icon_state = "implant_evil" - get_data() - var/dat = {" +/obj/item/weapon/implant/dexplosive/get_data() + . = {" Implant Specifications:
Name: Robust Corp RX-78 Employee Management Implant
Life: Activates upon death.
@@ -108,23 +108,19 @@ Implant Specifics:
"} Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
Special Features: Explodes
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat +/obj/item/weapon/implant/dexplosive/trigger(emote, source as mob) + if(emote == "deathgasp") + src.activate("death") - trigger(emote, source as mob) - if(emote == "deathgasp") - src.activate("death") - return +/obj/item/weapon/implant/dexplosive/activate(var/cause) + if((!cause) || (!src.imp_in)) return 0 + explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see. + if(src.imp_in) + src.imp_in.gib() - - activate(var/cause) - if((!cause) || (!src.imp_in)) return 0 - explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see. - if(src.imp_in) - src.imp_in.gib() - - islegal() - return 0 +/obj/item/weapon/implant/dexplosive/islegal() + return 0 //BS12 Explosive /obj/item/weapon/implant/explosive @@ -134,8 +130,8 @@ Implant Specifics:
"} var/phrase = "supercalifragilisticexpialidocious" icon_state = "implant_evil" - get_data() - var/dat = {" +/obj/item/weapon/implant/explosive/get_data() + . = {" Implant Specifications:
Name: Robust Corp RX-78 Intimidation Class Implant
Life: Activates upon codephrase.
@@ -145,113 +141,110 @@ Implant Specifics:
"} Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
Special Features: Explodes
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat - hear_talk(mob/M as mob, msg) - hear(msg) +/obj/item/weapon/implant/explosive/hear_talk(mob/M as mob, msg) + hear(msg) + +/obj/item/weapon/implant/explosive/hear(var/msg) + var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") + msg = replace_characters(msg, replacechars) + if(findtext(msg,phrase)) + activate() + qdel(src) + +/obj/item/weapon/implant/explosive/activate() + if (malfunction == MALFUNCTION_PERMANENT) return - hear(var/msg) - var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") - msg = replace_characters(msg, replacechars) - if(findtext(msg,phrase)) - activate() - qdel(src) + var/need_gib = null + if(istype(imp_in, /mob/)) + var/mob/T = imp_in + message_admins("Explosive implant triggered in [T] ([T.key]). (JMP) ") + log_game("Explosive implant triggered in [T] ([T.key]).") + need_gib = 1 - activate() - if (malfunction == MALFUNCTION_PERMANENT) - return - - - var/need_gib = null - if(istype(imp_in, /mob/)) - var/mob/T = imp_in - message_admins("Explosive implant triggered in [T] ([T.key]). (JMP) ") - log_game("Explosive implant triggered in [T] ([T.key]).",ckey=key_name(T)) - need_gib = 1 - - if(ishuman(imp_in)) - if (elevel == "Localized Limb") - if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste. - imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") - playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3) - sleep(25) - if (istype(part,/obj/item/organ/external/chest) || \ - istype(part,/obj/item/organ/external/groin) || \ - istype(part,/obj/item/organ/external/head)) - part.createwound(BRUISE, 60) //mangle them instead - explosion(get_turf(imp_in), -1, -1, 2, 3) - qdel(src) - else - explosion(get_turf(imp_in), -1, -1, 2, 3) - part.droplimb(0,DROPLIMB_BLUNT) - qdel(src) - if (elevel == "Destroy Body") - explosion(get_turf(T), -1, 0, 1, 6) - T.gib() - if (elevel == "Full Explosion") - explosion(get_turf(T), 0, 1, 3, 6) - T.gib() - - else - explosion(get_turf(imp_in), 0, 1, 3, 6) - - if(need_gib) - imp_in.gib() - - var/turf/t = get_turf(imp_in) - - if(t) - t.hotspot_expose(3500,125) - - implanted(mob/source as mob) - elevel = alert("What sort of explosion would you prefer?", "Implant Intent", "Localized Limb", "Destroy Body", "Full Explosion") - phrase = input("Choose activation phrase:") as text - var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") - phrase = replace_characters(phrase, replacechars) - usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0) - usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate." - return 1 - - emp_act(severity) - if (malfunction) - return - malfunction = MALFUNCTION_TEMPORARY - switch (severity) - if (2.0) //Weak EMP will make implant tear limbs off. - if (prob(50)) - small_boom() - if (1.0) //strong EMP will melt implant either making it go off, or disarming it - if (prob(70)) - if (prob(50)) - small_boom() - else - if (prob(50)) - activate() //50% chance of bye bye - else - meltdown() //50% chance of implant disarming - spawn (20) - malfunction-- - - islegal() - return 0 - - proc/small_boom() - if (ishuman(imp_in) && part) - imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") - playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3) - spawn(25) - if (ishuman(imp_in) && part) - //No tearing off these parts since it's pretty much killing - //and you can't replace groins + if(ishuman(imp_in)) + if (elevel == "Localized Limb") + if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste. + imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") + playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3) + sleep(25) if (istype(part,/obj/item/organ/external/chest) || \ istype(part,/obj/item/organ/external/groin) || \ istype(part,/obj/item/organ/external/head)) part.createwound(BRUISE, 60) //mangle them instead + explosion(get_turf(imp_in), -1, -1, 2, 3) + qdel(src) else + explosion(get_turf(imp_in), -1, -1, 2, 3) part.droplimb(0,DROPLIMB_BLUNT) - explosion(get_turf(imp_in), -1, -1, 2, 3) - qdel(src) + qdel(src) + if (elevel == "Destroy Body") + explosion(get_turf(T), -1, 0, 1, 6) + T.gib() + if (elevel == "Full Explosion") + explosion(get_turf(T), 0, 1, 3, 6) + T.gib() + + else + explosion(get_turf(imp_in), 0, 1, 3, 6) + + if(need_gib) + imp_in.gib() + + var/turf/t = get_turf(imp_in) + + if(t) + t.hotspot_expose(3500,125) + +/obj/item/weapon/implant/explosive/implanted(mob/source as mob) + elevel = alert("What sort of explosion would you prefer?", "Implant Intent", "Localized Limb", "Destroy Body", "Full Explosion") + phrase = input("Choose activation phrase:") as text + var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") + phrase = replace_characters(phrase, replacechars) + usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0) + usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate." + return 1 + +/obj/item/weapon/implant/explosive/emp_act(severity) + if (malfunction) + return + malfunction = MALFUNCTION_TEMPORARY + switch (severity) + if (2.0) //Weak EMP will make implant tear limbs off. + if (prob(50)) + small_boom() + if (1.0) //strong EMP will melt implant either making it go off, or disarming it + if (prob(70)) + if (prob(50)) + small_boom() + else + if (prob(50)) + activate() //50% chance of bye bye + else + meltdown() //50% chance of implant disarming + spawn (20) + malfunction-- + +/obj/item/weapon/implant/explosive/islegal() + return 0 + +/obj/item/weapon/implant/explosive/proc/small_boom() + if (ishuman(imp_in) && part) + imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") + playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3) + spawn(25) + if (ishuman(imp_in) && part) + //No tearing off these parts since it's pretty much killing + //and you can't replace groins + if (istype(part,/obj/item/organ/external/chest) || \ + istype(part,/obj/item/organ/external/groin) || \ + istype(part,/obj/item/organ/external/head)) + part.createwound(BRUISE, 60) //mangle them instead + else + part.droplimb(0,DROPLIMB_BLUNT) + explosion(get_turf(imp_in), -1, -1, 2, 3) + qdel(src) /obj/item/weapon/implant/explosive/New() ..() @@ -267,8 +260,8 @@ Implant Specifics:
"} desc = "Injects things." allow_reagents = 1 - get_data() - var/dat = {" +/obj/item/weapon/implant/chem/get_data() + . = {" Implant Specifications:
Name: Robust Corp MJ-420 Prisoner Management Implant
Life: Deactivates upon death but remains within the body.
@@ -283,55 +276,53 @@ the implant releases the chemicals directly into the blood stream.
Can only be loaded while still in its original case.
Integrity: Implant will last so long as the subject is alive. However, if the subject suffers from malnutrition,
the implant may become unstable and either pre-maturely inject the subject or simply break."} - return dat - New() - ..() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src +/obj/item/weapon/implant/chem/New() + ..() + var/datum/reagents/R = new/datum/reagents(50) + reagents = R + R.my_atom = src - trigger(emote, source as mob) - if(emote == "deathgasp") - src.activate(src.reagents.total_volume) +/obj/item/weapon/implant/chem/trigger(emote, source as mob) + if(emote == "deathgasp") + src.activate(src.reagents.total_volume) + return + + +/obj/item/weapon/implant/chem/activate(var/cause) + if((!cause) || (!src.imp_in)) return 0 + var/mob/living/carbon/R = src.imp_in + src.reagents.trans_to_mob(R, cause, CHEM_BLOOD) + R << "You hear a faint *beep*." + if(!src.reagents.total_volume) + R << "You hear a faint click from your chest." + spawn(0) + qdel(src) + +/obj/item/weapon/implant/chem/emp_act(severity) + if (malfunction) return + malfunction = MALFUNCTION_TEMPORARY + switch(severity) + if(1) + if(prob(60)) + activate(20) + if(2) + if(prob(30)) + activate(5) - activate(var/cause) - if((!cause) || (!src.imp_in)) return 0 - var/mob/living/carbon/R = src.imp_in - src.reagents.trans_to_mob(R, cause, CHEM_BLOOD) - R << "You hear a faint *beep*." - if(!src.reagents.total_volume) - R << "You hear a faint click from your chest." - spawn(0) - qdel(src) - return - - emp_act(severity) - if (malfunction) - return - malfunction = MALFUNCTION_TEMPORARY - - switch(severity) - if(1) - if(prob(60)) - activate(20) - if(2) - if(prob(30)) - activate(5) - - spawn(20) - malfunction-- + spawn(20) + malfunction-- /obj/item/weapon/implant/loyalty name = "loyalty implant" desc = "Makes you loyal or such." - get_data() - var/dat = {" +/obj/item/weapon/implant/loyalty/get_data() + . = {" Implant Specifications:
Name: [company_name] Employee Management Implant
Life: Ten years.
@@ -341,41 +332,37 @@ the implant may become unstable and either pre-maturely inject the subject or si Function: Contains a small pod of nanobots that manipulate the host's mental functions.
Special Features: Will prevent and cure most forms of brainwashing.
Integrity: Implant will last so long as the nanobots are inside the bloodstream."} - return dat +/obj/item/weapon/implant/loyalty/implanted(mob/M) + if(!istype(M, /mob/living/carbon/human)) return 0 + var/mob/living/carbon/human/H = M + var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role) + if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE)) + H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [company_name] try to invade your mind!") + return 0 + else + clear_antag_roles(H.mind, 1) + H << "You feel a surge of loyalty towards [company_name]." + return 1 - implanted(mob/M) - if(!istype(M, /mob/living/carbon/human)) return 0 - var/mob/living/carbon/human/H = M - var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role) - if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE)) - H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [company_name] try to invade your mind!") - return 0 - else - clear_antag_roles(H.mind, 1) - H << "You feel a surge of loyalty towards [company_name]." - return 1 +/obj/item/weapon/implant/loyalty/emp_act(severity) + if (malfunction) + return + malfunction = MALFUNCTION_TEMPORARY - emp_act(severity) - if (malfunction) - return - malfunction = MALFUNCTION_TEMPORARY + activate("emp") + if(severity == 1) + if(prob(50)) + meltdown() + else if (prob(50)) + malfunction = MALFUNCTION_PERMANENT + return + spawn(20) + malfunction-- - activate("emp") - if(severity == 1) - if(prob(50)) - meltdown() - else if (prob(50)) - malfunction = MALFUNCTION_PERMANENT - processing_objects.Remove(src) - return - spawn(20) - malfunction-- - - implanted(mob/source as mob) - //mobname = source.real_name - processing_objects.Add(src) - return 1 +/obj/item/weapon/implant/loyalty/implanted(mob/source as mob) + //mobname = source.real_name + return 1 /obj/item/weapon/implant/loyalty/ipc name = "loyalty chip" @@ -393,8 +380,8 @@ the implant may become unstable and either pre-maturely inject the subject or si desc = "Removes all stuns and knockdowns." var/uses - get_data() - var/dat = {" +/obj/item/weapon/implant/adrenalin/get_data() + . = {" Implant Specifications:
Name: Cybersun Industries Adrenalin Implant
Life: Five days.
@@ -404,25 +391,23 @@ the implant may become unstable and either pre-maturely inject the subject or si Function: Contains nanobots to stimulate body to mass-produce Adrenalin.
Special Features: Will prevent and cure most forms of brainwashing.
Integrity: Implant can only be used three times before the nanobots are depleted."} - return dat - trigger(emote, mob/source as mob) - if (src.uses < 1) return 0 - if (emote == "pale") - src.uses-- - source << "You feel a sudden surge of energy!" - source.SetStunned(0) - source.SetWeakened(0) - source.SetParalysis(0) - - return +/obj/item/weapon/implant/adrenalin/trigger(emote, mob/source as mob) + if (src.uses < 1) + return 0 + if (emote == "pale") + src.uses-- + source << "You feel a sudden surge of energy!" + source.SetStunned(0) + source.SetWeakened(0) + source.SetParalysis(0) - implanted(mob/source) - source.mind.store_memory("A implant can be activated by using the pale emote, say *pale to attempt to activate.", 0, 0) - source << "The implanted freedom implant can be activated by using the pale emote, say *pale to attempt to activate." - return 1 +/obj/item/weapon/implant/adrenalin/implanted(mob/source) + source.mind.store_memory("A implant can be activated by using the pale emote, say *pale to attempt to activate.", 0, 0) + source << "The implanted freedom implant can be activated by using the pale emote, say *pale to attempt to activate." + return 1 /obj/item/weapon/implant/death_alarm @@ -430,8 +415,8 @@ the implant may become unstable and either pre-maturely inject the subject or si desc = "An alarm which monitors host vital signs and transmits a radio message upon death." var/mobname = "Will Robinson" - get_data() - var/dat = {" +/obj/item/weapon/implant/death_alarm/get_data() + . = {" Implant Specifications:
Name: [company_name] \"Profit Margin\" Class Employee Lifesign Sensor
Life: Activates upon death.
@@ -441,61 +426,62 @@ the implant may become unstable and either pre-maturely inject the subject or si Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
Special Features: Alerts crew to crewmember death.
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat - process() - if (!implanted) return - var/mob/M = imp_in +/obj/item/weapon/implant/death_alarm/process() + if (!implanted) + return + var/mob/M = imp_in - if(isnull(M)) // If the mob got gibbed - activate() - else if(M.stat == 2) - activate("death") + if(QDELETED(M)) // If the mob got gibbed + M = null + activate() + else if(M.stat == 2) + activate("death") - activate(var/cause) - var/mob/M = imp_in - var/area/t = get_area(M) - switch (cause) - if("death") - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) - if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) - //give the syndies a bit of stealth - a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm") - else - a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") - qdel(a) - processing_objects.Remove(src) - if ("emp") - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) - var/name = prob(50) ? t.name : pick(teleportlocs) - a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm") - qdel(a) +/obj/item/weapon/implant/death_alarm/activate(var/cause) + var/mob/M = imp_in + var/area/t = get_area(M) + switch (cause) + if("death") + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) + //give the syndies a bit of stealth + a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm") else - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) - a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") - qdel(a) - processing_objects.Remove(src) + a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") + qdel(a) + STOP_PROCESSING(SSprocessing, src) + if ("emp") + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + var/name = prob(50) ? t.name : pick(teleportlocs) + a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm") + qdel(a) + else + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") + qdel(a) + STOP_PROCESSING(SSprocessing, src) - emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this - if (malfunction) //so I'm just going to add a meltdown chance here - return - malfunction = MALFUNCTION_TEMPORARY +/obj/item/weapon/implant/death_alarm/emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this + if (malfunction) //so I'm just going to add a meltdown chance here + return + malfunction = MALFUNCTION_TEMPORARY - activate("emp") //let's shout that this dude is dead - if(severity == 1) - if(prob(40)) //small chance of obvious meltdown - meltdown() - else if (prob(60)) //but more likely it will just quietly die - malfunction = MALFUNCTION_PERMANENT - processing_objects.Remove(src) + activate("emp") //let's shout that this dude is dead + if(severity == 1) + if(prob(40)) //small chance of obvious meltdown + meltdown() + else if (prob(60)) //but more likely it will just quietly die + malfunction = MALFUNCTION_PERMANENT + STOP_PROCESSING(SSprocessing, src) - spawn(20) - malfunction-- + spawn(20) + malfunction-- - implanted(mob/source as mob) - mobname = source.real_name - processing_objects.Add(src) - return 1 +/obj/item/weapon/implant/death_alarm/implanted(mob/source as mob) + mobname = source.real_name + START_PROCESSING(SSprocessing, src) + return 1 /obj/item/weapon/implant/compressed name = "compressed matter implant" @@ -504,8 +490,8 @@ the implant may become unstable and either pre-maturely inject the subject or si var/activation_emote = "sigh" var/obj/item/scanned = null - get_data() - var/dat = {" +/obj/item/weapon/implant/compressed/get_data() + . = {" Implant Specifications:
Name: [company_name] \"Profit Margin\" Class Employee Lifesign Sensor
Life: Activates upon death.
@@ -515,30 +501,29 @@ the implant may become unstable and either pre-maturely inject the subject or si Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
Special Features: Alerts crew to crewmember death.
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - return dat - trigger(emote, mob/source as mob) - if (src.scanned == null) - return 0 - - if (emote == src.activation_emote) - source << "The air glows as \the [src.scanned.name] uncompresses." - activate() - - activate() - var/turf/t = get_turf(src) - if (imp_in) - imp_in.put_in_hands(scanned) - else - scanned.loc = t - qdel(src) - - implanted(mob/source as mob) - src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - if (source.mind) - source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) - source << "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." - return 1 - - islegal() +/obj/item/weapon/implant/compressed/trigger(emote, mob/source as mob) + if (src.scanned == null) return 0 + + if (emote == src.activation_emote) + source << "The air glows as \the [src.scanned.name] uncompresses." + activate() + +/obj/item/weapon/implant/compressed/activate() + var/turf/t = get_turf(src) + if (imp_in) + imp_in.put_in_hands(scanned) + else + scanned.loc = t + qdel(src) + +/obj/item/weapon/implant/compressed/implanted(mob/source as mob) + src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") + if (source.mind) + source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + source << "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." + return 1 + +/obj/item/weapon/implant/compressed/islegal() + return 0 diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index fc9ac7eb32d..3abb839e637 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -62,7 +62,7 @@ /obj/item/weapon/material/Destroy() processing_objects -= src - ..() + return ..() /obj/item/weapon/material/apply_hit_effect() ..() @@ -112,4 +112,4 @@ Commenting this out pending rebalancing of radiation based on small objects. TemperatureAct(150) else return ..() -*/ \ No newline at end of file +*/ diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 2d59c848e4b..6717eca4809 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -26,6 +26,7 @@ var/base_icon var/base_name var/unwielded_force_divisor = 0.25 + action_button_name = "Wield two-handed weapon" /obj/item/weapon/material/twohanded/proc/unwield() wielded = 0 @@ -118,7 +119,7 @@ if (src.wieldsound) playsound(src.loc, wieldsound, 50, 1) - var/obj/item/weapon/material/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ + var/obj/item/weapon/material/twohanded/offhand/O = new /obj/item/weapon/material/twohanded/offhand(user) ////Let's reserve his other hand~ O.name = "[base_name] - offhand" O.desc = "Your second grip on the [base_name]." user.put_in_inactive_hand(O) @@ -130,6 +131,17 @@ return +/obj/item/weapon/material/twohanded/ui_action_click() + if(src in usr) + attack_self(usr) + +/obj/item/weapon/material/twohanded/verb/wield_twohanded() + set name = "Wield two-handed weapon" + set category = "Object" + set src in usr + + attack_self(usr) + ///////////OFFHAND/////////////// /obj/item/weapon/material/twohanded/offhand w_class = 5 diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 45d9aef2c6c..9e3f3192e1e 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -12,15 +12,6 @@ var/base_block_chance = 25 var/shield_power = 100 var/can_block_bullets = 0 - var/datum/effect_system/sparks/spark_system - -/obj/item/weapon/melee/energy/New() - spark_system = bind_spark(src, 5) - ..() - -/obj/item/weapon/melee/energy/Destroy() - QDEL_NULL(spark_system) - return ..() /obj/item/weapon/melee/energy/proc/activate(mob/living/user) anchored = 1 @@ -68,7 +59,7 @@ if(active && default_parry_check(user, attacker, damage_source) && prob(50)) user.visible_message("\The [user] parries [attack_text] with \the [src]!") - spark_system.queue() + spark(src, 5) playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1) return 1 else @@ -84,7 +75,7 @@ if(check_shield_arc(user, bad_arc, damage_source, attacker)) if(prob(base_block_chance)) - spark_system.queue() + spark(src, 5) playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1) shield_power -= round(damage/4) @@ -298,18 +289,18 @@ /obj/item/weapon/melee/energy/blade/Destroy() processing_objects -= src - ..() + return ..() /obj/item/weapon/melee/energy/blade/deactivate(mob/living/user) if(!active) return playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) user.drop_from_inventory(src) - spawn(1) if(src) qdel(src) + QDEL_IN(src, 1) /obj/item/weapon/melee/energy/blade/dropped() - spawn(1) if(src) qdel(src) + QDEL_IN(src, 1) /obj/item/weapon/melee/energy/blade/process() if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) @@ -324,4 +315,4 @@ host.pinned -= src host.embedded -= src host.drop_from_inventory(src) - spawn(1) if(src) qdel(src) + QDEL_IN(src, 1) diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index f17d7dadcbe..c896f995533 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -129,11 +129,11 @@ var/list/tape_roll_applications = list() if(tape_roll_applications[F] & direction) // hazard_overlay in F.overlays wouldn't work. user.visible_message("[user] uses the adhesive of \the [src] to remove area markings from \the [F].", "You use the adhesive of \the [src] to remove area markings from \the [F].") - F.overlays -= hazard_overlay + F.cut_overlay(hazard_overlay, TRUE) tape_roll_applications[F] &= ~direction else user.visible_message("[user] applied \the [src] on \the [F] to create area markings.", "You apply \the [src] on \the [F] to create area markings.") - F.overlays |= hazard_overlay + F.add_overlay(hazard_overlay, TRUE) tape_roll_applications[F] |= direction return diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 0914e272e79..2fe400c7bd7 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -140,7 +140,7 @@ /obj/item/taperoll/police, /obj/item/weapon/material/sword/trench, /obj/item/weapon/shield/energy, - /obj/item/weapon/shield/riot/tact + /obj/item/weapon/shield/riot/tact ) /obj/item/weapon/storage/belt/soulstone @@ -231,7 +231,7 @@ /obj/item/weapon/soap, /obj/item/weapon/storage/bag/trash ) - + /obj/item/weapon/storage/belt/wands name = "wand belt" desc = "A belt designed to hold various rods of power." @@ -243,7 +243,7 @@ can_hold = list( /obj/item/weapon/gun/energy/wand ) - + /obj/item/weapon/storage/belt/wands/full/New() ..() new /obj/item/weapon/gun/energy/wand/fire(src) @@ -251,3 +251,39 @@ new /obj/item/weapon/gun/energy/wand/teleport(src) new /obj/item/weapon/gun/energy/wand/force(src) new /obj/item/weapon/gun/energy/wand/animation(src) + +/obj/item/weapon/storage/belt/mining + name = "explorer's webbing" + desc = "A versatile chest rig, cherished by miners and hunters alike." + icon_state = "explorer" + item_state = "explorer" + storage_slots = 9 + w_class = 4 + max_w_class = 4 //Pickaxes are big. + can_hold = list(/obj/item/weapon/crowbar, + /obj/item/weapon/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/wirecutters, + /obj/item/weapon/wrench, + /obj/item/device/flashlight, + /obj/item/stack/cable_coil, + /obj/item/device/analyzer, + /obj/item/weapon/extinguisher/mini, + /obj/item/device/radio, + /obj/item/clothing/gloves, + /obj/item/clothing/glasses/material, + /obj/item/weapon/pickaxe, + /obj/item/stack/material/animalhide, + /obj/item/weapon/flame/lighter, + /obj/item/weapon/storage/fancy/cigarettes, + /obj/item/weapon/reagent_containers/food/drinks/bottle, + /obj/item/stack/medical, + /obj/item/weapon/reagent_containers/hypospray, + /obj/item/device/gps, + /obj/item/weapon/storage/bag/ore, + /obj/item/weapon/reagent_containers/pill, + /obj/item/weapon/storage/pill_bottle, + /obj/item/weapon/ore, + /obj/item/weapon/reagent_containers/food/drinks, + /obj/item/weapon/storage/bag/plants + ) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 97e8825f562..86229a59332 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -812,3 +812,13 @@ var/type = pick(snacks) new type(src) ..() + +/obj/item/weapon/storage/box/stims + name = "stimpack value kit" + desc = "A box with several stimpack medipens for the economical miner." + icon_state = "syringe" + +/obj/item/weapon/storage/box/stims/New() + ..() + for(var/i in 1 to 4) + new /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 649cd666a0f..0436d47366c 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -105,10 +105,10 @@ update_icon() /obj/item/weapon/storage/fancy/crayons/update_icon() - overlays = list() //resets list - overlays += image('icons/obj/crayons.dmi',"crayonbox") + cut_overlays() + add_overlay("crayonbox") for(var/obj/item/weapon/pen/crayon/crayon in contents) - overlays += image('icons/obj/crayons.dmi',crayon.colourName) + add_overlay("[crayon.colourName]") /obj/item/weapon/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/pen/crayon)) @@ -268,14 +268,13 @@ /obj/item/weapon/storage/lockbox/vials/update_icon(var/itemremoved = 0) var/total_contents = src.contents.len - itemremoved src.icon_state = "vialbox[total_contents]" - src.overlays.Cut() + cut_overlays() if (!broken) - overlays += image(icon, src, "led[locked]") + add_overlay("led[locked]") if(locked) - overlays += image(icon, src, "cover") + add_overlay("cover") else - overlays += image(icon, src, "ledb") - return + add_overlay("ledb") /obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 4bb3ba9a3a2..51d00cf1db5 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -150,6 +150,22 @@ make_exact_fit() +/obj/item/weapon/storage/firstaid/brute + name = "brute aid kit" + desc = "A NanoTrasen care package for moderately injured miners." + icon_state = "brute" + +/obj/item/weapon/storage/firstaid/brute/New() + ..() + if (empty) return + new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/stack/medical/advanced/bruise_pack(src) + new /obj/item/stack/medical/advanced/bruise_pack(src) + return + /* * Pill Bottles */ diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 1d62acc20a6..2e61c86f077 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -12,7 +12,7 @@ /obj/item/weapon/storage/internal/Destroy() master_item = null - ..() + return ..() /obj/item/weapon/storage/internal/attack_hand() return //make sure this is never picked up diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index e024e6ca5c8..2e02e4232e7 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -27,10 +27,10 @@ return /obj/item/weapon/storage/box/donut/update_icon() - overlays.Cut() + cut_overlays() var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents) - overlays += image('icons/obj/food.dmi', "[i][D.overlay_state]") + add_overlay("[i][D.overlay_state]") i++ /obj/item/weapon/storage/box/donut/empty diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index ae5ba344a8a..20fe0c4c73e 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -102,15 +102,15 @@ src.l_set = 1 else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) src.locked = 0 - src.overlays = null - overlays += image('icons/obj/storage.dmi', icon_opened) + cut_overlays() + add_overlay(icon_opened) src.code = null else src.code = "ERROR" else if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort)) src.locked = 1 - src.overlays = null + cut_overlays() src.code = null src.close(usr) else @@ -127,10 +127,10 @@ /obj/item/weapon/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback) if(!emagged) emagged = 1 - src.overlays += image('icons/obj/storage.dmi', icon_sparking) + add_overlay(icon_sparking) sleep(6) - src.overlays = null - overlays += image('icons/obj/storage.dmi', icon_locking) + cut_overlays() + add_overlay(icon_locking) locked = 0 user << (feedback ? feedback : "You short out the lock of \the [src].") return 1 @@ -188,6 +188,7 @@ attack_hand(mob/user as mob) return attack_self(user) -/obj/item/weapon/storage/secure/safe/HoS/New() +/*obj/item/weapon/storage/secure/safe/HoS/New() ..() //new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool) +*/ diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index c09aef55f4f..f904bb6fa76 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -40,7 +40,13 @@ qdel(src.stored_continue) qdel(src.stored_end) qdel(closer) - ..() + while (contents.len) + var/thing = contents[contents.len] + contents.len-- + + qdel(thing) + + return ..() /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) @@ -506,6 +512,14 @@ for(var/obj/item/I in contents) remove_from_storage(I, T) + CHECK_TICK + +/obj/item/weapon/storage/proc/post_init() + var/total_storage_space = 0 + for(var/obj/item/I in contents) + total_storage_space += I.get_storage_cost() + max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents + /obj/item/weapon/storage/New() ..() if(allow_quick_empty) @@ -518,32 +532,28 @@ else verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode - spawn(5) - var/total_storage_space = 0 - for(var/obj/item/I in contents) - total_storage_space += I.get_storage_cost() - max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents + addtimer(CALLBACK(src, .proc/post_init), 5) - src.boxes = new /obj/screen/storage( ) + src.boxes = new /obj/screen/storage src.boxes.name = "storage" src.boxes.master = src src.boxes.icon_state = "block" src.boxes.screen_loc = "7,7 to 10,8" src.boxes.layer = 19 - src.storage_start = new /obj/screen/storage( ) + src.storage_start = new /obj/screen/storage src.storage_start.name = "storage" src.storage_start.master = src src.storage_start.icon_state = "storage_start" src.storage_start.screen_loc = "7,7 to 10,8" src.storage_start.layer = 19 - src.storage_continue = new /obj/screen/storage( ) + src.storage_continue = new /obj/screen/storage src.storage_continue.name = "storage" src.storage_continue.master = src src.storage_continue.icon_state = "storage_continue" src.storage_continue.screen_loc = "7,7 to 10,8" src.storage_continue.layer = 19 - src.storage_end = new /obj/screen/storage( ) + src.storage_end = new /obj/screen/storage src.storage_end.name = "storage" src.storage_end.master = src src.storage_end.icon_state = "storage_end" @@ -560,7 +570,7 @@ src.stored_end.icon_state = "stored_end" src.stored_end.layer = 19 - src.closer = new /obj/screen/close( ) + src.closer = new /obj/screen/close src.closer.master = src src.closer.icon_state = "x" src.closer.layer = 20 diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 0265f40d5ea..00699d16b43 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -16,17 +16,17 @@ attack_verb = list("robusted") var/stunhit = 0 -/obj/item/weapon/storage/toolbox/initialize() - spawn(3) - update_force() +/obj/item/weapon/storage/toolbox/Initialize(mapload) + . = ..() + update_force() /obj/item/weapon/storage/toolbox/emergency name = "emergency toolbox" icon_state = "red" item_state = "toolbox_red" - New() - ..() + Initialize() + . = ..() new /obj/item/weapon/crowbar/red(src) new /obj/item/weapon/extinguisher/mini(src) if(prob(50)) @@ -40,8 +40,8 @@ icon_state = "blue" item_state = "toolbox_blue" - New() - ..() + Initialize() + . = ..() new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) @@ -54,8 +54,8 @@ icon_state = "yellow" item_state = "toolbox_yellow" - New() - ..() + Initialize() + . = ..() var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wirecutters(src) @@ -75,8 +75,8 @@ origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1) force = 7.0 - New() - ..() + Initialize() + . = ..() new /obj/item/clothing/gloves/yellow(src) new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 2573dfac30c..c497bffb268 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -79,13 +79,13 @@ add_fingerprint(user) if(blood_overlay && blood_DNA && (blood_DNA.len >= 1)) //updates blood overlay, if any - overlays.Remove(blood_overlay) + cut_overlay(blood_overlay, TRUE) var/icon/I = new /icon(src.icon, src.icon_state) I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) blood_overlay = image(I) blood_overlay.color = blood_color - overlays += blood_overlay + add_overlay(blood_overlay, TRUE) update_icon() return diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 5af573ba877..ce99f0010c1 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -22,7 +22,7 @@ /obj/item/weapon/tank/jetpack/Destroy() qdel(ion_trail) - ..() + return ..() /obj/item/weapon/tank/jetpack/examine(mob/user) . = ..() diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index f85bb1a53db..8e53a6840b8 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -2,8 +2,6 @@ #define TANK_DEFAULT_RELEASE_PRESSURE 24 #define TANK_IDEAL_PRESSURE 1015 //Arbitrary. -var/list/global/tank_gauge_cache = list() - /obj/item/weapon/tank name = "tank" icon = 'icons/obj/tank.dmi' @@ -37,7 +35,7 @@ var/list/global/tank_gauge_cache = list() src.air_contents = new /datum/gas_mixture() src.air_contents.volume = volume //liters src.air_contents.temperature = T20C - processing_objects.Add(src) + START_PROCESSING(SSprocessing, src) update_gauge() return @@ -45,13 +43,13 @@ var/list/global/tank_gauge_cache = list() if(air_contents) qdel(air_contents) - processing_objects.Remove(src) + STOP_PROCESSING(SSprocessing, src) if(istype(loc, /obj/item/device/transfer_valve)) var/obj/item/device/transfer_valve/TTV = loc TTV.remove_tank(src) - ..() + return ..() /obj/item/weapon/tank/examine(mob/user) . = ..(user, 0) @@ -243,11 +241,9 @@ var/list/global/tank_gauge_cache = list() return last_gauge_pressure = gauge_pressure - overlays.Cut() - var/indicator = "[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]" - if(!tank_gauge_cache[indicator]) - tank_gauge_cache[indicator] = image(icon, indicator) - overlays += tank_gauge_cache[indicator] + cut_overlays() + // SSoverlay will handle icon caching. + add_overlay("[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]") /obj/item/weapon/tank/proc/check_status() //Handle exploding, leaking, and rupturing of the tank diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index fdad2423fcb..cec486a3c6e 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -21,8 +21,8 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - origin_tech = list(TECH_MAGNET = 1) - matter = list(DEFAULT_WALL_MATERIAL = 400) + origin_tech = list(TECH_MAGNET = 1) + matter = list(DEFAULT_WALL_MATERIAL = 400) /obj/item/weapon/locator/attack_self(mob/user as mob) user.set_machine(src) @@ -48,7 +48,7 @@ Frequency: if (usr.stat || usr.restrained()) return var/turf/current_location = get_turf(usr)//What turf is the user on? - if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2. + if(!current_location||current_location.z==1)//If turf was not found or they're on z level 1. usr << "The [src] is malfunctioning." return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) @@ -60,7 +60,7 @@ Frequency: if (sr) src.temp += "Located Beacons:
" - for(var/obj/item/device/radio/beacon/W in world) + for(var/obj/item/device/radio/beacon/W in teleportbeacons) if (W.frequency == src.frequency) var/turf/tr = get_turf(W) if (tr.z == sr.z && tr) @@ -132,8 +132,8 @@ Frequency: w_class = 2.0 throw_speed = 3 throw_range = 5 - origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3) - matter = list(DEFAULT_WALL_MATERIAL = 10000) + origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3) + matter = list(DEFAULT_WALL_MATERIAL = 10000) /obj/item/weapon/hand_tele/attack_self(mob/user as mob) var/turf/current_location = get_turf(user)//What turf is the user on? diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 409da4cea99..3b575d0ec3d 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -135,7 +135,7 @@ name = "welding tool" desc = "A welding tool with a built-in fuel tank, designed for welding and cutting metal." icon = 'icons/obj/tools/welding.dmi' - icon_state = "welder" + icon_state = "welder_off" flags = CONDUCT slot_flags = SLOT_BELT var/base_iconstate = "welder"//These are given an _on/_off suffix before being used @@ -166,8 +166,8 @@ desc = "A welding tool with an extended-capacity built-in fuel tank, standard issue for engineers." max_fuel = 40 matter = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 60) + base_iconstate = "ind_welder_off" origin_tech = list(TECH_ENGINEERING = 2) - base_iconstate = "ind_welder" /obj/item/weapon/weldingtool/hugetank @@ -176,8 +176,8 @@ max_fuel = 80 w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 200, "glass" = 120) + base_iconstate = "adv_welder_off" origin_tech = list(TECH_ENGINEERING = 3) - base_iconstate = "adv_welder" //The Experimental Welding Tool! @@ -187,8 +187,8 @@ max_fuel = 40 w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 120) + base_iconstate = "exp_welder_off" origin_tech = list(TECH_ENGINEERING = 4, TECH_BIO = 4) - base_iconstate = "exp_welder" base_itemstate = "exp_welder" var/last_gen = 0 @@ -197,21 +197,15 @@ //This is roughly half the rate that fuel is lost if the welder is left idle, so it you carelessly leave it on it will still run out - - - - - - //Welding tool functionality here -/obj/item/weapon/weldingtool/New() +/obj/item/weapon/weldingtool/Initialize() + . = ..() // var/random_fuel = min(rand(10,20),max_fuel) var/datum/reagents/R = new/datum/reagents(max_fuel) reagents = R R.my_atom = src R.add_reagent("fuel", max_fuel) update_icon() - ..() /obj/item/weapon/weldingtool/update_icon() ..() @@ -315,7 +309,7 @@ return if(S.brute_dam > ROBOLIMB_SELF_REPAIR_CAP) user << "The damage is far too severe to patch over externally." - return + return if (src.remove_fuel(0)) // Use a bit of fuel and repair S.heal_damage(15,0,0,1) @@ -493,7 +487,7 @@ /obj/item/weapon/weldingtool/Destroy() processing_objects.Remove(src)//Stop processing when destroyed regardless of conditions - ..() + return ..() //Make sure the experimental tool only stops processing when its turned off AND full diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index bf54ca2c7ce..7b5c54a8621 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -16,12 +16,12 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(M) - if(user.spell_list.len) + if(LAZYLEN(user.spell_list)) user.silence_spells(300) //30 seconds user << "You've been silenced!" return - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return @@ -138,7 +138,7 @@ M << "You are free of the net!" processing_objects -= src - ..() + return ..() /obj/effect/energy_net/proc/healthcheck() diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ec1e8d717fd..2aa8cfd22a6 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -25,6 +25,7 @@ var/equip_slot = 0 /obj/Destroy() processing_objects -= src + STOP_PROCESSING(SSprocessing, src) return ..() /obj/Topic(href, href_list, var/datum/topic_state/state = default_state) @@ -73,10 +74,6 @@ /obj/item/proc/is_used_on(obj/O, mob/user) -/obj/proc/process() - processing_objects.Remove(src) - return 0 - /obj/assume_air(datum/gas_mixture/giver) if(loc) return loc.assume_air(giver) @@ -140,9 +137,6 @@ /obj/proc/interact(mob/user) return -/obj/proc/update_icon() - return - /mob/proc/unset_machine() src.machine = null @@ -182,9 +176,12 @@ /obj/proc/tesla_act(var/power) being_shocked = 1 var/power_bounced = power / 2 - tesla_zap(src, 5, power_bounced) - spawn(10) - being_shocked = 0 + tesla_zap(src, 3, power_bounced) + addtimer(CALLBACK(src, .proc/reset_shocked), 10) + +/obj/proc/reset_shocked() + being_shocked = 0 + /obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) return diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 94d5607a51f..966262d8107 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -10,13 +10,14 @@ // creates a new object and deletes itself -/obj/random/initialize() - ..() +/obj/random/Initialize() + . = ..() if (!prob(spawn_nothing_percentage)) var/item = spawn_item() if (has_postspawn && item) post_spawn(item) - qdel(src) + + return INITIALIZE_HINT_QDEL // this function should return a specific item to spawn /obj/random/proc/item_to_spawn() @@ -118,8 +119,8 @@ icon_state = "cell" // spawn_nothing_percentage = 50 problist = list( - /obj/random/powercell = 3, - /obj/random/technology_scanner = 2, + /obj/random/powercell = 3, + /obj/random/technology_scanner = 2, /obj/item/weapon/packageWrap = 1, /obj/random/bomb_supply = 2, /obj/item/weapon/extinguisher = 1, @@ -392,12 +393,12 @@ /obj/item/clothing/suit/space/void/medical = 2.3, /obj/item/clothing/suit/space/void/security = 1, /obj/item/clothing/suit/space/void/atmos = 1.5, - /obj/item/clothing/suit/space/void/merc = 0.5, + /obj/item/clothing/suit/space/void/merc = 0.5, /obj/item/clothing/suit/space/void/captain = 0.3 ) has_postspawn = TRUE -/obj/random/voidsuit/New(loc, _damaged = 0) +/obj/random/voidsuit/Initialize(mapload, _damaged = 0) damaged = _damaged ..(loc) @@ -413,7 +414,7 @@ /obj/random/vendor name = "random vendor" - var/depleted = 0 + var/depleted = 0 problist = list( /obj/machinery/vending/boozeomat = 1, /obj/machinery/vending/coffee = 1, @@ -436,9 +437,9 @@ ) has_postspawn = TRUE -/obj/random/vendor/New(loc, _depleted = 0) +/obj/random/vendor/Initialize(mapload, _depleted = 0) depleted = _depleted - ..(loc) + . = ..() /obj/random/vendor/post_spawn(obj/machinery/vending/V) if (!depleted) @@ -456,7 +457,7 @@ V.products[content] *= multiplier if (V.products[content] < 1 && V.products[content] > 0) //But we'll usually have at least 1 left V.products[content] = 0 - + // Clamp to an integer so we don't get 0.78 of a screwdriver. V.products[content] = round(V.products[content]) @@ -760,6 +761,57 @@ /obj/item/clothing/mask/ai = 0.5 ) +/obj/random/junk + name = "random trash" + desc = "This is toss." + icon = 'icons/obj/trash.dmi' + icon_state = "koisbar" + spawn_nothing_percentage = 5 + problist = list( + /obj/item/trash/koisbar = 0.5, + /obj/item/trash/raisins = 1, + /obj/item/trash/candy = 1, + /obj/item/trash/cheesie = 2, + /obj/item/trash/chips = 0.75, + /obj/item/trash/popcorn = 0.75, + /obj/item/trash/sosjerky = 0.5, + /obj/item/trash/syndi_cakes = 0.25, + /obj/item/trash/waffles = 0.75, + /obj/item/trash/plate = 0.75, + /obj/item/trash/snack_bowl = 0.75, + /obj/item/trash/pistachios = 0.75, + /obj/item/trash/semki = 0.5, + /obj/item/trash/tray = 0.75, + /obj/item/trash/candle = 0.75, + /obj/item/trash/liquidfood = 0.75, + /obj/item/trash/tastybread= 0.75, + /obj/item/trash/meatsnack = 0.5, + /obj/item/trash/maps = 0.5, + /obj/effect/decal/cleanable/ash = 1.5, + /obj/effect/decal/cleanable/dirt = 2, + /obj/effect/decal/cleanable/flour = 1, + /obj/effect/decal/cleanable/greenglow = 1, + /obj/effect/decal/cleanable/molten_item = 1, + /obj/effect/decal/cleanable/vomit = 2, + /obj/effect/decal/cleanable/generic = 2, + /obj/effect/decal/cleanable/liquid_fuel = 0.5, + /obj/effect/decal/cleanable/mucus = 1.5, + /obj/effect/decal/cleanable/blood/drip = 1.5, + /obj/item/weapon/storage/box = 1, + /obj/item/weapon/material/shard = 1, + /obj/item/weapon/material/shard/shrapnel = 1, + /obj/item/weapon/broken_bottle = 1, + /obj/item/stack/material/cardboard = 1, + /obj/item/stack/rods = 1, + /obj/item/weapon/corncob = 1, + /obj/item/weapon/paper/crumpled = 1, + /obj/item/inflatable/torn = 1, + /obj/item/ammo_casing/c45/rubber = 0.5, + /obj/item/ammo_casing/c9mm/rubber = 0.5, + /obj/item/ammo_casing/c45/flash = 0.5, + /obj/item/ammo_casing/shotgun/beanbag = 0.5 + ) + //Sometimes the chef will have spare oil in storage. //Sometimes they wont, and will need to order it from cargo //Variety is the spice of life! @@ -769,6 +821,7 @@ icon = 'icons/obj/objects.dmi' icon_state = "oiltank" spawn_nothing_percentage = 50 + spawnlist = list( /obj/structure/reagent_dispensers/cookingoil ) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 5faa4c70530..6210ebe09d5 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -10,7 +10,9 @@ /obj/structure/Destroy() if(parts) new parts(loc) - ..() + if (smooth) + queue_smooth_neighbors(src) + return ..() /obj/structure/attack_hand(mob/user) if(breakable) @@ -44,14 +46,14 @@ if(3.0) return -/obj/structure/New() - ..() +/obj/structure/Initialize() + . = ..() updateVisibility(src) if(climbable) verbs += /obj/structure/proc/climb_on - -/obj/structure/Destroy() - ..() + if (smooth) + queue_smooth(src) + queue_smooth_neighbors(src) /obj/structure/proc/climb_on() diff --git a/code/game/objects/structures/alien/egg.dm b/code/game/objects/structures/alien/egg.dm index 5d32f9685f6..876ce7366b3 100644 --- a/code/game/objects/structures/alien/egg.dm +++ b/code/game/objects/structures/alien/egg.dm @@ -14,7 +14,7 @@ /obj/structure/alien/egg/Destroy() processing_objects -= src - ..() + return ..() /obj/structure/alien/egg/CanUseTopic(var/mob/user) return isobserver(user) ? STATUS_INTERACTIVE : STATUS_CLOSE diff --git a/code/game/objects/structures/alien/node.dm b/code/game/objects/structures/alien/node.dm index 15a9062862f..adc3aacdbfc 100644 --- a/code/game/objects/structures/alien/node.dm +++ b/code/game/objects/structures/alien/node.dm @@ -11,9 +11,9 @@ /obj/structure/alien/node/Destroy() processing_objects -= src - ..() + return ..() /obj/structure/alien/node/process() if(locate(/obj/effect/plant) in loc) return - new /obj/effect/plant(get_turf(src), plant_controller.seeds["xenomorph"]) + new /obj/effect/plant(get_turf(src), SSplants.seeds["xenomorph"]) diff --git a/code/game/objects/structures/alien/resin.dm b/code/game/objects/structures/alien/resin.dm index 05f6bca0e72..422db71c4c7 100644 --- a/code/game/objects/structures/alien/resin.dm +++ b/code/game/objects/structures/alien/resin.dm @@ -28,7 +28,7 @@ /obj/structure/alien/resin/Destroy() var/turf/T = get_turf(src) T.thermal_conductivity = initial(T.thermal_conductivity) - ..() + return ..() /obj/structure/alien/resin/attack_hand(var/mob/user) if (HULK in user.mutations) @@ -47,4 +47,4 @@ // Todo check attack datums. health -= rand(5,10) healthcheck() - return \ No newline at end of file + return diff --git a/code/game/objects/structures/banner.dm b/code/game/objects/structures/banner.dm new file mode 100644 index 00000000000..86439c9a69f --- /dev/null +++ b/code/game/objects/structures/banner.dm @@ -0,0 +1,42 @@ +/obj/structure/banner + name = "corporate banner" + desc = "A blue flag emblazoned with a golden logo of Nanotrasen hanging from a wooden stand." + anchored = 1 + density = 1 + layer = 9 + icon = 'icons/obj/banner.dmi' + icon_state = "banner_down" + +/obj/structure/banner/verb/toggle() + set src in oview(1) + set category = "Object" + set name = "Toggle Banner" + + if(!usr.canmove || usr.stat || usr.restrained()) + return 0 + + switch(icon_state) + if("banner_down") + src.icon_state = "banner_up" + usr << "You roll up the cloth." + if("banner_up") + src.icon_state = "banner_down" + usr << "You let the cloth hang loose." + else + usr << "You feel slightly dumber." + return + + src.update_icon() + +/obj/structure/banner/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/wrench)) + switch(anchored) + if(0) + anchored = 1 + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + user.visible_message("[user.name] secures [src.name] to the floor.", "You secure [src.name] to the floor.", "You hear a ratchet") + if(1) + anchored = 0 + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", "You unsecure [src.name] from the floor.", "You hear a ratchet") + return \ No newline at end of file diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 625af060db7..2b91f87b020 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -43,10 +43,10 @@ return 1 /obj/structure/coatrack/update_icon() - overlays.Cut() + cut_overlays() if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat)) - overlays += image(icon, icon_state = "coat_lab") + add_overlay("coat_lab") if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo)) - overlays += image(icon, icon_state = "coat_cmo") + add_overlay("coat_cmo") if (istype(coat, /obj/item/clothing/suit/storage/det_trench)) - overlays += image(icon, icon_state = "coat_det") + add_overlay("coat_det") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 077ba16c813..0bcc71115fc 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -24,21 +24,30 @@ var/const/default_mob_size = 15 -/obj/structure/closet/initialize() - ..() - if(!opened) // if closed, any item at the crate's loc is put in the contents - var/obj/I - for(I in src.loc) - if (!istype(I, /obj/item) && !istype(I, /obj/random))continue - if(I.density || I.anchored || I == src) continue - I.forceMove(src) - // adjust locker size to hold all items with 5 units of free store room - var/content_size = 0 - for(I in src.contents) - content_size += Ceiling(I.w_class/2) - if(content_size > storage_capacity-5) - storage_capacity = content_size + 5 +/obj/structure/closet/LateInitialize() + if (opened) // if closed, any item at the crate's loc is put in the contents + return + var/obj/I + for(I in src.loc) + if (!istype(I, /obj/item) && !istype(I, /obj/random)) + continue + if (I.density || I.anchored || I == src) + continue + I.forceMove(src) + // adjust locker size to hold all items with 5 units of free store room + var/content_size = 0 + for(I in src.contents) + content_size += Ceiling(I.w_class/2) + if(content_size > storage_capacity-5) + storage_capacity = content_size + 5 +/obj/structure/closet/Initialize(mapload) + ..() + fill() + return mapload ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_NORMAL + +// Fill lockers with this. +/obj/structure/closet/proc/fill() /obj/structure/closet/examine(mob/user) if(..(user, 1) && !opened) @@ -203,8 +212,6 @@ ..() damage(proj_damage) - return - /obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob) if(src.opened) if(istype(W, /obj/item/weapon/grab)) @@ -314,11 +321,11 @@ usr << "This mob type can't use this verb." /obj/structure/closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) - overlays.Cut() + cut_overlays() if(!opened) icon_state = icon_closed if(welded) - overlays += "welded" + add_overlay("welded") else icon_state = icon_opened @@ -334,7 +341,7 @@ user.do_attack_animation(src) visible_message("[user] [attack_message] the [src]!") dump_contents() - spawn(1) qdel(src) + QDEL_IN(src, 1) return 1 /obj/structure/closet/proc/req_breakout() diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index b42fe3f9502..3c627c1b29e 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -4,8 +4,7 @@ icon_state = "mixed" icon_closed = "mixed" -/obj/structure/closet/athletic_mixed/New() - ..() +/obj/structure/closet/athletic_mixed/fill() new /obj/item/clothing/under/shorts/grey(src) new /obj/item/clothing/under/shorts/black(src) new /obj/item/clothing/under/shorts/red(src) @@ -27,8 +26,7 @@ name = "boxing gloves" desc = "It's a storage unit for gloves for use in the boxing ring." -/obj/structure/closet/boxinggloves/New() - ..() +/obj/structure/closet/boxinggloves/fill() new /obj/item/clothing/gloves/boxing/blue(src) new /obj/item/clothing/gloves/boxing/green(src) new /obj/item/clothing/gloves/boxing/yellow(src) @@ -39,8 +37,7 @@ name = "mask closet" desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!" -/obj/structure/closet/masks/New() - ..() +/obj/structure/closet/masks/fill() new /obj/item/clothing/mask/luchador(src) new /obj/item/clothing/mask/luchador/rudos(src) new /obj/item/clothing/mask/luchador/tecnicos(src) @@ -52,8 +49,7 @@ icon_state = "red" icon_closed = "red" -/obj/structure/closet/lasertag/red/New() - ..() +/obj/structure/closet/lasertag/red/fill() new /obj/item/weapon/gun/energy/lasertag/red(src) new /obj/item/weapon/gun/energy/lasertag/red(src) new /obj/item/clothing/suit/redtag(src) @@ -66,8 +62,7 @@ icon_state = "blue" icon_closed = "blue" -/obj/structure/closet/lasertag/blue/New() - ..() +/obj/structure/closet/lasertag/blue/fill() new /obj/item/weapon/gun/energy/lasertag/blue(src) new /obj/item/weapon/gun/energy/lasertag/blue(src) new /obj/item/clothing/suit/bluetag(src) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 44e173cb895..06d253b9c19 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -35,8 +35,7 @@ icon_closed = "syndicate1" icon_opened = "syndicate1open" -/obj/structure/closet/gimmick/russian/New() - ..() +/obj/structure/closet/gimmick/russian/fill() new /obj/item/clothing/head/ushanka(src) new /obj/item/clothing/head/ushanka(src) new /obj/item/clothing/head/ushanka(src) @@ -56,8 +55,7 @@ icon_closed = "syndicate1" icon_opened = "syndicate1open" -/obj/structure/closet/gimmick/tacticool/New() - ..() +/obj/structure/closet/gimmick/tacticool/fill() new /obj/item/clothing/glasses/eyepatch(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/gloves/swat(src) @@ -82,14 +80,10 @@ icon_opened = "syndicateopen" anchored = 1 -/obj/structure/closet/thunderdome/New() - ..() - /obj/structure/closet/thunderdome/tdred name = "red-team Thunderdome closet" -/obj/structure/closet/thunderdome/tdred/New() - ..() +/obj/structure/closet/thunderdome/tdred/fill() new /obj/item/clothing/suit/armor/tdome/red(src) new /obj/item/clothing/suit/armor/tdome/red(src) new /obj/item/clothing/suit/armor/tdome/red(src) @@ -115,8 +109,7 @@ icon_closed = "syndicate1" icon_opened = "syndicate1open" -/obj/structure/closet/thunderdome/tdgreen/New() - ..() +/obj/structure/closet/thunderdome/tdgreen/fill() new /obj/item/clothing/suit/armor/tdome/green(src) new /obj/item/clothing/suit/armor/tdome/green(src) new /obj/item/clothing/suit/armor/tdome/green(src) diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index ecc779a753e..11647cd4aab 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -14,8 +14,7 @@ icon_state = "black" icon_closed = "black" -/obj/structure/closet/gmcloset/New() - ..() +/obj/structure/closet/gmcloset/fill() new /obj/item/clothing/head/that(src) new /obj/item/clothing/head/that(src) new /obj/item/device/radio/headset/headset_service(src) @@ -40,8 +39,7 @@ icon_state = "black" icon_closed = "black" -/obj/structure/closet/chefcloset/New() - ..() +/obj/structure/closet/chefcloset/fill() new /obj/item/clothing/under/sundress(src) new /obj/item/clothing/under/waiter(src) new /obj/item/clothing/under/waiter(src) @@ -62,8 +60,7 @@ icon_state = "mixed" icon_closed = "mixed" -/obj/structure/closet/jcloset/New() - ..() +/obj/structure/closet/jcloset/fill() new /obj/item/clothing/under/rank/janitor(src) new /obj/item/device/radio/headset/headset_service(src) new /obj/item/weapon/cartridge/janitor(src) @@ -94,8 +91,7 @@ icon_state = "blue" icon_closed = "blue" -/obj/structure/closet/lawcloset/New() - ..() +/obj/structure/closet/lawcloset/fill() new /obj/item/clothing/under/lawyer/female(src) new /obj/item/clothing/under/lawyer/black(src) new /obj/item/clothing/under/lawyer/red(src) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 4f52278a9ca..8224db9d501 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -10,8 +10,7 @@ icon_closed = "bio_general" icon_opened = "bio_generalopen" -/obj/structure/closet/l3closet/general/New() - ..() +/obj/structure/closet/l3closet/general/fill() new /obj/item/clothing/suit/bio_suit/general( src ) new /obj/item/clothing/head/bio_hood/general( src ) @@ -21,8 +20,7 @@ icon_closed = "bio_virology" icon_opened = "bio_virologyopen" -/obj/structure/closet/l3closet/virology/New() - ..() +/obj/structure/closet/l3closet/virology/fill() new /obj/item/clothing/suit/bio_suit/virology( src ) new /obj/item/clothing/head/bio_hood/virology( src ) new /obj/item/clothing/mask/breath(src) @@ -34,8 +32,7 @@ icon_closed = "bio_security" icon_opened = "bio_securityopen" -/obj/structure/closet/l3closet/security/New() - ..() +/obj/structure/closet/l3closet/security/fill() new /obj/item/clothing/suit/bio_suit/security( src ) new /obj/item/clothing/head/bio_hood/security( src ) @@ -45,8 +42,7 @@ icon_closed = "bio_janitor" icon_opened = "bio_janitoropen" -/obj/structure/closet/l3closet/janitor/New() - ..() +/obj/structure/closet/l3closet/janitor/fill() new /obj/item/clothing/suit/bio_suit/janitor( src ) new /obj/item/clothing/head/bio_hood/janitor( src ) @@ -56,7 +52,6 @@ icon_closed = "bio_scientist" icon_opened = "bio_scientistopen" -/obj/structure/closet/l3closet/scientist/New() - ..() +/obj/structure/closet/l3closet/scientist/fill() new /obj/item/clothing/suit/bio_suit/scientist( src ) new /obj/item/clothing/head/bio_hood/scientist( src ) diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index bd17ba98411..ba78d5a7499 100644 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm @@ -4,8 +4,7 @@ icon_closed = "syndicate" icon_opened = "syndicateopen" -/obj/structure/closet/malf/suits/New() - ..() +/obj/structure/closet/malf/suits/fill() new /obj/item/weapon/tank/jetpack/void(src) new /obj/item/clothing/mask/breath(src) new /obj/item/clothing/head/helmet/space/void(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 37ec5a4a51f..a63616e254e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -10,8 +10,7 @@ storage_capacity = 45 //such a big closet deserves a little more capacity - New() - ..() + fill() new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src ) @@ -22,7 +21,6 @@ new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src ) - return /obj/structure/closet/secure_closet/bar/update_icon() if(broken) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index a28e629a981..ee4f10d272a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -8,7 +8,7 @@ icon_broken = "securecargobroken" icon_off = "securecargooff" - New() + fill() ..() new /obj/item/clothing/under/rank/cargotech(src) new /obj/item/clothing/shoes/black(src) @@ -16,7 +16,6 @@ new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/head/soft(src) // new /obj/item/weapon/cartridge/quartermaster(src) - return /obj/structure/closet/secure_closet/quartermaster name = "quartermaster's locker" @@ -28,8 +27,7 @@ icon_broken = "secureqmbroken" icon_off = "secureqmoff" - New() - ..() + fill() new /obj/item/clothing/under/rank/cargo(src) new /obj/item/clothing/shoes/brown(src) new /obj/item/device/radio/headset/headset_cargo(src) @@ -40,4 +38,3 @@ new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/clothing/head/soft(src) - return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index b48d6a19338..b783644b55b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -9,8 +9,7 @@ icon_off = "secureceoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/industrial(src) else @@ -33,8 +32,26 @@ new /obj/item/device/multitool(src) new /obj/item/device/flash(src) new /obj/item/taperoll/engineering(src) - return +/obj/structure/closet/secure_closet/engineering_chief2 + name = "chief engineer's attire" + req_access = list(access_ce) + icon_state = "securece1" + icon_closed = "securece" + icon_locked = "securece1" + icon_opened = "secureceopen" + icon_broken = "securecebroken" + icon_off = "secureceoff" + + + fill() + new /obj/item/weapon/storage/backpack/industrial(src) + new /obj/item/weapon/storage/backpack/satchel_eng(src) + new /obj/item/clothing/accessory/storage/brown_vest(src) + new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/clothing/under/rank/chief_engineer(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/device/radio/headset/heads/ce(src) /obj/structure/closet/secure_closet/engineering_electrical @@ -48,8 +65,7 @@ icon_off = "secureengelecoff" - New() - ..() + fill() new /obj/item/clothing/gloves/yellow(src) new /obj/item/clothing/gloves/yellow(src) new /obj/item/weapon/storage/toolbox/electrical(src) @@ -61,9 +77,6 @@ new /obj/item/device/multitool(src) new /obj/item/device/multitool(src) new /obj/item/device/multitool(src) - return - - /obj/structure/closet/secure_closet/engineering_welding name = "welding supplies" @@ -75,9 +88,7 @@ icon_broken = "secureengweldbroken" icon_off = "secureengweldoff" - - New() - ..() + fill() new /obj/item/clothing/head/welding(src) new /obj/item/clothing/head/welding(src) new /obj/item/clothing/head/welding(src) @@ -87,9 +98,6 @@ new /obj/item/weapon/weldpack(src) new /obj/item/weapon/weldpack(src) new /obj/item/weapon/weldpack(src) - return - - /obj/structure/closet/secure_closet/engineering_personal name = "engineer's locker" @@ -101,9 +109,7 @@ icon_broken = "secureengbroken" icon_off = "secureengoff" - - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/industrial(src) else @@ -119,7 +125,7 @@ new /obj/item/clothing/glasses/meson(src) new /obj/item/weapon/cartridge/engineering(src) new /obj/item/taperoll/engineering(src) - return + /obj/structure/closet/secure_closet/atmos_personal name = "technician's locker" req_access = list(access_atmospherics) @@ -131,8 +137,7 @@ icon_off = "secureatmoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/industrial(src) else @@ -150,4 +155,3 @@ new /obj/item/clothing/mask/gas(src) new /obj/item/weapon/cartridge/atmos(src) new /obj/item/taperoll/engineering(src) - return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index b490953b3e1..da6d3e59b55 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -16,19 +16,14 @@ name = "kitchen cabinet" req_access = list(access_kitchen) - New() - ..() + fill() for(var/i = 0, i < 2, i++) new /obj/item/weapon/reagent_containers/food/condiment/flour(src) new /obj/item/weapon/reagent_containers/food/condiment/sugar(src) - return - /obj/structure/closet/secure_closet/freezer/kitchen/mining req_access = list() - - /obj/structure/closet/secure_closet/freezer/meat name = "meat fridge" icon_state = "fridge1" @@ -39,13 +34,10 @@ icon_off = "fridge1" - New() + fill() ..() for(var/i = 0, i < 8, i++) new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) - return - - /obj/structure/closet/secure_closet/freezer/fridge name = "refrigerator" @@ -57,7 +49,7 @@ icon_off = "fridge1" - New() + fill() ..() for(var/i = 0, i < 5, i++) new /obj/item/weapon/reagent_containers/food/drinks/milk(src) @@ -65,8 +57,6 @@ new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) for(var/i = 0, i < 2, i++) new /obj/item/weapon/storage/fancy/egg_box(src) - return - /obj/structure/closet/secure_closet/freezer/money @@ -80,7 +70,7 @@ req_access = list(access_heads_vault) - New() + fill() ..() for(var/i = 0, i < 3, i++) new /obj/item/weapon/spacecash/c1000(src) @@ -88,4 +78,3 @@ new /obj/item/weapon/spacecash/c500(src) for(var/i = 0, i < 6, i++) new /obj/item/weapon/spacecash/c200(src) - return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm index 969185741d1..cf4c9b1a01b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -9,8 +9,8 @@ icon_closed ="base" icon_opened = "base" -/obj/structure/closet/secure_closet/guncabinet/New() - ..() +/obj/structure/closet/secure_closet/guncabinet/Initialize() + . = ..() update_icon() /obj/structure/closet/secure_closet/guncabinet/toggle() @@ -18,9 +18,9 @@ update_icon() /obj/structure/closet/secure_closet/guncabinet/update_icon() - overlays.Cut() + cut_overlays() if(opened) - overlays += icon(icon,"door_open") + add_overlay("door_open") else var/lazors = 0 var/shottas = 0 @@ -41,13 +41,13 @@ gun.icon_state = "projectile" gun.pixel_x = i*4 - overlays += gun - - overlays += icon(src.icon,"door") + add_overlay(gun) + + add_overlay("door") if(broken) - overlays += icon(src.icon,"broken") + add_overlay("broken") else if (locked) - overlays += icon(src.icon,"locked") + add_overlay("locked") else - overlays += icon(src.icon,"open") + add_overlay("open") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index bf7aa92fa66..287b00837c3 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -8,8 +8,7 @@ icon_broken = "hydrosecurebroken" icon_off = "hydrosecureoff" - - New() + fill() ..() switch(rand(1,2)) if(1) @@ -26,4 +25,3 @@ new /obj/item/weapon/wirecutters/clippers(src) new /obj/item/weapon/reagent_containers/spray/plantbgone(src) // new /obj/item/weapon/bee_net(src) //No more bees, March 2014 - return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index cc333808a05..abb8963649a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -9,8 +9,7 @@ icon_off = "medicaloff" req_access = list(access_medical_equip) - - New() + fill() ..() new /obj/item/weapon/storage/box/autoinjectors(src) new /obj/item/weapon/storage/box/syringes(src) @@ -22,9 +21,6 @@ new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src) new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src) new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src) - return - - /obj/structure/closet/secure_closet/medical2 name = "anesthetics closet" @@ -37,18 +33,13 @@ icon_off = "medicaloff" req_access = list(access_surgery) - - New() - ..() + fill() new /obj/item/weapon/tank/anesthetic(src) new /obj/item/weapon/tank/anesthetic(src) new /obj/item/weapon/tank/anesthetic(src) new /obj/item/clothing/mask/breath/medical(src) new /obj/item/clothing/mask/breath/medical(src) new /obj/item/clothing/mask/breath/medical(src) - return - - /obj/structure/closet/secure_closet/medical3 name = "medical doctor's locker" @@ -60,8 +51,7 @@ icon_broken = "securemedbroken" icon_off = "securemedoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/medic(src) else @@ -96,8 +86,6 @@ new /obj/item/clothing/shoes/white(src) // new /obj/item/weapon/cartridge/medical(src) new /obj/item/device/radio/headset/headset_med(src) - return - /obj/structure/closet/secure_closet/CMO @@ -110,8 +98,7 @@ icon_broken = "cmosecurebroken" icon_off = "cmosecureoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/medic(src) else @@ -119,27 +106,36 @@ new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/head/bio_hood/cmo(src) new /obj/item/clothing/shoes/white(src) - switch(pick("blue", "green", "purple")) - if ("blue") - new /obj/item/clothing/under/rank/medical/blue(src) - new /obj/item/clothing/head/surgery/blue(src) - if ("green") - new /obj/item/clothing/under/rank/medical/green(src) - new /obj/item/clothing/head/surgery/green(src) - if ("purple") - new /obj/item/clothing/under/rank/medical/purple(src) - new /obj/item/clothing/head/surgery/purple(src) - new /obj/item/clothing/under/rank/chief_medical_officer(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src) new /obj/item/weapon/cartridge/cmo(src) new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/shoes/brown (src) new /obj/item/device/radio/headset/heads/cmo(src) new /obj/item/device/flash(src) new /obj/item/weapon/reagent_containers/hypospray(src) - return +/obj/structure/closet/secure_closet/CMO2 + name = "chief medical officer's attire" + req_access = list(access_cmo) + icon_state = "cmosecure1" + icon_closed = "cmosecure" + icon_locked = "cmosecure1" + icon_opened = "cmosecureopen" + icon_broken = "cmosecurebroken" + icon_off = "cmosecureoff" + + fill() + new /obj/item/weapon/storage/backpack/medic(src) + new /obj/item/weapon/storage/backpack/satchel_med(src) + new /obj/item/clothing/under/rank/medical/blue(src) + new /obj/item/clothing/head/surgery/blue(src) + new /obj/item/clothing/under/rank/medical/green(src) + new /obj/item/clothing/head/surgery/green(src) + new /obj/item/clothing/under/rank/medical/purple(src) + new /obj/item/clothing/head/surgery/purple(src) + new /obj/item/clothing/under/rank/chief_medical_officer(src) + new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src) + new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src) + new /obj/item/clothing/shoes/brown (src) + new /obj/item/device/radio/headset/heads/cmo(src) /obj/structure/closet/secure_closet/animal @@ -147,14 +143,12 @@ req_access = list(access_surgery) - New() + fill() ..() new /obj/item/device/assembly/signaler(src) new /obj/item/device/radio/electropack(src) new /obj/item/device/radio/electropack(src) new /obj/item/device/radio/electropack(src) - return - /obj/structure/closet/secure_closet/chemical @@ -168,14 +162,13 @@ icon_off = "medicaloff" req_access = list(access_chemistry) - - New() + fill() ..() new /obj/item/weapon/storage/box/pillbottles(src) new /obj/item/weapon/storage/box/pillbottles(src) new /obj/item/weapon/storage/box/spraybottles(src) new /obj/item/weapon/storage/box/spraybottles(src) - return + /obj/structure/closet/secure_closet/medical_wall name = "first aid closet" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 1477cdc2a7c..372c2fc8d6e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -4,30 +4,19 @@ req_access = list(access_all_personal_lockers) var/registered_name = null -/obj/structure/closet/secure_closet/personal/New() - ..() - spawn(2) - if(prob(50)) - new /obj/item/weapon/storage/backpack(src) - else - new /obj/item/weapon/storage/backpack/satchel_norm(src) - new /obj/item/device/radio/headset( src ) - return - +/obj/structure/closet/secure_closet/personal/fill() + if(prob(50)) + new /obj/item/weapon/storage/backpack(src) + else + new /obj/item/weapon/storage/backpack/satchel_norm(src) + new /obj/item/device/radio/headset( src ) /obj/structure/closet/secure_closet/personal/patient name = "patient's closet" -/obj/structure/closet/secure_closet/personal/patient/New() - ..() - spawn(4) - // Not really the best way to do this, but it's better than "contents = list()"! - for(var/atom/movable/AM in contents) - qdel(AM) - new /obj/item/clothing/under/color/white( src ) - new /obj/item/clothing/shoes/white( src ) - return - +/obj/structure/closet/secure_closet/personal/patient/fill() + new /obj/item/clothing/under/color/white( src ) + new /obj/item/clothing/shoes/white( src ) /obj/structure/closet/secure_closet/personal/cabinet @@ -50,15 +39,10 @@ else icon_state = icon_opened -/obj/structure/closet/secure_closet/personal/cabinet/New() - ..() - spawn(4) - // Not really the best way to do this, but it's better than "contents = list()"! - for(var/atom/movable/AM in contents) - qdel(AM) - new /obj/item/weapon/storage/backpack/satchel/withwallet( src ) - new /obj/item/device/radio/headset( src ) - return +/obj/structure/closet/secure_closet/personal/cabinet/fill() + new /obj/item/weapon/storage/backpack/satchel/withwallet( src ) + new /obj/item/device/radio/headset( src ) + /obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob) if (src.opened) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 0578b793569..d77bca5ccb0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -8,8 +8,7 @@ icon_broken = "secureresbroken" icon_off = "secureresoff" - New() - ..() + fill() new /obj/item/clothing/under/rank/scientist(src) //new /obj/item/clothing/suit/labcoat/science(src) new /obj/item/clothing/suit/storage/toggle/labcoat(src) @@ -18,8 +17,6 @@ new /obj/item/device/radio/headset/headset_sci(src) new /obj/item/weapon/tank/air(src) new /obj/item/clothing/mask/gas(src) - return - /obj/structure/closet/secure_closet/RD @@ -32,8 +29,7 @@ icon_broken = "rdsecurebroken" icon_off = "rdsecureoff" - New() - ..() + fill() new /obj/item/clothing/suit/bio_suit/scientist(src) new /obj/item/clothing/head/bio_hood/scientist(src) new /obj/item/clothing/under/rank/research_director(src) @@ -48,4 +44,23 @@ new /obj/item/weapon/tank/air(src) new /obj/item/clothing/mask/gas(src) new /obj/item/device/flash(src) - return + +/obj/structure/closet/secure_closet/RD2 + name = "research director's attire" + req_access = list(access_rd) + icon_state = "rdsecure1" + icon_closed = "rdsecure" + icon_locked = "rdsecure1" + icon_opened = "rdsecureopen" + icon_broken = "rdsecurebroken" + icon_off = "rdsecureoff" + + fill() + new /obj/item/clothing/under/rank/research_director(src) + new /obj/item/clothing/under/rank/research_director/rdalt(src) + new /obj/item/clothing/under/rank/research_director/dress_rd(src) + new /obj/item/clothing/suit/storage/toggle/labcoat(src) + new /obj/item/clothing/shoes/white(src) + new /obj/item/clothing/shoes/leather(src) + new /obj/item/clothing/gloves/latex(src) + new /obj/item/device/radio/headset/heads/rd(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 958b49db2fd..e29e9335501 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -126,14 +126,14 @@ usr << "This mob type can't use this verb." /obj/structure/closet/secure_closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) - overlays.Cut() + cut_overlays() if(!opened) if(locked) icon_state = icon_locked else icon_state = icon_closed if(welded) - overlays += "welded" + add_overlay("welded") else icon_state = icon_opened 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 3880e71d6dc..d0bc87a8301 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -8,8 +8,7 @@ icon_broken = "capsecurebroken" icon_off = "capsecureoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/captain(src) else @@ -30,7 +29,30 @@ new /obj/item/clothing/under/dress/dress_cap(src) new /obj/item/clothing/head/caphat/formal(src) new /obj/item/clothing/under/captainformal(src) - return + +/obj/structure/closet/secure_closet/captains2 + name = "captain's attire" + req_access = list(access_captain) + icon_state = "capsecure1" + icon_closed = "capsecure" + icon_locked = "capsecure1" + icon_opened = "capsecureopen" + icon_broken = "capsecurebroken" + icon_off = "capsecureoff" + + fill() + new /obj/item/weapon/storage/backpack/captain(src) + new /obj/item/weapon/storage/backpack/satchel_cap(src) + new /obj/item/clothing/suit/captunic(src) + new /obj/item/clothing/suit/captunic/capjacket(src) + new /obj/item/clothing/head/caphat(src) + new /obj/item/clothing/under/rank/captain(src) + new /obj/item/clothing/suit/storage/vest(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/clothing/gloves/captain(src) + new /obj/item/clothing/under/dress/dress_cap(src) + new /obj/item/clothing/head/helmet/formalcaptain(src) + new /obj/item/clothing/under/captainformal(src) @@ -44,7 +66,7 @@ icon_broken = "hopsecurebroken" icon_off = "hopsecureoff" - New() + fill() ..() new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/suit/storage/vest(src) @@ -56,7 +78,6 @@ new /obj/item/weapon/gun/energy/pistol(src) new /obj/item/weapon/gun/projectile/sec/flash(src) new /obj/item/device/flash(src) - return /obj/structure/closet/secure_closet/hop2 name = "head of personnel's attire" @@ -68,7 +89,7 @@ icon_broken = "hopsecurebroken" icon_off = "hopsecureoff" - New() + fill() ..() new /obj/item/clothing/under/rank/head_of_personnel(src) new /obj/item/clothing/under/dress/dress_hop(src) @@ -83,9 +104,6 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src) new /obj/item/clothing/head/caphat/hop(src) - return - - /obj/structure/closet/secure_closet/hos name = "head of security's locker" @@ -97,12 +115,11 @@ icon_broken = "hossecurebroken" icon_off = "hossecureoff" - New() + fill() ..() - if(prob(50)) - new /obj/item/weapon/storage/backpack/security(src) - else - new /obj/item/weapon/storage/backpack/satchel_sec(src) + new /obj/item/weapon/storage/backpack/security(src) + new /obj/item/weapon/storage/backpack/satchel_sec(src) + new /obj/item/clothing/head/helmet/HoS(src) new /obj/item/clothing/suit/storage/vest/hos(src) new /obj/item/clothing/under/rank/head_of_security/jensen(src) @@ -126,9 +143,29 @@ new /obj/item/clothing/accessory/badge/hos(src) new /obj/item/ammo_magazine/tranq(src) new /obj/item/device/holowarrant(src) - return +/obj/structure/closet/secure_closet/hos2 + name = "head of security's attire" + req_access = list(access_hos) + icon_state = "hossecure1" + icon_closed = "hossecure" + icon_locked = "hossecure1" + icon_opened = "hossecureopen" + icon_broken = "hossecurebroken" + icon_off = "hossecureoff" + fill() + new /obj/item/weapon/storage/backpack/security(src) + new /obj/item/weapon/storage/backpack/satchel_sec(src) + new /obj/item/clothing/head/helmet/HoS(src) + new /obj/item/clothing/suit/storage/vest/hos(src) + new /obj/item/clothing/under/rank/head_of_security/jensen(src) + new /obj/item/clothing/under/rank/head_of_security/corp(src) + new /obj/item/device/radio/headset/heads/hos(src) + new /obj/item/clothing/glasses/sunglasses/sechud(src) + new /obj/item/weapon/storage/belt/security(src) + new /obj/item/clothing/accessory/holster/waist(src) + new /obj/item/clothing/head/beret/sec/hos(src) /obj/structure/closet/secure_closet/warden name = "warden's locker" @@ -141,8 +178,7 @@ icon_off = "wardensecureoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/security(src) else @@ -169,7 +205,7 @@ new /obj/item/clothing/accessory/badge/warden(src) new /obj/item/ammo_magazine/c45m/rubber(src) new /obj/item/weapon/storage/box/ids(src) - return + /obj/structure/closet/secure_closet/security_cadet name = "security cadet's locker" @@ -181,8 +217,7 @@ icon_broken = "seccadetbroken" icon_off = "seccadetoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/security(src) else @@ -198,8 +233,6 @@ new /obj/item/clothing/under/rank/security2(src) new /obj/item/device/holowarrant(src) new /obj/item/device/flashlight/flare(src) - return - /obj/structure/closet/secure_closet/security name = "security officer's locker" @@ -211,8 +244,7 @@ icon_broken = "secbroken" icon_off = "secoff" - New() - ..() + fill() if(prob(50)) new /obj/item/weapon/storage/backpack/security(src) else @@ -235,40 +267,34 @@ new /obj/item/ammo_magazine/c45m/rubber(src) new /obj/item/device/holowarrant(src) new /obj/item/device/flashlight/flare(src) - return - /obj/structure/closet/secure_closet/security/cargo - New() + fill() ..() new /obj/item/clothing/accessory/armband/cargo(src) new /obj/item/device/encryptionkey/headset_cargo(src) - return /obj/structure/closet/secure_closet/security/engine - New() + fill() ..() new /obj/item/clothing/accessory/armband/engine(src) new /obj/item/device/encryptionkey/headset_eng(src) - return /obj/structure/closet/secure_closet/security/science - New() + fill() ..() new /obj/item/clothing/accessory/armband/science(src) new /obj/item/device/encryptionkey/headset_sci(src) - return /obj/structure/closet/secure_closet/security/med - New() + fill() ..() new /obj/item/clothing/accessory/armband/medgreen(src) new /obj/item/device/encryptionkey/headset_med(src) - return /obj/structure/closet/secure_closet/detective @@ -282,8 +308,7 @@ icon_off = "cabinetdetective_broken" storage_capacity = 45 //such a big closet deserves a little more capacity - New() - ..() + fill() new /obj/item/clothing/under/det(src) new /obj/item/clothing/under/det/black(src) new /obj/item/clothing/under/det/slob(src) @@ -303,7 +328,6 @@ new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/projectile/revolver/detective(src) new /obj/item/clothing/accessory/holster/armpit(src) - return /obj/structure/closet/secure_closet/detective/update_icon() if(broken) @@ -321,13 +345,9 @@ name = "lethal injections locker" req_access = list(access_captain) - - New() - ..() + fill() new /obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral(src) new /obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral(src) - return - /obj/structure/closet/secure_closet/brig @@ -336,19 +356,15 @@ anchored = 1 var/id = null - New() - ..() + fill() new /obj/item/clothing/under/color/orange( src ) new /obj/item/clothing/shoes/orange( src ) - return - - /obj/structure/closet/secure_closet/courtroom name = "courtroom locker" req_access = list(access_lawyer) - New() + fill() ..() new /obj/item/clothing/shoes/brown(src) new /obj/item/weapon/paper/Court (src) @@ -358,7 +374,6 @@ new /obj/item/clothing/suit/judgerobe (src) new /obj/item/clothing/head/powdered_wig (src) new /obj/item/weapon/storage/briefcase(src) - return /obj/structure/closet/secure_closet/wall name = "wall locker" diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 0422b46eb43..1a18ef1f03e 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -9,8 +9,7 @@ /obj/structure/closet/syndicate/personal desc = "It's a storage unit for operative gear." -/obj/structure/closet/syndicate/personal/New() - ..() +/obj/structure/closet/syndicate/personal/fill() new /obj/item/weapon/tank/jetpack/oxygen(src) new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/clothing/under/syndicate(src) @@ -27,8 +26,7 @@ /obj/structure/closet/syndicate/suit desc = "It's a storage unit for voidsuits." -/obj/structure/closet/syndicate/suit/New() - ..() +/obj/structure/closet/syndicate/suit/fill() new /obj/item/weapon/tank/jetpack/oxygen(src) new /obj/item/clothing/shoes/magboots(src) new /obj/item/clothing/suit/space/void/merc(src) @@ -39,9 +37,7 @@ /obj/structure/closet/syndicate/nuclear desc = "It's a storage unit for nuclear-operative gear." -/obj/structure/closet/syndicate/nuclear/New() - ..() - +/obj/structure/closet/syndicate/nuclear/fill() new /obj/item/ammo_magazine/a10mm(src) new /obj/item/ammo_magazine/a10mm(src) new /obj/item/ammo_magazine/a10mm(src) @@ -67,15 +63,12 @@ /obj/structure/closet/syndicate/resources/ desc = "An old, dusty locker." - New() - ..() + fill() var/common_min = 30 //Minimum amount of minerals in the stack for common minerals var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK - - var/pickednum = rand(1, 50) //Sad trombone @@ -125,17 +118,17 @@ /obj/structure/closet/syndicate/resources/everything desc = "It's an emergency storage closet for repairs." - New() + fill() var/list/resources = list( - /obj/item/stack/material/steel, - /obj/item/stack/material/glass, - /obj/item/stack/material/gold, - /obj/item/stack/material/silver, - /obj/item/stack/material/phoron, - /obj/item/stack/material/uranium, - /obj/item/stack/material/diamond, - /obj/item/stack/material/plasteel, - /obj/item/stack/rods + /obj/item/stack/material/steel, + /obj/item/stack/material/glass, + /obj/item/stack/material/gold, + /obj/item/stack/material/silver, + /obj/item/stack/material/phoron, + /obj/item/stack/material/uranium, + /obj/item/stack/material/diamond, + /obj/item/stack/material/plasteel, + /obj/item/stack/rods ) @@ -143,5 +136,3 @@ for(var/res in resources) var/obj/item/stack/R = new res(src) R.amount = R.max_amount - - return diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 714be281b89..c140f4ed84d 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -19,9 +19,7 @@ icon_closed = "emergency" icon_opened = "emergencyopen" -/obj/structure/closet/emcloset/New() - ..() - +/obj/structure/closet/emcloset/fill() switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10))) if ("small") new /obj/item/weapon/tank/emergency_oxygen(src) @@ -52,7 +50,7 @@ new /obj/item/clothing/head/helmet/space/emergency(src) new /obj/item/clothing/head/helmet/space/emergency(src) -/obj/structure/closet/emcloset/legacy/New() +/obj/structure/closet/emcloset/legacy/fill() ..() new /obj/item/weapon/tank/oxygen(src) new /obj/item/clothing/mask/gas(src) @@ -67,20 +65,14 @@ icon_closed = "firecloset" icon_opened = "fireclosetopen" -/obj/structure/closet/firecloset/New() - ..() - +/obj/structure/closet/firecloset/fill() new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/clothing/mask/gas(src) new /obj/item/weapon/tank/oxygen/red(src) new /obj/item/weapon/extinguisher(src) new /obj/item/clothing/head/hardhat/red(src) -/obj/structure/closet/firecloset/full/New() - ..() - sleep(4) - contents = list() - +/obj/structure/closet/firecloset/full/fill() new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/clothing/mask/gas(src) new /obj/item/device/flashlight(src) @@ -105,8 +97,7 @@ icon_closed = "toolcloset" icon_opened = "toolclosetopen" -/obj/structure/closet/toolcloset/New() - ..() +/obj/structure/closet/toolcloset/fill() if(prob(40)) new /obj/item/clothing/suit/storage/hazardvest(src) if(prob(70)) @@ -149,8 +140,7 @@ icon_opened = "toolclosetopen" icon_closed = "radsuitcloset" -/obj/structure/closet/radiation/New() - ..() +/obj/structure/closet/radiation/fill() new /obj/item/clothing/suit/radiation(src) new /obj/item/clothing/head/radiation(src) new /obj/item/clothing/suit/radiation(src) @@ -166,8 +156,7 @@ icon_closed = "bombsuit" icon_opened = "bombsuitopen" -/obj/structure/closet/bombcloset/New() - ..() +/obj/structure/closet/bombcloset/fill() new /obj/item/clothing/suit/bomb_suit( src ) new /obj/item/clothing/under/color/black( src ) new /obj/item/clothing/shoes/black( src ) @@ -181,8 +170,7 @@ icon_closed = "bombsuitsec" icon_opened = "bombsuitsecopen" -/obj/structure/closet/bombclosetsecurity/New() - ..() +/obj/structure/closet/bombclosetsecurity/fill() new /obj/item/clothing/suit/bomb_suit/security( src ) new /obj/item/clothing/under/rank/security( src ) new /obj/item/clothing/shoes/brown( src ) @@ -201,8 +189,7 @@ density = 0 wall_mounted = 1 -/obj/structure/closet/hydrant/New() - ..() +/obj/structure/closet/hydrant/fill() new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/clothing/mask/gas(src) new /obj/item/device/flashlight(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 2f40f5c03be..ccf28a2768d 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -29,6 +29,7 @@ new /obj/item/clothing/head/beret/sec/alt(src) new /obj/item/clothing/head/beret/sec/alt(src) new /obj/item/clothing/head/beret/sec/alt(src) + new /obj/item/device/radio/headset/headset_sec(src) return /obj/structure/closet/wardrobe/pink @@ -137,8 +138,8 @@ /obj/structure/closet/wardrobe/yellow name = "yellow wardrobe" - icon_state = "wardrobe-y" - icon_closed = "wardrobe-y" + icon_state = "yellow" + icon_closed = "yellow" /obj/structure/closet/wardrobe/yellow/New() ..() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index cd11246ebd0..78b5702b2c9 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -251,13 +251,6 @@ set_tablestatus(1) - - - - - - - /* ===================== Secure Crates @@ -279,14 +272,14 @@ var/locked = 1 health = 200 -/obj/structure/closet/crate/secure/New() - ..() +/obj/structure/closet/crate/secure/Initialize() + . = ..() if(locked) - overlays.Cut() - overlays += redlight + cut_overlays() + add_overlay(redlight) else - overlays.Cut() - overlays += greenlight + cut_overlays() + add_overlay(greenlight) /obj/structure/closet/crate/secure/can_open() if (..()) @@ -312,8 +305,8 @@ if(user) for(var/mob/O in viewers(user, 3)) O.show_message( "The crate has been [locked ? null : "un"]locked by [user].", 1) - overlays.Cut() - overlays += locked ? redlight : greenlight + cut_overlays() + add_overlay(locked ? redlight : greenlight) /obj/structure/closet/crate/secure/verb/verb_togglelock() set src in oview(1) // One square distance @@ -348,10 +341,10 @@ /obj/structure/closet/crate/secure/emag_act(var/remaining_charges, var/mob/user) if(!broken) - overlays.Cut() - overlays += emag - overlays += sparks - spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface* + cut_overlays() + add_overlay(emag) + add_overlay(sparks) + CUT_OVERLAY_IN(sparks, 6) playsound(src.loc, "sparks", 60, 1) src.locked = 0 src.broken = 1 @@ -364,13 +357,13 @@ if(!broken && !opened && prob(50/severity)) if(!locked) src.locked = 1 - overlays.Cut() - overlays += redlight + cut_overlays() + add_overlay(redlight) else - overlays.Cut() - overlays += emag - overlays += sparks - spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface* + cut_overlays() + add_overlay(emag) + add_overlay(sparks) + CUT_OVERLAY_IN(sparks, 6) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) src.locked = 0 if(!opened && prob(20/severity)) @@ -432,8 +425,7 @@ icon_opened = "crateopen" icon_closed = "crate" -/obj/structure/closet/crate/rcd/New() - ..() +/obj/structure/closet/crate/rcd/fill() new /obj/item/weapon/rcd_ammo(src) new /obj/item/weapon/rcd_ammo(src) new /obj/item/weapon/rcd_ammo(src) @@ -442,8 +434,7 @@ /obj/structure/closet/crate/solar name = "solar pack crate" -/obj/structure/closet/crate/solar/New() - ..() +/obj/structure/closet/crate/solar/fill() new /obj/item/solar_assembly(src) new /obj/item/solar_assembly(src) new /obj/item/solar_assembly(src) @@ -491,13 +482,12 @@ newgas.temperature = target_temp return newgas -/obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle +/obj/structure/closet/crate/freezer/rations //For use in the escape shuttle name = "emergency rations" desc = "A crate of emergency rations." -/obj/structure/closet/crate/freezer/rations/New() - ..() +/obj/structure/closet/crate/freezer/rations/fill() new /obj/item/weapon/reagent_containers/food/snacks/liquidfood(src) new /obj/item/weapon/reagent_containers/food/snacks/liquidfood(src) new /obj/item/weapon/reagent_containers/food/snacks/liquidfood(src) @@ -517,8 +507,7 @@ icon_opened = "radiationopen" icon_closed = "radiation" -/obj/structure/closet/crate/radiation/New() - ..() +/obj/structure/closet/crate/radiation/fill() new /obj/item/clothing/suit/radiation(src) new /obj/item/clothing/head/radiation(src) new /obj/item/clothing/suit/radiation(src) @@ -640,8 +629,7 @@ /obj/structure/closet/crate/hydroponics/prespawned //This exists so the prespawned hydro crates spawn with their contents. - New() - ..() + fill() new /obj/item/weapon/reagent_containers/spray/plantbgone(src) new /obj/item/weapon/reagent_containers/spray/plantbgone(src) new /obj/item/weapon/material/minihoe(src) @@ -677,18 +665,20 @@ "trashcart" = "trashcartopen", "critter" = "critteropen", "largemetal" = "largemetalopen", - "medicalcrate" = "medicalcrateopen") + "medicalcrate" = "medicalcrateopen" + ) -/obj/structure/closet/crate/loot/New(var/location, var/_rarity = 1, var/_quantity = 10) - +/obj/structure/closet/crate/loot/Initialize(mapload, var/_rarity = 1, var/_quantity = 10) + . = ..() rarity = _rarity quantity = _quantity - ..(location) - -/obj/structure/closet/crate/loot/initialize() - spawntypes = list("1" = STOCK_RARE_PROB*rarity, "2" = STOCK_UNCOMMON_PROB*rarity, "3" = (100 - ((STOCK_RARE_PROB*rarity) + (STOCK_UNCOMMON_PROB*rarity)))) + spawntypes = list( + "1" = STOCK_RARE_PROB * rarity, + "2" = STOCK_UNCOMMON_PROB * rarity, + "3" = (100 - ((STOCK_RARE_PROB * rarity) + (STOCK_UNCOMMON_PROB * rarity))) + ) icon_closed = pick(iconchoices) icon_opened = iconchoices[icon_closed] diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 4243a2d8cab..b41b25cc73d 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -49,8 +49,8 @@ var/held_count = 1 var/held_type -/obj/structure/largecrate/animal/New() - ..() +/obj/structure/largecrate/animal/Initialize() + . = ..() for(var/i = 1;i<=held_count;i++) new held_type(src) diff --git a/code/game/objects/structures/fireaxe_cabinet.dm b/code/game/objects/structures/fireaxe_cabinet.dm index a19693f5ab9..d079b4c3b09 100644 --- a/code/game/objects/structures/fireaxe_cabinet.dm +++ b/code/game/objects/structures/fireaxe_cabinet.dm @@ -27,13 +27,13 @@ update_icon() /obj/structure/fireaxecabinet/update_icon() - overlays.Cut() + cut_overlays() if(fireaxe) - overlays += image(icon, "fireaxe_item") + add_overlay("fireaxe_item") if(shattered) - overlays += image(icon, "fireaxe_window_broken") + add_overlay("fireaxe_window_broken") else if(!open) - overlays += image(icon, "fireaxe_window") + add_overlay("fireaxe_window") /obj/structure/fireaxecabinet/New() ..() diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 430c974f7c3..18d1a15d45b 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -69,7 +69,7 @@ user << "You secured the girder!" reset_girder() - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) user << "Now slicing apart the girder..." if(do_after(user,30)) if(!src) return @@ -278,7 +278,7 @@ user << "You dissasembled the girder!" dismantle() - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) user << "Now slicing apart the girder..." if(do_after(user,30)) user << "You slice apart the girder!" diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 2463cd48b4b..6a2a1b5a597 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -11,7 +11,6 @@ var/health = 10 var/destroyed = 0 - /obj/structure/grille/ex_act(severity) qdel(src) @@ -64,7 +63,7 @@ //Flimsy grilles aren't so great at stopping projectiles. However they can absorb some of the impact var/damage = Proj.get_structure_damage() var/passthrough = 0 - + if(!damage) return //20% chance that the grille provides a bit more cover than usual. Support structure for example might take up 20% of the grille's area. @@ -96,7 +95,7 @@ if(iswirecutter(W)) if(!shock(user, 100)) playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - getFromPool(/obj/item/stack/rods, get_turf(src), destroyed ? 1 : 2) + new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2) qdel(src) else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) if(!shock(user, 90)) @@ -104,6 +103,16 @@ anchored = !anchored user.visible_message("[user] [anchored ? "fastens" : "unfastens"] the grille.", \ "You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.") + else if(istype(W,/obj/item/stack/rods) && destroyed == 1) + if(!shock(user, 90)) + var/obj/item/stack/rods/ROD = W + health = 10 + density = 1 + destroyed = 0 + icon_state = "grille" + ROD.use(1) + user.visible_message("[user] repairs the grille.", \ + "You have repaired the grille.") return //window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM @@ -169,11 +178,11 @@ density = 0 destroyed = 1 update_icon() - getFromPool(/obj/item/stack/rods, get_turf(src)) + new /obj/item/stack/rods(get_turf(src)) else if(health <= -6) - getFromPool(/obj/item/stack/rods, get_turf(src)) + new /obj/item/stack/rods(get_turf(src)) qdel(src) return return diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 11ec1f3b3f0..9428ea379a8 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -49,7 +49,7 @@ /obj/structure/inflatable/Destroy() update_nearby_tiles() - ..() + return ..() /obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) return 0 diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 753af5a8e10..f7436cdea71 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -143,7 +143,7 @@ //This return will prevent afterattack from executing if the object goes into the trashbag, //This prevents dumb stuff like splashing the cart with the contents of a container, after putting said container into trash - else if (!has_items && (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/weldingtool) || istype(I, /obj/item/weapon/pickaxe/plasmacutter))) + else if (!has_items && (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/weldingtool) || istype(I, /obj/item/weapon/gun/energy/plasmacutter))) dismantle(user) return ..() @@ -280,28 +280,28 @@ /obj/structure/janitorialcart/update_icon() - overlays = null + cut_overlays() has_items = 0 if(mybucket) - overlays += "cart_bucket" + add_overlay("cart_bucket") has_items = 1 if(mybag) - overlays += "cart_garbage" + add_overlay("cart_garbage") has_items = 1 if(mymop) - overlays += "cart_mop" + add_overlay("cart_mop") has_items = 1 if(myspray) - overlays += "cart_spray" + add_overlay("cart_spray") has_items = 1 if(myreplacer) if (istype(myreplacer, /obj/item/device/lightreplacer/advanced)) - overlays += "cart_adv_lightreplacer" + add_overlay("cart_adv_lightreplacer") else - overlays += "cart_replacer" + add_overlay("cart_replacer") has_items = 1 if(signs) - overlays += "cart_sign[signs]" + add_overlay("cart_sign[signs]") has_items = 1 diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 4c31a8530fb..d4062d4ebe1 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -1,51 +1,40 @@ /obj/structure/lattice name = "lattice" desc = "A lightweight support lattice." - icon = 'icons/obj/structures.dmi' - icon_state = "latticefull" + icon = 'icons/obj/smooth/lattice.dmi' + icon_state = "lattice" density = 0 anchored = 1.0 w_class = 3 layer = 2.3 //under pipes // flags = CONDUCT + smooth = SMOOTH_MORE + canSmoothWith = list( + /obj/structure/lattice, + /turf/simulated/wall, + /turf/simulated/floor, + /turf/simulated/mineral, + /turf/unsimulated/wall, + /turf/unsimulated/floor, + /obj/structure/grille + ) -/obj/structure/lattice/initialize() - ..() +/obj/structure/lattice/Initialize() + . = ..() ///// Z-Level Stuff if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open) || istype(src.loc, /turf/simulated/floor/asteroid))) ///// Z-Level Stuff - qdel(src) + return INITIALIZE_HINT_QDEL for(var/obj/structure/lattice/LAT in src.loc) if(LAT != src) qdel(LAT) - icon = 'icons/obj/smoothlattice.dmi' - icon_state = "latticeblank" - updateOverlays() - for (var/dir in cardinal) - var/obj/structure/lattice/L - if(locate(/obj/structure/lattice, get_step(src, dir))) - L = locate(/obj/structure/lattice, get_step(src, dir)) - L.updateOverlays() - -/obj/structure/lattice/Destroy() - for (var/dir in cardinal) - var/obj/structure/lattice/L - if(locate(/obj/structure/lattice, get_step(src, dir))) - L = locate(/obj/structure/lattice, get_step(src, dir)) - L.updateOverlays(src.loc) - ..() /obj/structure/lattice/ex_act(severity) switch(severity) if(1.0) qdel(src) - return if(2.0) qdel(src) - return - if(3.0) - return - else return /obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob) @@ -58,25 +47,5 @@ var/obj/item/weapon/weldingtool/WT = C if(WT.remove_fuel(0, user)) user << "Slicing lattice joints ..." - getFromPool(/obj/item/stack/rods, src.loc) + new /obj/item/stack/rods(src.loc) qdel(src) - - return - -/obj/structure/lattice/proc/updateOverlays() - //if(!(istype(src.loc, /turf/space))) - // qdel(src) - spawn(1) - overlays = list() - - var/dir_sum = 0 - - for (var/direction in cardinal) - if(locate(/obj/structure/lattice, get_step(src, direction))) - dir_sum += direction - else - if(!(istype(get_step(src, direction), /turf/space))) - dir_sum += direction - - icon_state = "lattice[dir_sum]" - return diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index e88ad682ed9..b272f50f2aa 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -69,7 +69,7 @@ var/datum/nano_module/appearance_changer/AC = ui_users[user] qdel(AC) ui_users.Cut() - ..() + return ..() // The following mirror is ~special~. /obj/structure/mirror/raider @@ -121,4 +121,4 @@ var/datum/nano_module/appearance_changer/AC = ui_users[user] qdel(AC) ui_users.Cut() - ..() \ No newline at end of file + return ..() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 58f89dc3fff..0b0b9860258 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -189,8 +189,8 @@ var/_wifi_id var/datum/wifi/receiver/button/crematorium/wifi_receiver -/obj/structure/crematorium/initialize() - ..() +/obj/structure/crematorium/Initialize() + . = ..() if(_wifi_id) wifi_receiver = new(_wifi_id, src) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 3647d565f7e..7d9978afbeb 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -7,7 +7,8 @@ anchored = 1 var/notices = 0 -/obj/structure/noticeboard/initialize() +/obj/structure/noticeboard/Initialize() + . = ..() for(var/obj/item/I in loc) if(notices > 4) break if(istype(I, /obj/item/weapon/paper)) diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 5615148fffd..86cbbc53d33 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -61,7 +61,7 @@ if(T) if(istype(T, /turf/simulated/floor)) T.blocks_air = 0 - ..() + return ..() //Airtight plastic flaps made for the kitchen freezer, blocks atmos but not movement @@ -81,7 +81,7 @@ if(T) if(istype(T, /turf/simulated/floor)) T.blocks_air = 0 - ..() + return ..() /obj/structure/plasticflaps/airtight/CanPass(atom/A, turf/T) - return 1//Blocks nothing except air \ No newline at end of file + return 1//Blocks nothing except air diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 33995539774..5c2cab0ac35 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -30,7 +30,8 @@ FLOOR SAFES tumbler_2_open = rand(0, 72) -/obj/structure/safe/initialize() +/obj/structure/safe/Initialize() + . = ..() for(var/obj/item/I in loc) if(space >= maxspace) return @@ -171,8 +172,8 @@ obj/structure/safe/ex_act(severity) level = 1 //underfloor layer = 2.5 -/obj/structure/safe/floor/initialize() - ..() +/obj/structure/safe/floor/Initialize() + . = ..() var/turf/T = loc if(istype(T) && !T.is_plating()) hide(1) @@ -188,11 +189,9 @@ obj/structure/safe/ex_act(severity) /obj/structure/safe/station name = "corporate safe" -/obj/structure/safe/station/New() - - ..() +/obj/structure/safe/station/Initialize() + . = ..() new /obj/random/highvalue(src) new /obj/random/highvalue(src) new /obj/random/highvalue(src) new /obj/random/highvalue(src) - return diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index 10fa149e8b4..3e162068f7a 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -42,7 +42,7 @@ /obj/structure/simple_door/Destroy() processing_objects -= src update_nearby_tiles() - ..() + return ..() /obj/structure/simple_door/get_material() return material @@ -196,4 +196,4 @@ ..(newloc, "wood") /obj/structure/simple_door/resin/New(var/newloc,var/material_name) - ..(newloc, "resin") \ No newline at end of file + ..(newloc, "resin") diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 669f88110e1..4dd8e8324dc 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -20,8 +20,8 @@ var/material/padding_material var/base_icon = "bed" -/obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material) - ..(newloc) +/obj/structure/bed/Initialize(mapload, var/new_material, var/new_padding_material) + . = ..() color = null if(!new_material) new_material = DEFAULT_WALL_MATERIAL diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index b91beabfaf8..e20bb734474 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -92,32 +92,32 @@ desc = "It's a chair. It looks comfy." icon_state = "comfychair_preview" -/obj/structure/bed/chair/comfy/brown/New(var/newloc,var/newmaterial) - ..(newloc,"steel","leather") +/obj/structure/bed/chair/comfy/brown/Initialize(mapload,var/newmaterial) + . = ..(mapload,"steel","leather") -/obj/structure/bed/chair/comfy/red/New(var/newloc,var/newmaterial) - ..(newloc,"steel","carpet") +/obj/structure/bed/chair/comfy/red/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","carpet") -/obj/structure/bed/chair/comfy/teal/New(var/newloc,var/newmaterial) - ..(newloc,"steel","teal") +/obj/structure/bed/chair/comfy/teal/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","teal") -/obj/structure/bed/chair/comfy/black/New(var/newloc,var/newmaterial) - ..(newloc,"steel","black") +/obj/structure/bed/chair/comfy/black/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","black") -/obj/structure/bed/chair/comfy/green/New(var/newloc,var/newmaterial) - ..(newloc,"steel","green") +/obj/structure/bed/chair/comfy/green/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","green") -/obj/structure/bed/chair/comfy/purp/New(var/newloc,var/newmaterial) - ..(newloc,"steel","purple") +/obj/structure/bed/chair/comfy/purp/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","purple") -/obj/structure/bed/chair/comfy/blue/New(var/newloc,var/newmaterial) - ..(newloc,"steel","blue") +/obj/structure/bed/chair/comfy/blue/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","blue") -/obj/structure/bed/chair/comfy/beige/New(var/newloc,var/newmaterial) - ..(newloc,"steel","beige") +/obj/structure/bed/chair/comfy/beige/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","beige") -/obj/structure/bed/chair/comfy/lime/New(var/newloc,var/newmaterial) - ..(newloc,"steel","lime") +/obj/structure/bed/chair/comfy/lime/Initialize(var/mapload,var/newmaterial) + . = ..(mapload,"steel","lime") /obj/structure/bed/chair/office anchored = 0 @@ -177,8 +177,14 @@ /obj/structure/bed/chair/office/dark icon_state = "officechair_dark" -/obj/structure/bed/chair/office/New() - ..() +/obj/structure/bed/chair/office/bridge + name = "command chair" + desc = "It exudes authority... and looks about as comfortable as a brick." + icon_state = "bridge" + anchored = 1 + +/obj/structure/bed/chair/office/Initialize() + . = ..() var/image/I = image(icon, "[icon_state]_over") I.layer = FLY_LAYER overlays += I @@ -197,11 +203,12 @@ return ..() -/obj/structure/bed/chair/wood/New(var/newloc) - ..(newloc, "wood") +/obj/structure/bed/chair/wood/Initialize(mapload) + . = ..(mapload, "wood") var/image/I = image(icon, "[icon_state]_over") I.layer = FLY_LAYER overlays += I /obj/structure/bed/chair/wood/wings icon_state = "wooden_chair_wings" + diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 0e7546f271d..9a632594479 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -11,26 +11,28 @@ var/list/oxytanks = list() //sorry for the similar var names var/list/platanks = list() - /obj/structure/dispenser/oxygen phorontanks = 0 /obj/structure/dispenser/phoron oxygentanks = 0 - -/obj/structure/dispenser/New() +/obj/structure/dispenser/Initialize() + . = ..() update_icon() - /obj/structure/dispenser/update_icon() - overlays.Cut() + cut_overlays() switch(oxygentanks) - if(1 to 3) overlays += "oxygen-[oxygentanks]" - if(4 to INFINITY) overlays += "oxygen-4" + if(1 to 3) + add_overlay("oxygen-[oxygentanks]") + if(4 to INFINITY) + add_overlay("oxygen-4") switch(phorontanks) - if(1 to 4) overlays += "phoron-[phorontanks]" - if(5 to INFINITY) overlays += "phoron-5" + if(1 to 4) + add_overlay("phoron-[phorontanks]") + if(5 to INFINITY) + add_overlay("phoron-5") /obj/structure/dispenser/attack_ai(mob/user as mob) if(user.Adjacent(src)) diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 47a2f53fb3f..41ad3f3cb6a 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -51,7 +51,7 @@ for(var/atom/movable/AM in contents) AM.loc = loc - ..() + return ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c7bc593fcad..4a8c794f441 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -182,17 +182,19 @@ spawn(50) if(src && on) ismist = 1 - mymist = getFromPool(/obj/effect/mist,loc) + mymist = new /obj/effect/mist(loc) else ismist = 1 - mymist = getFromPool(/obj/effect/mist,loc) + mymist = new /obj/effect/mist(loc) else if(ismist) ismist = 1 - mymist = getFromPool(/obj/effect/mist,loc) - spawn(250) - if(src && !on) - qdel(mymist) - ismist = 0 + mymist = new /obj/effect/mist(loc) + addtimer(CALLBACK(src, .proc/clear_mist), 250, TIMER_OVERRIDE) + +/obj/machinery/shower/proc/clear_mist() + if (!on) + QDEL_NULL(mymist) + ismist = FALSE /obj/machinery/shower/Crossed(atom/movable/O) ..() diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 83676aeb43d..76f1055ba0a 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -42,7 +42,7 @@ obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0) obj/structure/windoor_assembly/Destroy() density = 0 update_nearby_tiles() - ..() + return ..() /obj/structure/windoor_assembly/update_icon() icon_state = "[facing]_[secure]windoor_assembly[state]" @@ -80,7 +80,7 @@ obj/structure/windoor_assembly/Destroy() user << "You dissasembled the windoor assembly!" new /obj/item/stack/material/glass/reinforced(get_turf(src), 5) if(secure) - getFromPool(/obj/item/stack/rods, get_turf(src), 4) + new /obj/item/stack/rods(get_turf(src), 4) qdel(src) else user << "You need more welding fuel to dissassemble the windoor assembly." diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 262e9414378..c156582e6f5 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -91,15 +91,16 @@ index = 0 while(index < 2) new shardtype(loc) //todo pooling? - if(reinf) getFromPool(/obj/item/stack/rods, loc) + if(reinf) + new /obj/item/stack/rods(loc) index++ else new shardtype(loc) //todo pooling? - if(reinf) getFromPool(/obj/item/stack/rods, loc) + if(reinf) + new /obj/item/stack/rods(loc) qdel(src) return - /obj/structure/window/bullet_act(var/obj/item/projectile/Proj) var/proj_damage = Proj.get_structure_damage() @@ -325,8 +326,8 @@ update_nearby_tiles(need_rebuild=1) return -/obj/structure/window/New(Loc, start_dir=null, constructed=0) - ..() +/obj/structure/window/Initialize(mapload, start_dir = null, constructed=0) + . = ..() //player-constructed windows if (constructed) @@ -351,7 +352,7 @@ for(var/obj/structure/window/W in orange(location, 1)) W.update_icon() loc = location - ..() + return ..() /obj/structure/window/Move() diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm index 966d6e8e0e1..d904ed91e94 100644 --- a/code/game/objects/structures/window_spawner.dm +++ b/code/game/objects/structures/window_spawner.dm @@ -25,12 +25,15 @@ /obj/effect/wingrille_spawn/attack_generic() activate() -/obj/effect/wingrille_spawn/initialize() +/obj/effect/wingrille_spawn/Initialize(mapload) + if (!win_path) + return INITIALIZE_HINT_QDEL + ..() - if(!win_path) - return - if(ticker && ticker.current_state < GAME_STATE_PLAYING) - activate() + + activate() + + return INITIALIZE_HINT_LATEQDEL /obj/effect/wingrille_spawn/proc/activate() if(activated) return @@ -55,9 +58,6 @@ else neighbours |= other activated = 1 - for(var/obj/effect/wingrille_spawn/other in neighbours) - if(!other.activated) other.activate() - qdel(src) /obj/effect/wingrille_spawn/proc/handle_window_spawn(var/obj/structure/window/W) return diff --git a/code/game/periodic_news.dm b/code/game/periodic_news.dm index d9c96d992cc..a6ef3e49564 100644 --- a/code/game/periodic_news.dm +++ b/code/game/periodic_news.dm @@ -118,7 +118,7 @@ var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots) proc/process_newscaster() - check_for_newscaster_updates(ticker.mode.newscaster_announcements) + check_for_newscaster_updates(SSticker.mode.newscaster_announcements) var/global/tmp/announced_news_types = list() proc/check_for_newscaster_updates(type) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 2d7121ae1e1..48257198b1c 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -14,10 +14,7 @@ var/can_call_ert if(!holder) usr << "Only administrators may use this command." return - if(!ticker) - usr << "The game hasn't started yet!" - return - if(ticker.current_state == 1) + if(!ROUND_IS_STARTED) usr << "The round hasn't started yet!" return if(send_emergency_team) diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 6bd631e88f3..e3236f48c11 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -19,6 +19,12 @@ density = 1 anchored = 1.0 + CanPass(atom/movable/mover, turf/target, height, air_group) + if (!height || air_group) + return FALSE + else + return ..() + /obj/structure/shuttle/engine/heater name = "heater" icon_state = "heater" diff --git a/code/game/sound.dm b/code/game/sound.dm index 2838b934b7f..a4c20342206 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -183,9 +183,9 @@ var/const/FALLOFF_SOUNDS = 0.5 /client/proc/playtitlemusic() - if(!ticker || !ticker.login_music) return + if(!SSticker.login_music) return if(prefs.toggles & SOUND_LOBBY) - src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS + src << sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS /proc/get_rand_frequency() return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index d4af3d80e3f..dee50750ce1 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -1,5 +1,5 @@ //Config stuff -#define SUPPLY_DOCKZ 2 //Z-level of the Dock. +#define SUPPLY_DOCKZ 3 //Z-level of the Dock. #define SUPPLY_STATIONZ 1 //Z-level of the Station. #define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station #define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock @@ -7,22 +7,6 @@ //Supply packs are in /code/defines/obj/supplypacks.dm //Computers are in /code/game/machinery/computer/supply.dm -var/datum/controller/supply/supply_controller = new() - -var/list/mechtoys = list( - /obj/item/toy/prize/ripley, - /obj/item/toy/prize/fireripley, - /obj/item/toy/prize/deathripley, - /obj/item/toy/prize/gygax, - /obj/item/toy/prize/durand, - /obj/item/toy/prize/honk, - /obj/item/toy/prize/marauder, - /obj/item/toy/prize/seraph, - /obj/item/toy/prize/mauler, - /obj/item/toy/prize/odysseus, - /obj/item/toy/prize/phazon -) - /obj/item/weapon/paper/manifest name = "supply manifest" var/is_copy = 1 @@ -31,11 +15,13 @@ var/list/mechtoys = list( name = "Supply Shuttle" icon_state = "shuttle3" requires_power = 0 + station_area = 1 /area/supply/dock name = "Supply Shuttle" icon_state = "shuttle3" requires_power = 0 + centcomm_area = 1 /* @@ -53,168 +39,3 @@ var/list/mechtoys = list( var/datum/supply_packs/object = null var/orderedby = null var/comment = null - -/datum/controller/supply - //supply points - var/points = 50 - var/points_per_process = 1 - var/points_per_slip = 2 - var/points_per_crate = 5 - var/points_per_platinum = 5 // 5 points per sheet - var/points_per_phoron = 5 - //control - var/ordernum - var/list/shoppinglist = list() - var/list/requestlist = list() - var/list/supply_packs = list() - //shuttle movement - var/movetime = 1200 - var/datum/shuttle/ferry/supply/shuttle - - New() - ordernum = rand(1,9000) - - for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) - var/datum/supply_packs/P = new typepath() - supply_packs[P.name] = P - - // Supply shuttle ticker - handles supply point regeneration - // This is called by the process scheduler every thirty seconds - proc/process() - points += points_per_process - - //To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types. - proc/forbidden_atoms_check(atom/A) - if(istype(A,/mob/living)) - return 1 - if(istype(A,/obj/item/weapon/disk/nuclear)) - return 1 - if(istype(A,/obj/machinery/nuclearbomb)) - return 1 - if(istype(A,/obj/item/device/radio/beacon)) - return 1 - - for(var/i=1, i<=A.contents.len, i++) - var/atom/B = A.contents[i] - if(.(B)) - return 1 - - //Sellin - proc/sell() - var/area/area_shuttle = shuttle.get_location_area() - if(!area_shuttle) return - - var/phoron_count = 0 - var/plat_count = 0 - - for(var/atom/movable/MA in area_shuttle) - if(MA.anchored) continue - - // Must be in a crate! - if(istype(MA,/obj/structure/closet/crate)) - callHook("sell_crate", list(MA, area_shuttle)) - - points += points_per_crate - var/find_slip = 1 - - for(var/atom in MA) - // Sell manifests - var/atom/A = atom - if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) - var/obj/item/weapon/paper/manifest/slip = A - if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense - points += points_per_slip - find_slip = 0 - continue - - // Sell phoron and platinum - if(istype(A, /obj/item/stack)) - var/obj/item/stack/P = A - switch(P.get_material_name()) - if("phoron") phoron_count += P.get_amount() - if("platinum") plat_count += P.get_amount() - qdel(MA) - - if(phoron_count) - points += phoron_count * points_per_phoron - - if(plat_count) - points += plat_count * points_per_platinum - - //Buyin - proc/buy() - if(!shoppinglist.len) return - - var/area/area_shuttle = shuttle.get_location_area() - if(!area_shuttle) return - - var/list/clear_turfs = list() - - for(var/turf/T in area_shuttle) - if(T.density) continue - var/contcount - for(var/atom/A in T.contents) - if(!A.simulated) - continue - contcount++ - if(contcount) - continue - clear_turfs += T - - for(var/S in shoppinglist) - if(!clear_turfs.len) break - var/i = rand(1,clear_turfs.len) - var/turf/pickedloc = clear_turfs[i] - clear_turfs.Cut(i,i+1) - - var/datum/supply_order/SO = S - var/datum/supply_packs/SP = SO.object - - var/obj/A = new SP.containertype(pickedloc) - A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" - - //supply manifest generation begin - - var/obj/item/weapon/paper/manifest/slip - if(!SP.contraband) - slip = new /obj/item/weapon/paper/manifest(A) - slip.is_copy = 0 - slip.info = "

[command_name()] Shipping Manifest



" - slip.info +="Order #[SO.ordernum]
" - slip.info +="Destination: [station_name]
" - slip.info +="[shoppinglist.len] PACKAGES IN THIS SHIPMENT
" - slip.info +="CONTENTS:
    " - - //spawn the stuff, finish generating the manifest while you're at it - if(SP.access) - if(isnum(SP.access)) - A.req_access = list(SP.access) - else if(islist(SP.access)) - var/list/L = SP.access // access var is a plain var, we need a list - A.req_access = L.Copy() - else - world << "Supply pack with invalid access restriction [SP.access] encountered!" - - var/list/contains - if(istype(SP,/datum/supply_packs/randomised)) - var/datum/supply_packs/randomised/SPR = SP - contains = list() - if(SPR.contains.len) - for(var/j=1,j<=SPR.num_contained,j++) - contains += pick(SPR.contains) - else - contains = SP.contains - - for(var/typepath in contains) - if(!typepath) continue - var/atom/B2 = new typepath(A) - if(SP.amount && B2:amount) B2:amount = SP.amount - if(slip) slip.info += "
  • [B2.name]
  • " //add the item to the manifest - - //manifest finalisation - if(slip) - slip.info += "

" - slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" - - shoppinglist.Cut() - return diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index e08eb8ab5de..244492f7063 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -184,3 +184,15 @@ var/list/flooring_types has_damage_range = 6 flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK can_paint = null + +/decl/flooring/reinforced/ramp + name = "foot ramp" + desc = "An archaic means of locomotion along the Z axis." + icon = 'icons/turf/flooring/tiles.dmi' + icon_base = "ramptop" + build_type = null + flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK + can_paint = 1 + +/decl/flooring/reinforced/ramp/bottom + icon_base = "rampbot" \ No newline at end of file diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 66434456f92..ba9a9794316 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -9,13 +9,7 @@ var/list/floor_decals = list() layer = TURF_LAYER + 0.01 var/supplied_dir -/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour) - supplied_dir = newdir - if(newcolour) color = newcolour - ..(newloc) - -/obj/effect/floor_decal/initialize() - if(supplied_dir) set_dir(supplied_dir) +/obj/effect/floor_decal/LateInitialize() var/turf/T = get_turf(src) if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor)) var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[layer]" @@ -27,20 +21,36 @@ var/list/floor_decals = list() floor_decals[cache_key] = I if(!T.decals) T.decals = list() T.decals |= floor_decals[cache_key] - T.overlays |= floor_decals[cache_key] + T.add_overlay(floor_decals[cache_key]) + qdel(src) - return + +/obj/effect/floor_decal/Initialize(mapload, var/newdir, var/newcolour, bypass = FALSE) + if (bypass && !mapload) + return ..(mapload) + + if (newdir) + supplied_dir = newdir + + if(newcolour) + color = newcolour + + if (supplied_dir) + set_dir(supplied_dir) + + ..() + return INITIALIZE_HINT_LATELOAD /obj/effect/floor_decal/reset name = "reset marker" -/obj/effect/floor_decal/reset/initialize() +/obj/effect/floor_decal/reset/Initialize(mapload) + ..(mapload, bypass = TRUE) var/turf/T = get_turf(src) - if(T.decals && T.decals.len) + if(LAZYLEN(T.decals)) T.decals.Cut() T.update_icon() qdel(src) - return /obj/effect/floor_decal/corner icon_state = "corner_white" @@ -287,9 +297,9 @@ var/list/floor_decals = list() name = "random asteroid rubble" icon_state = "asteroid0" -/obj/effect/floor_decal/asteroid/New() - icon_state = "asteroid[rand(0,9)]" +/obj/effect/floor_decal/asteroid/Initialize() ..() + icon_state = "asteroid[rand(0,9)]" /obj/effect/floor_decal/chapel name = "chapel" @@ -391,4 +401,4 @@ var/list/floor_decals = list() icon_state = "white_v" /obj/effect/floor_decal/sign/p - icon_state = "white_p" \ No newline at end of file + icon_state = "white_p" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index 33b54cc38bc..38d2f6fc846 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -78,10 +78,10 @@ oxygen = 0 nitrogen = 0 -/turf/simulated/floor/reinforced/n20/New() - ..() - sleep(-1) - if(!air) make_air() +/turf/simulated/floor/reinforced/n20/Initialize() + . = ..() + if(!air) + make_air() air.adjust_gas("sleeping_agent", ATMOSTANK_NITROUSOXIDE) /turf/simulated/floor/cult @@ -130,6 +130,18 @@ icon_state = "freezer" initial_flooring = /decl/flooring/tiling/freezer +/turf/simulated/floor/tiled/ramp + name = "foot ramp" + icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "ramptop" + initial_flooring = /decl/flooring/reinforced/ramp + +/turf/simulated/floor/tiled/ramp/bottom + name = "foot ramp" + icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "rampbot" + initial_flooring = /decl/flooring/reinforced/ramp/bottom + /turf/simulated/floor/lino name = "lino" icon = 'icons/turf/flooring/linoleum.dmi' @@ -215,6 +227,6 @@ /turf/simulated/floor/beach/water/ocean icon_state = "seadeep" -/turf/simulated/floor/beach/water/New() - ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1) +/turf/simulated/floor/beach/water/Initialize() + . = ..() + add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)) diff --git a/code/game/turfs/initialization/init.dm b/code/game/turfs/initialization/init.dm index eda55c47ae9..d5e6d17cb64 100644 --- a/code/game/turfs/initialization/init.dm +++ b/code/game/turfs/initialization/init.dm @@ -4,9 +4,9 @@ /area var/datum/turf_initializer/turf_initializer = null -/area/initialize() - ..() - for(var/turf/simulated/T in src) - T.initialize() +/area/Initialize(mapload) + . = ..() + if (mapload) if(turf_initializer) - turf_initializer.initialize(T) + for(var/turf/T in src) + turf_initializer.initialize(T) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 977d25059b5..3075b0e4c30 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -14,7 +14,8 @@ var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to var/dirt = 0 -// This is not great. + var/unwet_timer // Used to keep track of the unwet timer & delete it on turf change so we don't runtime if the new turf is not simulated. + /turf/simulated/proc/wet_floor(var/wet_val = 1) if(wet_val < wet) return @@ -22,33 +23,32 @@ if(!wet) wet = wet_val wet_overlay = image('icons/effects/water.dmi',src,"wet_floor") - overlays += wet_overlay + add_overlay(wet_overlay, TRUE) - schedule_task_with_source_in(180 SECONDS, src, .proc/unwet_floor) + unwet_timer = addtimer(CALLBACK(src, .proc/unwet_floor), 120 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) /turf/simulated/proc/unwet_floor() --wet if (wet < 1) wet = 0 if(wet_overlay) - overlays -= wet_overlay + cut_overlay(wet_overlay, TRUE) wet_overlay = null else - schedule_task_with_source_in(180 SECONDS, src, .proc/unwet_floor) + unwet_timer = addtimer(CALLBACK(src, .proc/unwet_floor), 120 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) /turf/simulated/clean_blood() for(var/obj/effect/decal/cleanable/blood/B in contents) B.clean_blood() ..() -/turf/simulated/New() - ..() - if(istype(loc, /area/chapel)) - holy = 1 - levelupdate() - -/turf/simulated/proc/initialize() - return +/turf/simulated/Initialize(mapload) + if (mapload) + if(istype(loc, /area/chapel)) + holy = 1 + + . = ..() + levelupdate(mapload) /turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src @@ -161,3 +161,17 @@ this.blood_DNA["UNKNOWN BLOOD"] = "X*" else if( istype(M, /mob/living/silicon/robot )) new /obj/effect/decal/cleanable/blood/oil(src) + +/turf/simulated/Destroy() + //Yeah, we're just going to rebuild the whole thing. + //Despite this being called a bunch during explosions, + //the zone will only really do heavy lifting once. + if (zone) + zone.rebuild() + + // Letting this timer continue to exist can cause runtimes, so we delete it. + if (unwet_timer) + // deltimer will no-op if the timer is already deleted, so we don't need to check the timer still exists. + deltimer(unwet_timer) + + return ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index df3be0077f5..9090a743f27 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -26,8 +26,8 @@ /turf/simulated/floor/is_plating() return !flooring -/turf/simulated/floor/New(var/newloc, var/floortype) - ..(newloc) +/turf/simulated/floor/Initialize(mapload, var/floortype) + . = ..() if(!floortype && initial_flooring) floortype = initial_flooring if(floortype) @@ -43,7 +43,7 @@ //This proc auto corrects the grass tiles' siding. /turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update) - overlays.Cut() + cut_overlays() if(islist(decals)) decals.Cut() decals = null diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index cdde744bd45..c79478dda52 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -1,6 +1,7 @@ var/list/flooring_cache = list() /turf/simulated/floor/update_icon(var/update_neighbors) + cut_overlays() if(lava) return @@ -20,24 +21,23 @@ var/list/flooring_cache = list() flooring_override = icon_state // Apply edges, corners, and inner corners. - overlays.Cut() var/has_border = 0 if(flooring.flags & TURF_HAS_EDGES) for(var/step_dir in cardinal) var/turf/simulated/floor/T = get_step(src, step_dir) if(!istype(T) || !T.flooring || T.flooring.name != flooring.name) has_border |= step_dir - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir)) // There has to be a concise numerical way to do this but I am too noob. if((has_border & NORTH) && (has_border & EAST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST)) if((has_border & NORTH) && (has_border & WEST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST)) if((has_border & SOUTH) && (has_border & EAST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST)) if((has_border & SOUTH) && (has_border & WEST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST)) if(flooring.flags & TURF_HAS_CORNERS) // As above re: concise numerical way to do this. @@ -45,32 +45,32 @@ var/list/flooring_cache = list() if(!(has_border & EAST)) var/turf/simulated/floor/T = get_step(src, NORTHEAST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST)) if(!(has_border & WEST)) var/turf/simulated/floor/T = get_step(src, NORTHWEST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST)) if(!(has_border & SOUTH)) if(!(has_border & EAST)) var/turf/simulated/floor/T = get_step(src, SOUTHEAST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST)) if(!(has_border & WEST)) var/turf/simulated/floor/T = get_step(src, SOUTHWEST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)) - if(decals && decals.len) - overlays |= decals + if(LAZYLEN(decals)) + add_overlay(decals) if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo icon = 'icons/turf/flooring/plating.dmi' icon_state = "dmg[rand(1,4)]" else if(flooring) if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK)) - overlays |= get_flooring_overlay("[flooring.icon_base]-broken-[broken]","[flooring.icon_base]_broken[broken]") + add_overlay(get_flooring_overlay("[flooring.icon_base]-broken-[broken]","[flooring.icon_base]_broken[broken]")) if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) - overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]") + add_overlay(get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]")) if(update_neighbors) for(var/turf/simulated/floor/F in range(src, 1)) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index a96acc7d395..ed93bc3da93 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -129,14 +129,14 @@ thermitemelt(user) return - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) thermitemelt(user) return else if( istype(W, /obj/item/weapon/melee/energy/blade) ) var/obj/item/weapon/melee/energy/blade/EB = W - EB.spark_system.queue() + spark(EB, 5) user << "You slash \the [src] with \the [EB]; the thermite ignites!" playsound(src, "sparks", 50, 1) playsound(src, 'sound/weapons/blade1.ogg', 50, 1) @@ -271,7 +271,7 @@ else user << "You need more welding fuel to complete this task." return - else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + else if (istype(W, /obj/item/weapon/gun/energy/plasmacutter)) cut_cover = 1 if(cut_cover) user << "You begin slicing through the metal cover." @@ -311,7 +311,7 @@ else user << "You need more welding fuel to complete this task." return - else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) cut_cover = 1 if(cut_cover) user << "You begin slicing through the support rods." diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm index dc7874b2aaf..7852ebef3e3 100644 --- a/code/game/turfs/simulated/wall_icon.dm +++ b/code/game/turfs/simulated/wall_icon.dm @@ -42,36 +42,37 @@ if(!damage_overlays[1]) //list hasn't been populated generate_overlays() - overlays.Cut() + cut_overlays() + var/list/overlays_to_add = list() var/image/I if(!density) I = image('icons/turf/wall_masks.dmi', "[material.icon_base]fwall_open") I.color = material.icon_colour - overlays += I + add_overlay(I) return for(var/i = 1 to 4) I = image('icons/turf/wall_masks.dmi', "[material.icon_base][wall_connections[i]]", dir = 1<<(i-1)) I.color = material.icon_colour - overlays += I + overlays_to_add += I if(reinf_material) if(construction_stage != null && construction_stage < 6) I = image('icons/turf/wall_masks.dmi', "reinf_construct-[construction_stage]") I.color = reinf_material.icon_colour - overlays += I + overlays_to_add += I else if("[reinf_material.icon_reinf]0" in icon_states('icons/turf/wall_masks.dmi')) // Directional icon for(var/i = 1 to 4) I = image('icons/turf/wall_masks.dmi', "[reinf_material.icon_reinf][wall_connections[i]]", dir = 1<<(i-1)) I.color = reinf_material.icon_colour - overlays += I + overlays_to_add += I else I = image('icons/turf/wall_masks.dmi', reinf_material.icon_reinf) I.color = reinf_material.icon_colour - overlays += I + overlays_to_add += I if(damage != 0) var/integrity = material.integrity @@ -82,8 +83,9 @@ if(overlay > damage_overlays.len) overlay = damage_overlays.len - overlays += damage_overlays[overlay] - return + overlays_to_add += damage_overlays[overlay] + + add_overlay(overlays_to_add) /turf/simulated/wall/proc/generate_overlays() var/alpha_inc = 256 / damage_overlays.len diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 46498d9be56..3b5f0246fae 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -1,45 +1,68 @@ /turf/simulated/wall/r_wall icon_state = "rgeneric" -/turf/simulated/wall/r_wall/New(var/newloc) - ..(newloc, "plasteel","plasteel") //3strong + +/turf/simulated/wall/r_wall/Initialize(mapload) + . = ..(mapload, "plasteel","plasteel") //3strong /turf/simulated/wall/cult icon_state = "cult" -/turf/simulated/wall/cult/New(var/newloc) - ..(newloc,"cult","cult2") + +/turf/simulated/wall/cult/Initialize(mapload) + . = ..(mapload,"cult","cult2") + /turf/unsimulated/wall/cult name = "cult wall" desc = "Hideous images dance beneath the surface." - icon = 'icons/turf/wall_masks.dmi' + icon = 'icons/turf/smooth/cult_wall.dmi' + canSmoothWith = null + smooth = SMOOTH_TRUE icon_state = "cult" -/turf/simulated/wall/iron/New(var/newloc) - ..(newloc,"iron") -/turf/simulated/wall/uranium/New(var/newloc) - ..(newloc,"uranium") -/turf/simulated/wall/diamond/New(var/newloc) - ..(newloc,"diamond") -/turf/simulated/wall/gold/New(var/newloc) - ..(newloc,"gold") -/turf/simulated/wall/silver/New(var/newloc) - ..(newloc,"silver") -/turf/simulated/wall/phoron/New(var/newloc) - ..(newloc,"phoron") -/turf/simulated/wall/sandstone/New(var/newloc) - ..(newloc,"sandstone") -/turf/simulated/wall/ironphoron/New(var/newloc) - ..(newloc,"iron","phoron") -/turf/simulated/wall/golddiamond/New(var/newloc) - ..(newloc,"gold","diamond") -/turf/simulated/wall/silvergold/New(var/newloc) - ..(newloc,"silver","gold") -/turf/simulated/wall/sandstonediamond/New(var/newloc) - ..(newloc,"sandstone","diamond") +/turf/simulated/wall/rusty + icon_state = "arust" + desc = "Rust stains this ancient wall." +/turf/simulated/wall/rusty/Initialize(mapload) + ..(mapload,"rust","rust") + +/turf/simulated/wall/iron/Initialize(mapload) + . = ..(mapload,"iron") + +/turf/simulated/wall/uranium/Initialize(mapload) + . = ..(mapload,"uranium") + +/turf/simulated/wall/diamond/Initialize(mapload) + . = ..(mapload,"diamond") + +/turf/simulated/wall/gold/Initialize(mapload) + . = ..(mapload,"gold") + +/turf/simulated/wall/silver/Initialize(mapload) + . = ..(mapload,"silver") + +/turf/simulated/wall/phoron/Initialize(mapload) + . = ..(mapload,"phoron") + +/turf/simulated/wall/sandstone/Initialize(mapload) + . = ..(mapload,"sandstone") + +/turf/simulated/wall/ironphoron/Initialize(mapload) + . = ..(mapload,"iron","phoron") + +/turf/simulated/wall/golddiamond/Initialize(mapload) + . = ..(mapload,"gold","diamond") + +/turf/simulated/wall/silvergold/Initialize(mapload) + . = ..(mapload,"silver","gold") + +/turf/simulated/wall/sandstonediamond/Initialize(mapload) + . = ..(mapload,"sandstone","diamond") // Kind of wondering if this is going to bite me in the butt. -/turf/simulated/wall/voxshuttle/New(var/newloc) - ..(newloc,"voxalloy") +/turf/simulated/wall/voxshuttle/Initialize(mapload) + . = ..(mapload,"voxalloy") + /turf/simulated/wall/voxshuttle/attackby() return -/turf/simulated/wall/titanium/New(var/newloc) - ..(newloc,"titanium") + +/turf/simulated/wall/titanium/Initialize(mapload) + . = ..(mapload,"titanium") diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 8c79f20403c..159865778a8 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -22,12 +22,14 @@ var/list/wall_connections = list("0", "0", "0", "0") // Walls always hide the stuff below them. -/turf/simulated/wall/levelupdate() +/turf/simulated/wall/levelupdate(mapload) + if (mapload) + return // Don't hide stuff during mapload. for(var/obj/O in src) O.hide(1) -/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype) - ..(newloc) +/turf/simulated/wall/Initialize(mapload, var/materialtype, var/rmaterialtype) + . = ..() icon_state = "blank" if(!materialtype) materialtype = DEFAULT_WALL_MATERIAL @@ -36,17 +38,18 @@ reinf_material = get_material_by_name(rmaterialtype) update_material() - processing_turfs |= src + if (material.radioactivity || (reinf_material && reinf_material.radioactivity)) + START_PROCESSING(SSprocessing, src) /turf/simulated/wall/Destroy() - processing_turfs -= src - dismantle_wall(null,null,1) - ..() + STOP_PROCESSING(SSprocessing, src) + dismantle_wall(null, null, TRUE, TRUE) + return ..() /turf/simulated/wall/process() // Calling parent will kill processing if(!radiate()) - return PROCESS_KILL + STOP_PROCESSING(SSprocessing, src) /turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) if(istype(Proj,/obj/item/projectile/beam)) @@ -154,9 +157,10 @@ return ..() -/turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product) - - playsound(src, 'sound/items/Welder.ogg', 100, 1) +/turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product, var/no_change = FALSE) + if (!no_change) // No change is TRUE when this is called by destroy. + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(!no_product) if(reinf_material) reinf_material.place_dismantled_girder(src, reinf_material) @@ -176,7 +180,8 @@ reinf_material = null update_connections(1) - ChangeTurf(/turf/simulated/floor/plating) + if (!no_change) + ChangeTurf(/turf/simulated/floor/plating) /turf/simulated/wall/ex_act(severity) switch(severity) @@ -225,11 +230,7 @@ F.icon_state = "wall_thermite" user << "The thermite starts melting through the wall." - spawn(100) - if(O) - qdel(O) -// F.sd_LumReset() //TODO: ~Carn - return + QDEL_IN(O, 100) /turf/simulated/wall/proc/radiate() var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 617704a667e..f1d162b30b1 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -10,17 +10,46 @@ temperature = T20C thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT -// heat_capacity = 700000 No. -/turf/space/New() + var/static/list/dust_cache + +// heat_capacity = 700000 No. + is_hole = TRUE + +/turf/space/proc/build_dust_cache() + LAZYINITLIST(dust_cache) + for (var/i in 0 to 25) + var/image/im = image('icons/turf/space_parallax1.dmi',"[i]") + im.plane = PLANE_SPACE_DUST + im.alpha = 80 + im.blend_mode = BLEND_ADD + dust_cache["[i]"] = im + +// Copypaste of parent for performance. +/turf/space/Initialize() icon_state = "[((x + y) ^ ~(x * y) + z) % 25]" - var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]") - I.plane = PLANE_SPACE_DUST - I.alpha = 80 - I.blend_mode = BLEND_ADD - overlays += I + if (!dust_cache) + build_dust_cache() + + add_overlay(dust_cache[icon_state]) update_starlight() - ..() + + if (initialized) + crash_with("Warning: [src]([type]) initialized multiple times!") + + initialized = TRUE + + for(var/atom/movable/AM as mob|obj in src) + src.Entered(AM) + + turfs += src + + if(dynamic_lighting) + luminosity = 0 + else + luminosity = 1 + + return INITIALIZE_HINT_NORMAL /turf/space/is_space() return 1 @@ -31,14 +60,15 @@ O.hide(0) /turf/space/proc/update_starlight() - if(!config.starlight) - return + if(config.starlight) + for (var/T in RANGE_TURFS(1, src)) + if (istype(T, /turf/space)) + continue - for (var/T in RANGE_TURFS(1, src)) - if (istype(T, /turf/space)) - continue + set_light(config.starlight) + return - set_light(config.starlight) + set_light(0) /turf/space/attackby(obj/item/C as obj, mob/user as mob) @@ -80,7 +110,7 @@ inertial_drift(A) - if(ticker && ticker.mode) + if(SSticker.mode) // Okay, so let's make it so that people can travel z levels but not nuke disks! // if(ticker.mode.name == "mercenary") return diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index ec46a81207d..fc54594dfd3 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -2,8 +2,10 @@ var/pushdirection // push things that get caught in the transit tile this direction plane = 0 -/turf/space/transit/New() +/turf/space/transit/Initialize() update_icon() + initialized = TRUE + return INITIALIZE_HINT_NORMAL /turf/space/transit/update_icon() icon_state = "" diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index fb8ab56af28..a0d5285e3d9 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -26,25 +26,45 @@ var/list/decals -/turf/New() - ..() + var/is_hole // If true, turf will be treated as space or a hole + var/turf/baseturf = /turf/space + +// Parent code is duplicated in here instead of ..() for performance reasons. +/turf/Initialize() + if (initialized) + crash_with("Warning: [src]([type]) initialized multiple times!") + + initialized = TRUE + for(var/atom/movable/AM as mob|obj in src) - spawn( 0 ) - src.Entered(AM) - return - turfs |= src + Entered(AM) + + turfs += src if(dynamic_lighting) luminosity = 0 else luminosity = 1 -/turf/proc/update_icon() - return + if (smooth) + queue_smooth(src) + + if (light_power && light_range) + update_light() + + if (opacity) + has_opaque_atom = TRUE + + return INITIALIZE_HINT_NORMAL /turf/Destroy() + if (!changing_turf) + crash_with("Improper turf qdeletion.") + + changing_turf = FALSE turfs -= src ..() + return QDEL_HINT_IWILLGC /turf/ex_act(severity) return 0 @@ -164,7 +184,7 @@ var/const/enterloopsanity = 100 if(!(A.last_move)) return if((istype(A, /mob/) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1))) var/mob/M = A - if(M.Process_Spacemove(1)) + if(M.Allow_Spacemove(1)) M.inertia_dir = 0 return spawn(5) @@ -211,8 +231,8 @@ var/const/enterloopsanity = 100 L.Add(t) return L -/turf/proc/process() - return PROCESS_KILL +/turf/process() + STOP_PROCESSING(SSprocessing, src) /turf/proc/contains_dense_objects() if(density) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 87a4e96282b..9c533083b40 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -1,3 +1,6 @@ +/turf + var/tmp/changing_turf + /turf/proc/ReplaceWithLattice() src.ChangeTurf(get_base_turf_by_area(src)) spawn() @@ -8,6 +11,12 @@ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) if(L) qdel(L) +// Called after turf replaces old one +/turf/proc/post_change() + levelupdate() + var/turf/simulated/open/T = GetAbove(src) + if(istype(T)) + T.update_icon() //Creates a new turf /turf/proc/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0) @@ -17,75 +26,68 @@ // This makes sure that turfs are not changed to space when one side is part of a zone if(N == /turf/space) var/turf/below = GetBelow(src) - if(istype(below) && (air_master.has_valid_zone(below) || air_master.has_valid_zone(src))) - N = /turf/simulated/open + if(istype(below) && !istype(below,/turf/space)) + N = below.density ? /turf/simulated/floor/airless : /turf/simulated/open var/obj/fire/old_fire = fire - var/old_opacity = opacity - var/old_dynamic_lighting = dynamic_lighting - var/list/old_affecting_lights = affecting_lights - var/old_lighting_overlay = lighting_overlay - var/list/old_corners = corners + var/old_baseturf = baseturf - //world << "Replacing [src.type] with [N]" +// log_debug("Replacing [src.type] with [N]") - if(connections) connections.erase_all() + changing_turf = TRUE - if(istype(src,/turf/simulated)) - //Yeah, we're just going to rebuild the whole thing. - //Despite this being called a bunch during explosions, - //the zone will only really do heavy lifting once. - var/turf/simulated/S = src - if(S.zone) S.zone.rebuild() + if(connections) + connections.erase_all() - if(ispath(N, /turf/simulated/floor)) - var/turf/simulated/W = new N( locate(src.x, src.y, src.z) ) + cut_overlays() + underlays.Cut() + + // So we call destroy. + qdel(src) + + var/turf/simulated/W = new N( locate(src.x, src.y, src.z) ) + + if(ispath(N, /turf/simulated)) if(old_fire) fire = old_fire - if (istype(W,/turf/simulated/floor)) W.RemoveLattice() + else if(old_fire) + old_fire.RemoveFire() - if(tell_universe) - universe.OnTurfChange(W) + if(tell_universe) + universe.OnTurfChange(W) - if(air_master) - air_master.mark_for_update(src) //handle the addition of the new turf. + SSair.mark_for_update(src) //handle the addition of the new turf. - for(var/turf/space/S in range(W,1)) - S.update_starlight() + W.baseturf = old_baseturf - W.levelupdate() - . = W + W.post_change() + + . = W - else + queue_smooth(src) + queue_smooth_neighbors(src) - var/turf/W = new N( locate(src.x, src.y, src.z) ) +/turf/proc/transport_properties_from(turf/other) + if(!istype(other, src.type)) + return 0 - if(old_fire) - old_fire.RemoveFire() + src.set_dir(other.dir) + src.icon_state = other.icon_state + src.icon = other.icon + src.overlays = other.overlays.Copy() + src.underlays = other.underlays.Copy() + return 1 - if(tell_universe) - universe.OnTurfChange(W) +//I would name this copy_from() but we remove the other turf from their air zone for some reason +/turf/simulated/transport_properties_from(turf/simulated/other) + if(!..()) + return 0 - if(air_master) - air_master.mark_for_update(src) - - for(var/turf/space/S in range(W,1)) - S.update_starlight() - - W.levelupdate() - . = W - - recalc_atom_opacity() - - lighting_overlay = old_lighting_overlay - affecting_lights = old_affecting_lights - corners = old_corners - if(dynamic_lighting != old_dynamic_lighting) - if(dynamic_lighting) - lighting_build_overlay() - else - lighting_clear_overlay() - if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update) - force_update_lights() + if(other.zone) + if(!src.air) + src.make_air() + src.air.copy_from(other.zone.air) + other.zone.remove(other) + return 1 diff --git a/code/game/turfs/turf_flick_animations.dm b/code/game/turfs/turf_flick_animations.dm index fae622460a0..76c9667699d 100644 --- a/code/game/turfs/turf_flick_animations.dm +++ b/code/game/turfs/turf_flick_animations.dm @@ -1,11 +1,12 @@ /proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num) + set waitfor = FALSE //This proc throws up either an icon or an animation for a specified amount of time. //The variables should be apparent enough. if(!location && target) location = get_turf(target) if(location && !target) target = location - var/atom/movable/overlay/animation = getFromPool(/atom/movable/overlay, location) + var/atom/movable/overlay/animation = new(location) if(direction) animation.set_dir(direction) animation.icon = a_icon @@ -16,5 +17,5 @@ animation.icon_state = "blank" animation.master = target flick(flick_anim, animation) - spawn(max(sleeptime, 15)) - qdel(animation) + + QDEL_IN(animation, max(sleeptime, 15)) diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index 468e9f9d6ca..7f697ba6ca1 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -19,6 +19,6 @@ icon_state = "water" footstep_sound = "waterstep" -/turf/unsimulated/beach/water/New() - ..() +/turf/unsimulated/beach/water/Initialize() + . = ..() overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1) diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index a465edaf518..0a7b241380c 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -1,6 +1,6 @@ /turf/unsimulated/floor name = "floor" - icon = 'icons/turf/floors.dmi' + icon = 'icons/turf/total_floors.dmi' icon_state = "Floor3" /turf/unsimulated/floor/xmas @@ -13,3 +13,30 @@ name = "mask" icon = 'icons/turf/walls.dmi' icon_state = "rockvault" + +/turf/unsimulated/mask/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0) + if (!N) + return + + new N(src) + +/turf/unsimulated/chasm_mask + name = "chasm mask" + icon = 'icons/turf/walls.dmi' + icon_state = "alienvault" + oxygen = 0 + nitrogen = 0 + temperature = TCMB + + +// It's a placeholder turf, don't do anything special. +// These shouldn't exist by the time SSatoms runs. +/turf/unsimulated/mask/New() + return + +/turf/unsimulated/mask/Initialize() + initialized = TRUE + return + +/turf/unsimulated/chasm_mask/New() + return diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm index 12d4d3fadc3..3cc021811f1 100644 --- a/code/game/turfs/unsimulated/walls.dm +++ b/code/game/turfs/unsimulated/walls.dm @@ -7,8 +7,27 @@ /turf/unsimulated/wall/fakeglass name = "window" + icon = 'icons/turf/walls.dmi' icon_state = "fakewindows" opacity = 0 /turf/unsimulated/wall/other - icon_state = "r_wall" \ No newline at end of file + icon = 'icons/turf/walls.dmi' + icon_state = "r_wall" + +// pretty much just a prettier /turf/unsimulated/wall +/turf/unsimulated/wall/riveted + icon = 'icons/turf/smooth/riveted.dmi' + icon_state = "riveted" + smooth = SMOOTH_TRUE + canSmoothWith = list( + /turf/unsimulated/wall/riveted, + /obj/machinery/door/airlock/centcom, + /turf/unsimulated/wall/fakepdoor + ) + +/turf/unsimulated/wall/fakepdoor + icon = 'icons/obj/doors/rapid_pdoor.dmi' + icon_state = "pdoor1" + name = "blast door" + desc = "That looks like it doesn't open easily." diff --git a/code/global.dm b/code/global.dm index 0be6248f484..561da51effa 100644 --- a/code/global.dm +++ b/code/global.dm @@ -1,6 +1,6 @@ //#define TESTING -#if DM_VERSION < 506 -#warn This compiler is out of date. You may experience issues with projectile animations. +#if DM_VERSION < 510 +#error Your version of BYOND is too old to compile the code. At least BYOND 510 is required. #endif @@ -9,9 +9,7 @@ var/global/datum/datacore/data_core = null var/global/list/all_areas = list() var/global/list/machines = list() var/global/list/processing_objects = list() -var/global/list/processing_modifiers = list() var/global/list/processing_power_items = list() -var/global/list/active_diseases = list() var/global/list/med_hud_users = list() // List of all entities using a medical HUD. var/global/list/sec_hud_users = list() // List of all entities using a security HUD. var/global/list/hud_icon_reference = list() @@ -34,11 +32,11 @@ var/diary = null var/diary_runtime = null var/diary_date_string = null var/href_logfile = null -var/station_name = "NSS Exodus" -var/station_short = "Exodus" +var/station_name = "NSS Aurora II" +var/station_short = "Aurora" var/const/dock_name = "NTCC Odin" var/const/boss_name = "Central Command" -var/const/boss_short = "Centcomm" +var/const/boss_short = "Centcom" var/const/company_name = "NanoTrasen" var/const/company_short = "NT" var/game_version = "Aurorastation" @@ -89,7 +87,6 @@ var/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir ) var/datum/configuration/config = null -var/datum/sun/sun = null var/list/combatlog = list() var/list/IClog = list() @@ -122,16 +119,21 @@ var/custom_event_msg = null // Ideally, the connection dies when the server restarts (After feedback logging.). var/DBConnection/dbcon -// Reference list for disposal sort junctions. Filled up by sorting junction's New() -/var/list/tagger_locations = list() - // Added for Xenoarchaeology, might be useful for other stuff. var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") // Used by robots and robot preferences. var/list/robot_module_types = list( - "Standard", "Engineering", "Construction", "Medical", "Rescue", - "Miner", "Custodial", "Service", "Clerical", "Security", + "Standard", + "Engineering", + "Construction", + "Medical", + "Rescue", + "Miner", + "Custodial", + "Service", + "Clerical", + "Security", "Research" ) @@ -171,8 +173,3 @@ var/global/const/TICKS_IN_SECOND = 10 //List of exosuit tracking beacons, to save performance var/global/list/exo_beacons = list() - -// Global variables to speed up object initialization. -// Boolean to indicate whether objects should initialize themselves in their New() or wait for the game ticker to do it. -// Check world.dm for the object list. -var/global/objects_initialized = 0 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4c04aab7ff4..ed1fc1e6ba1 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -650,9 +650,6 @@ proc/admin_notice(var/message, var/rights) feedback_set_details("end_error","admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]") feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - if(blackbox) - blackbox.save_all_data_to_sql() - sleep(50) world.Reboot() @@ -764,11 +761,11 @@ proc/admin_notice(var/message, var/rights) set category = "Server" set desc="Start the round RIGHT NOW" set name="Start Now" - if(!ticker) + if(Master.initializing) alert("Unable to start the game as it is not set up.") return - if(ticker.current_state == GAME_STATE_PREGAME) - ticker.current_state = GAME_STATE_SETTING_UP + if(SSticker.current_state == GAME_STATE_PREGAME) + SSticker.current_state = GAME_STATE_SETTING_UP log_admin("[usr.key] has started the game.") message_admins("[usr.key] has started the game.") feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -842,10 +839,10 @@ proc/admin_notice(var/message, var/rights) set name="Delay" if(!check_rights(R_SERVER)) return - if (!ticker || ticker.current_state != GAME_STATE_PREGAME) - ticker.delay_end = !ticker.delay_end - log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") - message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) + if (ROUND_IS_STARTED) + SSticker.delay_end = !SSticker.delay_end + log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].") + message_admins("\blue [key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) return //alert("Round end delayed", null, null, null, null, null) round_progressing = !round_progressing if (!round_progressing) @@ -893,9 +890,6 @@ proc/admin_notice(var/message, var/rights) feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]") feedback_add_details("admin_verb","IR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - if(blackbox) - blackbox.save_all_data_to_sql() - world.Reboot() /datum/admins/proc/unprison(var/mob/M in mob_list) @@ -915,14 +909,14 @@ proc/admin_notice(var/message, var/rights) ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS /proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode - if(!ticker || !ticker.mode) + if(!SSticker.mode) return 0 if (!istype(M)) return 0 if(M.mind) - if(ticker.mode.antag_templates && ticker.mode.antag_templates.len) - for(var/datum/antagonist/antag in ticker.mode.antag_templates) + if(SSticker.mode.antag_templates && SSticker.mode.antag_templates.len) + for(var/datum/antagonist/antag in SSticker.mode.antag_templates) if(antag.is_antagonist(M.mind)) return 2 else if(M.mind.special_role) @@ -935,16 +929,16 @@ proc/admin_notice(var/message, var/rights) return 0 -/datum/admins/proc/spawn_fruit(seedtype in plant_controller.seeds) +/datum/admins/proc/spawn_fruit(seedtype in SSplants.seeds) set category = "Debug" set desc = "Spawn the product of a seed." set name = "Spawn Fruit" if(!check_rights(R_SPAWN)) return - if(!seedtype || !plant_controller.seeds[seedtype]) + if(!seedtype || !SSplants.seeds[seedtype]) return - var/datum/seed/S = plant_controller.seeds[seedtype] + var/datum/seed/S = SSplants.seeds[seedtype] S.harvest(usr,0,0,1) log_admin("[key_name(usr)] spawned [seedtype] fruit at ([usr.x],[usr.y],[usr.z])") @@ -988,16 +982,16 @@ proc/admin_notice(var/message, var/rights) for(var/datum/custom_item/item in current_items) usr << "- name: [item.name] icon: [item.item_icon] path: [item.item_path] desc: [item.item_desc]" -/datum/admins/proc/spawn_plant(seedtype in plant_controller.seeds) +/datum/admins/proc/spawn_plant(seedtype in SSplants.seeds) set category = "Debug" set desc = "Spawn a spreading plant effect." set name = "Spawn Plant" if(!check_rights(R_SPAWN)) return - if(!seedtype || !plant_controller.seeds[seedtype]) + if(!seedtype || !SSplants.seeds[seedtype]) return - new /obj/effect/plant(get_turf(usr), plant_controller.seeds[seedtype]) + new /obj/effect/plant(get_turf(usr), SSplants.seeds[seedtype]) log_admin("[key_name(usr)] spawned [seedtype] vines at ([usr.x],[usr.y],[usr.z])") /datum/admins/proc/spawn_atom(var/object as text) @@ -1055,70 +1049,70 @@ proc/admin_notice(var/message, var/rights) set desc = "Show the current round configuration." set name = "Show Game Mode" - if(!ticker || !ticker.mode) + if(!ROUND_IS_STARTED) alert("Not before roundstart!", "Alert") return - var/out = "Current mode: [ticker.mode.name] ([ticker.mode.config_tag])
" + var/out = "Current mode: [SSticker.mode.name] ([SSticker.mode.config_tag])
" out += "
" - if(ticker.mode.ert_disabled) - out += "Emergency Response Teams: disabled" + if(SSticker.mode.ert_disabled) + out += "Emergency Response Teams: disabled" else - out += "Emergency Response Teams: enabled" + out += "Emergency Response Teams: enabled" out += "
" - if(ticker.mode.deny_respawn) - out += "Respawning: disallowed" + if(SSticker.mode.deny_respawn) + out += "Respawning: disallowed" else - out += "Respawning: allowed" + out += "Respawning: allowed" out += "
" - out += "Shuttle delay multiplier: [ticker.mode.shuttle_delay]
" + out += "Shuttle delay multiplier: [SSticker.mode.shuttle_delay]
" - if(ticker.mode.auto_recall_shuttle) - out += "Shuttle auto-recall: enabled" + if(SSticker.mode.auto_recall_shuttle) + out += "Shuttle auto-recall: enabled" else - out += "Shuttle auto-recall: disabled" + out += "Shuttle auto-recall: disabled" out += "

" - if(ticker.mode.event_delay_mod_moderate) - out += "Moderate event time modifier: [ticker.mode.event_delay_mod_moderate]
" + if(SSticker.mode.event_delay_mod_moderate) + out += "Moderate event time modifier: [SSticker.mode.event_delay_mod_moderate]
" else - out += "Moderate event time modifier: unset
" + out += "Moderate event time modifier: unset
" - if(ticker.mode.event_delay_mod_major) - out += "Major event time modifier: [ticker.mode.event_delay_mod_major]
" + if(SSticker.mode.event_delay_mod_major) + out += "Major event time modifier: [SSticker.mode.event_delay_mod_major]
" else - out += "Major event time modifier: unset
" + out += "Major event time modifier: unset
" out += "
" - if(ticker.mode.antag_tags && ticker.mode.antag_tags.len) + if(LAZYLEN(SSticker.mode.antag_tags)) out += "Core antag templates:
" - for(var/antag_tag in ticker.mode.antag_tags) - out += "[antag_tag].
" + for(var/antag_tag in SSticker.mode.antag_tags) + out += "[antag_tag].
" - if(ticker.mode.round_autoantag) - out += "Autotraitor enabled." - if(ticker.mode.antag_scaling_coeff > 0) - out += " (scaling with [ticker.mode.antag_scaling_coeff])" + if(SSticker.mode.round_autoantag) + out += "Autotraitor enabled." + if(SSticker.mode.antag_scaling_coeff > 0) + out += " (scaling with [SSticker.mode.antag_scaling_coeff])" else - out += " (not currently scaling, set a coefficient)" + out += " (not currently scaling, set a coefficient)" out += "
" else - out += "Autotraitor disabled.
" + out += "Autotraitor disabled.
" out += "All antag ids:" - if(ticker.mode.antag_templates && ticker.mode.antag_templates.len). - for(var/datum/antagonist/antag in ticker.mode.antag_templates) + if(LAZYLEN(SSticker.mode.antag_templates)). + for(var/datum/antagonist/antag in SSticker.mode.antag_templates) antag.update_current_antag_max() - out += " [antag.id]" + out += " [antag.id]" out += " ([antag.get_antag_count()]/[antag.cur_max]) " - out += " \[-\]
" + out += " \[-\]
" else out += " None." - out += " \[+\]
" + out += " \[+\]
" usr << browse(out, "window=edit_mode[src]") feedback_add_details("admin_verb","SGM") @@ -1278,7 +1272,7 @@ proc/admin_notice(var/message, var/rights) usr << "Error: you are not an admin!" return - if(!ticker || !ticker.mode) + if(!SSticker.mode) usr << "Mode has not started." return @@ -1302,12 +1296,12 @@ proc/admin_notice(var/message, var/rights) usr << "Error: you are not an admin!" return - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) usr << "Mode has not started." return log_and_message_admins("attempting to force mode autospawn.") - ticker.mode.process_autoantag() + SSticker.mode.process_autoantag() /datum/admins/proc/paralyze_mob(mob/living/H as mob) set category = "Admin" diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm index 0dbc8d5efc7..95d02a527ea 100644 --- a/code/modules/admin/admin_secrets.dm +++ b/code/modules/admin/admin_secrets.dm @@ -5,7 +5,6 @@ var/datum/admin_secrets/admin_secrets = new() var/list/datum/admin_secret_item/items /datum/admin_secrets/New() - ..() categories = init_subtypes(/datum/admin_secret_category) items = list() var/list/category_assoc = list() @@ -19,9 +18,12 @@ var/datum/admin_secrets/admin_secrets = new() var/datum/admin_secret_item/item = new item_type() var/datum/admin_secret_category/category = category_assoc[item.category] - dd_insertObjectList(category.items, item) + category.items += item items += item + for (var/datum/admin_secret_category/category in categories) + sortTim(category.items, /proc/cmp_text_dsc) + /datum/admin_secret_category var/name = "" var/desc = "" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 37cd449ebc1..cde7ead90a9 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -99,7 +99,8 @@ var/list/admin_verbs_admin = list( /client/proc/cmd_dev_bst, /client/proc/clear_toxins, /client/proc/wipe_ai, // allow admins to force-wipe AIs - /client/proc/fix_player_list + /client/proc/fix_player_list, + /client/proc/reset_openturf ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -166,7 +167,9 @@ var/list/admin_verbs_server = list( /client/proc/check_customitem_activity, /client/proc/nanomapgen_DumpImage, /client/proc/admin_edit_motd, - /client/proc/toggle_recursive_explosions + /client/proc/toggle_recursive_explosions, + /client/proc/restart_controller, + /client/proc/cmd_ss_panic ) var/list/admin_verbs_debug = list( /client/proc/getruntimelog, // allows us to access runtime logs to somebody, @@ -185,7 +188,6 @@ var/list/admin_verbs_debug = list( /client/proc/air_report, /client/proc/reload_admins, /client/proc/reload_mentors, - /client/proc/restart_controller, /client/proc/print_random_map, /client/proc/create_random_map, /client/proc/apply_random_map, @@ -206,7 +208,12 @@ var/list/admin_verbs_debug = list( /client/proc/restart_sql, /client/proc/debug_pooling, /client/proc/fix_player_list, - /client/proc/lighting_show_verbs + /client/proc/lighting_show_verbs, + /client/proc/restart_controller, + /client/proc/cmd_display_del_log, + /client/proc/cmd_display_init_log, + /client/proc/cmd_ss_panic, + /client/proc/reset_openturf ) var/list/admin_verbs_paranoid_debug = list( @@ -278,7 +285,6 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/adrev, /datum/admins/proc/adspawn, /datum/admins/proc/adjump, - /client/proc/restart_controller, /client/proc/cmd_admin_list_open_jobs, /client/proc/callproc, /client/proc/callproc_target, @@ -354,12 +360,13 @@ var/list/admin_verbs_dev = list( //will need to be altered - Ryan784 /client/proc/kill_air, /client/proc/kill_airgroup, /client/proc/player_panel, - /client/proc/restart_controller, /client/proc/togglebuildmodeself, /client/proc/toggledebuglogs, /client/proc/ZASSettings, /client/proc/cmd_dev_bst, - /client/proc/lighting_show_verbs + /client/proc/lighting_show_verbs, + /client/proc/cmd_display_del_log, + /client/proc/cmd_display_init_log ) var/list/admin_verbs_cciaa = list( /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ @@ -695,11 +702,11 @@ var/list/admin_verbs_cciaa = list( set category = "Debug" set name = "Kill Air" set desc = "Toggle Air Processing" - if(air_processing_killed) - air_processing_killed = 0 + if(!SSair.can_fire) + SSair.enable() usr << "Enabled air processing." else - air_processing_killed = 1 + SSair.disable() usr << "Disabled air processing." feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] used 'kill air'.",admin_key=key_name(usr)) @@ -1084,3 +1091,18 @@ var/list/admin_verbs_cciaa = list( log_debug(msg) message_admins(span("danger", msg)) player_list -= M + +/client/proc/reset_openturf() + set category = "Debug" + set name = "Reset Openturfs" + set desc = "Deletes and regenerates all openturf overlays in the world." + + if (!check_rights(R_DEBUG|R_ADMIN)) + return + + if (alert("Rebuild openturfs? Openturfs may look strange while this runs.", "Fix openturf", "No", "No", "DO IT") != "DO IT") + return + + log_and_message_admins("has regenerated all openturfs.") + + SSopenturf.hard_reset() diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 0b294e8e2eb..490764f0dd3 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -15,6 +15,8 @@ var/list/admin_datums = list() var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel var/admincaster_signature //What you'll sign the newsfeeds as + var/list/watched_processes // Processes marked to be shown in Status instead of just Processes. + /datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey) if(!ckey) error("Admin datum created without a ckey argument. Datum has been deleted") diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 7313109e73d..39f3b8f9d99 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -389,9 +389,9 @@ /datum/admins/proc/check_antagonists() - if (ticker && ticker.current_state >= GAME_STATE_PLAYING) + if (SSticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

Round Status

" - dat += "Current Game Mode: [ticker.mode.name]
" + dat += "Current Game Mode: [SSticker.mode.name]
" dat += "Round Duration: [round(world.time / 36000)]:[add_zero(world.time / 600 % 60, 2)]:[world.time / 100 % 6][world.time / 100 % 10]
" dat += "Emergency shuttle
" if (!emergency_shuttle.online()) @@ -409,7 +409,7 @@ if (emergency_shuttle.shuttle.moving_status == SHUTTLE_WARMUP) dat += "Launching now..." - dat += "[ticker.delay_end ? "End Round Normally" : "Delay Round End"]
" + dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
" dat += "
" for(var/antag_type in all_antag_types) var/datum/antagonist/A = all_antag_types[antag_type] diff --git a/code/modules/admin/secrets/admin_secrets/prison_warp.dm b/code/modules/admin/secrets/admin_secrets/prison_warp.dm index eec85c2f04b..2bb562e825e 100644 --- a/code/modules/admin/secrets/admin_secrets/prison_warp.dm +++ b/code/modules/admin/secrets/admin_secrets/prison_warp.dm @@ -2,7 +2,7 @@ name = "Prison Warp" /datum/admin_secret_item/admin_secret/prison_warp/can_execute(var/mob/user) - if(!ticker) return 0 + if(!ROUND_IS_STARTED) return 0 return ..() /datum/admin_secret_item/admin_secret/prison_warp/execute(var/mob/user) diff --git a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm index b586e108466..291f5544e8f 100644 --- a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm +++ b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm @@ -2,7 +2,7 @@ name = "Show Game Mode" /datum/admin_secret_item/admin_secret/show_game_mode/can_execute(var/mob/user) - if(!ticker) + if(!ROUND_IS_STARTED) return 0 return ..() @@ -10,5 +10,7 @@ . = ..() if(!.) return - if (ticker.mode) alert("The game mode is [ticker.mode.name]") - else alert("For some reason there's a ticker, but not a game mode") + if (SSticker.mode) + alert("The game mode is [SSticker.mode.name]") + else + alert("For some reason there's a ticker, but not a game mode") diff --git a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm b/code/modules/admin/secrets/fun_secrets/send_strike_team.dm index 3ec1bacb2c0..4de572cb632 100644 --- a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm +++ b/code/modules/admin/secrets/fun_secrets/send_strike_team.dm @@ -2,7 +2,8 @@ name = "Send Strike Team" /datum/admin_secret_item/fun_secret/send_strike_team/can_execute(var/mob/user) - if(!ticker) return 0 + if(!ROUND_IS_STARTED) + return 0 return ..() /datum/admin_secret_item/fun_secret/send_strike_team/execute(var/mob/user) diff --git a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm b/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm index 81b77eabb64..98df67ab7f7 100644 --- a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm +++ b/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm @@ -2,7 +2,7 @@ name = "Triple AI Mode" /datum/admin_secret_item/fun_secret/triple_ai_mode/can_execute(var/mob/user) - if(ticker && ticker.current_state > GAME_STATE_PREGAME) + if(ROUND_IS_STARTED) return 0 return ..() diff --git a/code/modules/admin/secrets/random_events/gravity.dm b/code/modules/admin/secrets/random_events/gravity.dm index 5499cbd9588..60de3a292bd 100644 --- a/code/modules/admin/secrets/random_events/gravity.dm +++ b/code/modules/admin/secrets/random_events/gravity.dm @@ -5,7 +5,7 @@ name = "Toggle Station Artificial Gravity" /datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user) - if(!(ticker && ticker.mode)) + if(!(SSticker.mode)) return 0 return ..() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ebfbd2f7eae..1edf96af036 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -6,7 +6,7 @@ message_admins("[usr.key] has attempted to override the admin panel!") return - if(ticker.mode && ticker.mode.check_antagonists_topic(href, href_list)) + if(SSticker.mode && SSticker.mode.check_antagonists_topic(href, href_list)) check_antagonists() return @@ -212,13 +212,13 @@ else if(href_list["call_shuttle"]) if(!check_rights(R_ADMIN)) return - if( ticker.mode.name == "blob" ) + if( SSticker.mode.name == "blob" ) alert("You can't call the shuttle during blob!") return switch(href_list["call_shuttle"]) if("1") - if ((!( ticker ) || !emergency_shuttle.location())) + if ((!( ROUND_IS_STARTED ) || !emergency_shuttle.location())) return if (emergency_shuttle.can_call()) emergency_shuttle.call_evac() @@ -226,7 +226,7 @@ message_admins("\blue [key_name_admin(usr)] called the Emergency Shuttle to the station", 1) if("2") - if (!( ticker ) || !emergency_shuttle.location()) + if (!( ROUND_IS_STARTED ) || !emergency_shuttle.location()) return if (emergency_shuttle.can_call()) emergency_shuttle.call_evac() @@ -265,9 +265,9 @@ else if(href_list["delay_round_end"]) if(!check_rights(R_SERVER)) return - ticker.delay_end = !ticker.delay_end - log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].",admin_key=key_name(usr)) - message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) + SSticker.delay_end = !SSticker.delay_end + log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].",admin_key=key_name(usr)) + message_admins("\blue [key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) href_list["secretsadmin"] = "check_antagonist" else if(href_list["simplemake"]) @@ -919,7 +919,7 @@ else if(href_list["c_mode"]) if(!check_rights(R_ADMIN)) return - if(ticker && ticker.mode) + if(ROUND_IS_STARTED) return alert(usr, "The game has already started.", null, null, null, null) var/dat = {"What mode do you wish to play?
"} for(var/mode in config.modes) @@ -932,7 +932,7 @@ else if(href_list["f_secret"]) if(!check_rights(R_ADMIN)) return - if(ticker && ticker.mode) + if(ROUND_IS_STARTED) return alert(usr, "The game has already started.", null, null, null, null) if(master_mode != "secret") return alert(usr, "The game mode has to be secret!", null, null, null, null) @@ -946,7 +946,7 @@ else if(href_list["c_mode2"]) if(!check_rights(R_ADMIN|R_SERVER)) return - if (ticker && ticker.mode) + if (ROUND_IS_STARTED) return alert(usr, "The game has already started.", null, null, null, null) master_mode = href_list["c_mode2"] log_admin("[key_name(usr)] set the mode as [master_mode].",admin_key=key_name(usr)) @@ -959,7 +959,7 @@ else if(href_list["f_secret2"]) if(!check_rights(R_ADMIN|R_SERVER)) return - if(ticker && ticker.mode) + if(ROUND_IS_STARTED) return alert(usr, "The game has already started.", null, null, null, null) if(master_mode != "secret") return alert(usr, "The game mode has to be secret!", null, null, null, null) @@ -1348,12 +1348,10 @@ log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]",admin_key=key_name(src.owner),ckey=key_name(M)) message_admins("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]") - var/obj/effect/stop/S - S = new /obj/effect/stop - S.victim = M - S.loc = M.loc + M.canmove = FALSE spawn(20) - qdel(S) + if (M) + M.canmove = initial(M.canmove) var/turf/simulated/floor/T = get_turf(M) if(istype(T)) @@ -1535,7 +1533,7 @@ else if(href_list["traitor"]) if(!check_rights(R_ADMIN|R_MOD)) return - if(!ticker || !ticker.mode) + if(!ROUND_IS_STARTED) alert("The game hasn't started yet!") return diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm index 7ee71ad63ea..3bea49678b5 100644 --- a/code/modules/admin/verbs/bluespacetech.dm +++ b/code/modules/admin/verbs/bluespacetech.dm @@ -9,24 +9,32 @@ // - SoundScopes */ +/client + var/bst_cooldown // So people can't spam BSTs. + +/client/proc/bst_spawn_cooldown() + bst_cooldown = null + /client/proc/cmd_dev_bst() set category = "Debug" set name = "Spawn Bluespace Tech" set desc = "Spawns a Bluespace Tech to debug stuff" + if (bst_cooldown) + src << "You've used this verb too recently, please wait a moment before trying again." + return + if(!check_rights(R_DEV|R_ADMIN)) return if(!holder) return //how did they get here? - if(!ticker) - alert("Wait until the game starts") - return - - if(ticker.current_state < GAME_STATE_PLAYING) + if(!ROUND_IS_STARTED) src << span("alert", "The game hasn't started yet!") return + bst_cooldown = TRUE + if(istype(mob, /mob/living)) if(!holder.original_mob) holder.original_mob = mob @@ -68,8 +76,8 @@ new /obj/item/weapon/reagent_containers/pill/adminordrazine(pills) bst.equip_to_slot_or_del(pills, slot_in_backpack) - //Implant because access - bst.implant_loyalty(bst,TRUE) + //Implant because access + bst.implant_loyalty(bst,TRUE) //Sort out ID var/obj/item/weapon/card/id/bst/id = new/obj/item/weapon/card/id/bst(bst) @@ -111,15 +119,18 @@ bst.add_language(LANGUAGE_CHANGELING) bst.add_language(LANGUAGE_BORER) - spawn(5) - spark(T, 3, alldirs) - bst.anchored = 0 + addtimer(CALLBACK(src, .proc/bst_post_spawn, bst), 5) + addtimer(CALLBACK(src, .proc/bst_spawn_cooldown), 5 SECONDS) log_debug("Bluespace Tech Spawned: X:[bst.x] Y:[bst.y] Z:[bst.z] User:[src]") feedback_add_details("admin_verb","BST") return 1 +/client/proc/bst_post_spawn(mob/living/carbon/human/bst/bst) + spark(bst, 3, alldirs) + bst.anchored = FALSE + /mob/living/carbon/human/bst universal_understand = 1 status_flags = GODMODE @@ -150,20 +161,19 @@ return src.custom_emote(1,"presses a button on their suit, followed by a polite bow.") - spawn(10) - spark(src, 5, alldirs) - if(key) - if(client.holder && client.holder.original_mob) - client.holder.original_mob.key = key - else - var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc. - ghost.key = key - ghost.mind.name = "[ghost.key] BSTech" - ghost.name = "[ghost.key] BSTech" - ghost.real_name = "[ghost.key] BSTech" - ghost.voice_name = "[ghost.key] BSTech" - qdel(src) - return + spark(src, 5, alldirs) + addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, src), 10, TIMER_CLIENT_TIME) + animate(src, alpha = 0, time = 9, easing = QUAD_EASING) + if(key) + if(client.holder && client.holder.original_mob) + client.holder.original_mob.key = key + else + var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc. + ghost.key = key + ghost.mind.name = "[ghost.key] BSTech" + ghost.name = "[ghost.key] BSTech" + ghost.real_name = "[ghost.key] BSTech" + ghost.voice_name = "[ghost.key] BSTech" /mob/living/carbon/human/bst/proc/bsc() //because we all have our unrealistic snowflakes right? if(set_species("Tajara")) diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index 915a1e000f5..197c3a88910 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -7,7 +7,7 @@ return if(alert("Are you sure you want to run [cinematic]?","Confirmation","Yes","No")=="No") return - if(!ticker) return + if(!ROUND_IS_STARTED) return switch(cinematic) if("explosion") if(alert("The game will be over. Are you really sure?", "Confirmation" ,"Continue", "Cancel") == "Cancel") @@ -19,9 +19,9 @@ override = input(src,"mode = ?","Enter Parameter",null) as anything in list("mercenary","no override") if(0) override = input(src,"mode = ?","Enter Parameter",null) as anything in list("blob","mercenary","AI malfunction","no override") - ticker.station_explosion_cinematic(parameter,override) + SSticker.station_explosion_cinematic(parameter,override) log_admin("[key_name(src)] launched cinematic \"[cinematic]\"",admin_key=key_name(usr)) message_admins("[key_name_admin(src)] launched cinematic \"[cinematic]\"", 1) - return \ No newline at end of file + return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 37e07e96ba3..3be602c53c9 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -42,7 +42,7 @@ set category = "Fun" set name = "Make Robot" - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts") return if(istype(M, /mob/living/carbon/human)) @@ -57,7 +57,7 @@ set category = "Fun" set name = "Make Simple Animal" - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts") return @@ -78,7 +78,7 @@ set category = "Fun" set name = "Make Alien" - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts") return if(ishuman(M)) @@ -95,16 +95,14 @@ set category = "Fun" set name = "Make slime" - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts") return if(ishuman(M)) - log_admin("[key_name(src)] has slimeized [M.key].",admin_key=key_name(usr)) + log_and_message_admins("has slimeized [key_name(M)].", user = usr) spawn(10) M:slimeize() feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(usr)] made [key_name(M)] into a slime.",admin_key=key_name(usr),ckey=key_name(M)) - message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into a slime.", 1) else alert("Invalid mob") @@ -113,7 +111,7 @@ set category = "Fun" set name = "Make Monkey" - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts") return if(istype(M, /mob/living/carbon/human)) @@ -128,7 +126,7 @@ set category = "Fun" set name = "Make Changeling" - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts") return if(istype(M, /mob/living/carbon/human)) @@ -148,7 +146,7 @@ usr << "Ruby Mode disabled. Command aborted." return - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts.") return if(istype(M, /mob/living/carbon/human)) @@ -166,7 +164,7 @@ if(!cultwords["travel"]) runerandom() if(M) - if(M.mind in ticker.mode.cult) + if(M.mind in SSticker.mode.cult) return else if(alert("Spawn that person a tome?",,"Yes","No")=="Yes") @@ -195,7 +193,7 @@ if(M.mind) M.mind.special_role = "Cultist" - ticker.mode.cult += M.mind + SSticker.mode.cult += M.mind src << "Made [M] a cultist." */ @@ -210,9 +208,9 @@ if(hsbitem) for(var/atom/O in world) if(istype(O, hsbitem)) - qdel(O) - log_admin("[key_name(src)] has deleted all instances of [hsbitem].",admin_key=key_name(usr)) - message_admins("[key_name_admin(src)] has deleted all instances of [hsbitem].", 0) + qdel(O, TRUE) + CHECK_TICK + log_and_message_admins("has deleted all instances of [hsbitem].") feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_debug_make_powernets() @@ -236,7 +234,7 @@ set category = "Admin" set name = "Grant Full Access" - if (!ticker) + if (!ROUND_IS_STARTED) alert("Wait until the game starts") return if (istype(M, /mob/living/carbon/human)) @@ -957,7 +955,7 @@ // DNA2 - Admin Hax /client/proc/cmd_admin_toggle_block(var/mob/M,var/block) - if(!ticker) + if(!ROUND_IS_STARTED) alert("Wait until the game starts") return if(istype(M, /mob/living/carbon)) @@ -970,3 +968,29 @@ log_admin("[key_name(src)] has toggled [M.key]'s [blockname] block [state]!",admin_key=key_name(src),ckey=key_name(M)) else alert("Invalid mob") + +/client/proc/cmd_display_del_log() + set category = "Debug" + set name = "Display del() Log" + set desc = "Displays a list of things that have failed to GC this round" + + var/dat = "List of things that failed to GC this round

" + for(var/path in SSgarbage.didntgc) + dat += "[path] - [SSgarbage.didntgc[path]] times
" + + dat += "List of paths that did not return a qdel hint in Destroy()

" + for(var/path in SSgarbage.noqdelhint) + dat += "[path]
" + + dat += "List of paths that slept in Destroy()

" + for(var/path in SSgarbage.sleptDestroy) + dat += "[path]
" + + usr << browse(dat, "window=dellog") + +/client/proc/cmd_display_init_log() + set category = "Debug" + set name = "Display Initialize() Log" + set desc = "Displays a list of things that didn't handle Initialize() properly" + + usr << browse(replacetext(SSatoms.InitLog(), "\n", "
"), "window=initlog") diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 246692f8824..8b54f797be4 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -2,12 +2,12 @@ set category = "Debug" set name = "Show Air Report" - if(!master_controller || !air_master) - alert(usr,"Master_controller or air_master not found.","Air Report") + if(!Master || !SSair) + alert(usr,"Master_controller or SSair not found.","Air Report") return - var/active_groups = air_master.active_zones - var/inactive_groups = air_master.zones.len - active_groups + var/active_groups = SSair.active_zones + var/inactive_groups = SSair.zones.len - active_groups var/hotspots = 0 for(var/obj/fire/hotspot in world) @@ -15,7 +15,7 @@ var/active_on_main_station = 0 var/inactive_on_main_station = 0 - for(var/zone/zone in air_master.zones) + for(var/zone/zone in SSair.zones) var/turf/simulated/turf = locate() in zone.contents if(turf && turf.z in config.station_levels) if(zone.needs_update) @@ -25,8 +25,8 @@ var/output = {"AIR SYSTEMS REPORT
General Processing Data
- Cycle: [air_master.current_cycle]
- Groups: [air_master.zones.len]
+ Cycle: [SSair.times_fired]
+ Groups: [SSair.zones.len]
---- Active: [active_groups]
---- Inactive: [inactive_groups]

---- Active on station: [active_on_main_station]
@@ -36,7 +36,7 @@ Hotspot Processing: [hotspots]

Geometry Processing Data
- Tile Update: [air_master.tiles_to_update.len]
+ Tile Update: [SSair.tiles_to_update.len]
"} usr << browse(output,"window=airreport") @@ -77,9 +77,9 @@ set name = "Radio report" var/output = "Radio Report
" - for (var/fq in radio_controller.frequencies) + for (var/fq in SSradio.frequencies) output += "Freq: [fq]
" - var/list/datum/radio_frequency/fqs = radio_controller.frequencies[fq] + var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq] if (!fqs) output += "  ERROR
" continue @@ -127,11 +127,11 @@ src << "Only administrators may use this command." return - if(!air_master) + if(!SSair) usr << "Cannot find air_system" return var/datum/air_group/dead_groups = list() - for(var/datum/air_group/group in air_master.air_groups) + for(var/datum/air_group/group in SSair.air_groups) if (!group.group_processing) dead_groups += group var/datum/air_group/dest_group = pick(dead_groups) @@ -149,7 +149,7 @@ src << "Only administrators may use this command." return - if(!air_master) + if(!SSair) usr << "Cannot find air_system" return diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 64f5d759769..790b73f9d70 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -68,7 +68,7 @@ var/intercom_range_display_status = 0 set category = "Mapping" set name = "Camera Report" - if(!master_controller) + if(!Master) alert(usr,"Master_controller not found.","Sec Camera Report") return 0 @@ -155,7 +155,7 @@ var/list/debug_verbs = list ( ,/client/proc/disable_movement ,/client/proc/Zone_Info ,/client/proc/Test_ZAS_Connection - ,/client/proc/ZoneTick + //,/client/proc/ZoneTick ,/client/proc/rebootAirMaster ,/client/proc/hide_debug_verbs ,/client/proc/testZAScolors @@ -163,6 +163,8 @@ var/list/debug_verbs = list ( ,/datum/admins/proc/setup_supermatter ,/client/proc/atmos_toggle_debug ,/client/proc/spawn_tanktransferbomb + ,/client/proc/get_bad_fdoors + ,/client/proc/get_bad_doors ) @@ -274,14 +276,7 @@ var/list/debug_verbs = list ( set name = "Reboot ZAS" if(alert("This will destroy and remake all zone geometry on the whole map.","Reboot ZAS","Reboot ZAS","Nevermind") == "Reboot ZAS") - var/datum/controller/air_system/old_air = air_master - for(var/zone/zone in old_air.zones) - zone.c_invalidate() - qdel(old_air) - air_master = new - air_master.Setup() - spawn air_master.Start() - + SSair.reboot() /client/proc/count_objects_on_z_level() set category = "Mapping" @@ -361,7 +356,7 @@ var/global/prevent_airgroup_regroup = 0 set name = "Break All Airgroups" /*prevent_airgroup_regroup = 1 - for(var/datum/air_group/AG in air_master.air_groups) + for(var/datum/air_group/AG in SSair.air_groups) AG.suspend_group_processing() message_admins("[src.ckey] used 'Break All Airgroups'")*/ @@ -372,7 +367,7 @@ var/global/prevent_airgroup_regroup = 0 usr << "\red Proc disabled." /*prevent_airgroup_regroup = 0 - for(var/datum/air_group/AG in air_master.air_groups) + for(var/datum/air_group/AG in SSair.air_groups) AG.check_regroup() message_admins("[src.ckey] used 'Regroup All Airgroups Attempt'")*/ @@ -394,12 +389,6 @@ var/global/prevent_airgroup_regroup = 0 usr << "\red Proc disabled." - /*air_processing_killed = !air_processing_killed - if(air_processing_killed) - message_admins("[src.ckey] used 'kill air processing', stopping all air processing.") - else - message_admins("[src.ckey] used 'kill air processing', restoring all air processing.")*/ - //This proc is intended to detect lag problems relating to communication procs var/global/say_disabled = 0 /client/proc/disable_communication() @@ -429,3 +418,24 @@ var/global/movement_disabled_exception //This is the client that calls the proc, movement_disabled_exception = usr.ckey else message_admins("[src.ckey] used 'Disable all movement', restoring all movement.")*/ + +/client/proc/get_bad_doors() + set category = "Mapping" + set name = "Find Bad Doors" + + for(var/obj/machinery/door/airlock/A in machines) + var/turf/T = get_turf(A) + if(istype(T, /turf/space) || istype(T, /turf/simulated/floor/asteroid) || istype(T, /turf/simulated/open) || T.density) + usr << "Airlock [A] with bad turf at ([A.x],[A.y],[A.z]) in [T.loc]." + +/client/proc/get_bad_fdoors() + set category = "Mapping" + set name = "Find Bad Fire Doors" + + for(var/obj/machinery/door/firedoor/F in machines) + var/turf/T = get_turf(F) + var/firelock_increment = 0 + for(var/obj/machinery/door/firedoor/FD in T) + firelock_increment += 1 + if(firelock_increment > 1) + usr << "Double firedoor [F] at ([F.x],[F.y],[F.z]) in [T.loc]." diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index af3b30e81ed..fb5a3ecdbb2 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -1,9 +1,9 @@ var/list/forbidden_varedit_object_types = list( - /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea. - /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering - /datum/feedback_variable, //Prevents people messing with feedback gathering - /datum/discord_bot //Nope.jpg. Stop it. - ) + /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea. + /datum/controller/subsystem/statistics, //Prevents people messing with feedback gathering + /datum/feedback_variable, //Prevents people messing with feedback gathering + /datum/discord_bot //Nope.jpg. Stop it. +) var/list/VVlocked = list("vars", "holder", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending") var/list/VVicon_edit_lock = list("icon", "icon_state", "overlays", "underlays") @@ -18,16 +18,6 @@ var/list/VVckey_edit = list("key", "ckey") feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! */ -/client/proc/cmd_modify_ticker_variables() - set category = "Debug" - set name = "Edit Ticker Variables" - - if (ticker == null) - src << "Game hasn't started yet." - else - src.modify_variables(ticker) - feedback_add_details("admin_verb","ETV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /client/proc/mod_list_add_ass() //haha var/class = "text" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 3a6f51ce0d9..ff93d537781 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -604,10 +604,16 @@ Traitors and the like can also be revived with the previous role mostly intact. message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])", 1) feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + if (isturf(O)) // Can't qdel a turf. + var/turf/T = O + T.ChangeTurf(/turf/space) + return + if (action == "Yes") - qdel(O) + qdel(O, TRUE) else // This is naughty, but sometimes necessary. + O.Destroy(TRUE) // Because direct del without this breaks things. del(O) /client/proc/cmd_admin_list_open_jobs() @@ -829,7 +835,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set category = "Admin" set name = "Call Shuttle" - if ((!( ticker ) || !emergency_shuttle.location())) + if ((!( ROUND_IS_STARTED ) || !emergency_shuttle.location())) return if(!check_rights(R_ADMIN)) return @@ -838,7 +844,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(confirm != "Yes") return var/choice - if(ticker.mode.auto_recall_shuttle) + if(SSticker.mode.auto_recall_shuttle) choice = input("The shuttle will just return if you call it. Call anyway?") in list("Confirm", "Cancel") if(choice == "Confirm") emergency_shuttle.auto_recall = 1 //enable auto-recall @@ -865,7 +871,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") return - if(!ticker || !emergency_shuttle.can_recall()) + if(!ROUND_IS_STARTED || !emergency_shuttle.can_recall()) return emergency_shuttle.recall() @@ -879,7 +885,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set category = "Admin" set name = "Toggle Deny Shuttle" - if (!ticker) + if (!ROUND_IS_STARTED) return if(!check_rights(R_ADMIN)) return @@ -906,12 +912,12 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!check_rights(R_FUN)) return - if (ticker && ticker.mode) + if (SSticker.mode) usr << "Nope you can't do this, the game's already started. This only works before rounds!" return - if(ticker.random_players) - ticker.random_players = 0 + if(SSticker.random_players) + SSticker.random_players = 0 message_admins("Admin [key_name_admin(usr)] has disabled \"Everyone is Special\" mode.", 1) usr << "Disabled." return @@ -929,7 +935,7 @@ Traitors and the like can also be revived with the previous role mostly intact. usr << "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet." - ticker.random_players = 1 + SSticker.random_players = 1 feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -963,15 +969,12 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!input) return - if(!ticker) - return - - ticker.selected_tip = input + SSticker.selected_tip = input // If we've already tipped, then send it straight away. - if(ticker.tipped) - ticker.send_tip_of_the_round() - ticker.selected_tip = initial(ticker.selected_tip) + if(SSticker.tipped) + SSticker.send_tip_of_the_round() + SSticker.selected_tip = initial(SSticker.selected_tip) message_admins("[key_name_admin(usr)] sent a tip of the round.") @@ -987,12 +990,9 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!holder) return - if(!ticker) - return - - ticker.send_tip_of_the_round() + SSticker.send_tip_of_the_round() message_admins("[key_name_admin(usr)] sent a pregenerated tip of the round.") log_admin("[key_name(usr)] sent a pregenerated Tip of the Round.",admin_key=key_name(usr)) - feedback_add_details("admin_verb","FAP") \ No newline at end of file + feedback_add_details("admin_verb","FAP") diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 37fc52eda80..ae3f78eb7f5 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -10,7 +10,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future src << "Only administrators may use this command." return - if(!ticker) + if(!ROUND_IS_STARTED) usr << "The game hasn't started yet!" return diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm index 5e5ccbb1237..8154c1e12b3 100644 --- a/code/modules/admin/verbs/tripAI.dm +++ b/code/modules/admin/verbs/tripAI.dm @@ -2,21 +2,21 @@ set category = "Fun" set name = "Create AI Triumvirate" - if(ticker.current_state > GAME_STATE_PREGAME) + if(ROUND_IS_STARTED) usr << "This option is currently only usable during pregame. This may change at a later date." return - if(job_master && ticker) + if(job_master) var/datum/job/job = job_master.GetJob("AI") if(!job) usr << "Unable to locate the AI job" return - if(ticker.triai) - ticker.triai = 0 + if(SSticker.triai) + SSticker.triai = 0 usr << "Only one AI will be spawned at round start." message_admins("\blue [key_name_admin(usr)] has toggled off triple AIs at round start.", 1) else - ticker.triai = 1 + SSticker.triai = 1 usr << "There will be an AI Triumvirate at round start." message_admins("\blue [key_name_admin(usr)] has toggled on triple AIs at round start.", 1) return diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 44d524e06d3..f4c71ed5c37 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -1,8 +1,3 @@ - -// Keep these two together, they *must* be defined on both -// If /client ever becomes /datum/client or similar, they can be merged -/client/proc/get_view_variables_header() - return "[src]" /datum/proc/get_view_variables_header() return "[src]" @@ -31,9 +26,6 @@ "} -// Same for these as for get_view_variables_header() above -/client/proc/get_view_variables_options() - return "" /datum/proc/get_view_variables_options() return "" diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 68c259f5c34..fe62baf82eb 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -194,6 +194,7 @@ if(Obj.type == O_type) i++ if (del_action == "Hard Delete") + Obj.Destroy(TRUE) del(Obj) else qdel(Obj) @@ -208,9 +209,10 @@ if(istype(Obj,O_type)) i++ if (del_action == "Hard Delete") + Obj.Destroy(TRUE) del(Obj) else - qdel(Obj) + qdel(Obj, TRUE) if(!i) usr << "No objects of this type exist" return @@ -486,12 +488,13 @@ usr << "This can only be done on mobs with clients" return - nanomanager.send_resources(H.client) + usr << span("alert", "This command is temporarily disabled.") + //nanomanager.send_resources(H.client) - usr << "Resource files sent" - H << "Your NanoUI Resource files have been refreshed" + //usr << "Resource files sent" + //H << "Your NanoUI Resource files have been refreshed" - log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ", admin_key=key_name(usr), ckey=key_name(H)) + //log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ", admin_key=key_name(usr), ckey=key_name(H)) else if(href_list["regenerateicons"]) if(!check_rights(0)) return diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index b20b2481d3e..8ffdf8b9b4a 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -4,7 +4,7 @@ // parent_type is here because it's pointless to show in VV. /var/list/view_variables_hide_vars = list("bound_x", "bound_y", "bound_height", "bound_width", "bounds", "parent_type", "step_x", "step_y", "step_size") // Variables not to expand the lists of. Vars is pointless to expand, and overlays/underlays cannot be expanded. -/var/list/view_variables_dont_expand = list("overlays", "underlays", "vars") +/var/list/view_variables_dont_expand = list("overlays", "underlays", "vars", "screen", "our_overlays", "priority_overlays", "queued_overlays") // Variables that runtime if you try to test associativity of the lists they contain by indexing /var/list/view_variables_no_assoc = list("verbs", "contents") diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index d0a6a8be4c2..e39a0b15fa1 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -30,7 +30,7 @@ cameras() // Sets up both cameras and last alarm area. set_source_data(source, duration, severity) -/datum/alarm/proc/process() +/datum/alarm/process() // Has origin gone missing? if(!origin && !end_time) end_time = world.time + ALARM_RESET_DELAY diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index 9cf52add77b..8837d08fa41 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -7,7 +7,7 @@ var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. var/list/listeners = new // A list of all objects interested in alarm changes. -/datum/alarm_handler/proc/process() +/datum/alarm_handler/process() for(var/datum/alarm/A in alarms) A.process() check_alarm_cleared(A) @@ -31,7 +31,7 @@ alarms |= existing alarms_assoc[origin] = existing if(new_alarm) - alarms = dd_sortedObjectList(alarms) + sortTim(alarms, /proc/cmp_alarm, FALSE) on_alarm_change(existing, ALARM_RAISED) return new_alarm diff --git a/code/modules/antag_contest/contest_objective.dm b/code/modules/antag_contest/contest_objective.dm index abad0999fae..113ed523516 100644 --- a/code/modules/antag_contest/contest_objective.dm +++ b/code/modules/antag_contest/contest_objective.dm @@ -18,7 +18,7 @@ /datum/objective/competition/find_target(var/require_synth = 0) var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) if (require_synth) if (isipc(possible_target.current)) @@ -31,7 +31,7 @@ target = pick(possible_targets) /datum/objective/competition/find_target_by_role(role, role_type = 0, var/require_synth = 0) - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role)) if (require_synth && !(isipc(possible_target.current))) continue @@ -74,7 +74,7 @@ */ /datum/objective/competition/assassinate_supporter/find_target() var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) if (possible_target.current.client && possible_target.current.client.prefs && possible_target.current.client.prefs.antag_contest_side != side) possible_targets += possible_target diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 09b15fe7750..65e82ff8fa8 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -51,8 +51,7 @@ process_cooldown() cooldown-- if(cooldown <= 0) return 0 - spawn(10) - process_cooldown() + addtimer(CALLBACK(src, .proc/process_cooldown), 10) return 1 @@ -77,8 +76,7 @@ activate() if(!secured || (cooldown > 0)) return 0 cooldown = 2 - spawn(10) - process_cooldown() + addtimer(CALLBACK(src, .proc/process_cooldown), 10) return 1 diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index a78126bedc5..5e9dbaa9a00 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -19,9 +19,8 @@ if(bombtank) icon_state = bombtank.icon_state if(bombassembly) - overlays += bombassembly.icon_state - overlays += bombassembly.overlays - overlays += "bomb_assembly" + add_overlay(bombassembly) + add_overlay("bomb_assembly") /obj/item/device/onetankbomb/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/device/analyzer)) @@ -152,4 +151,4 @@ var/turf/simulated/T = get_turf(src) if(!T) return - T.assume_air(removed) \ No newline at end of file + T.assume_air(removed) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index c29731c677f..5e8a6e13b81 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -64,15 +64,15 @@ update_icon() - overlays.Cut() + cut_overlays() if(a_left) - overlays += "[a_left.icon_state]_left" + add_overlay("[a_left.icon_state]_left") for(var/O in a_left.attached_overlays) - overlays += "[O]_l" + add_overlay("[O]_l") if(a_right) - src.overlays += "[a_right.icon_state]_right" + add_overlay("[a_right.icon_state]_right") for(var/O in a_right.attached_overlays) - overlays += "[O]_r" + add_overlay("[O]_r") if(master) master.update_icon() @@ -189,8 +189,7 @@ if(a_right) a_right:holder = null a_right.loc = T - spawn(0) - qdel(src) + QDEL_IN(src, 0) return diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index edbc87c4809..654b62cbdeb 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -6,8 +6,7 @@ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10) secured = 1 - wires = WIRE_RECEIVE - var/datum/effect_system/sparks/spark_system + wires = WIRE_RECEIVE /obj/item/device/assembly/igniter/activate() if(!..()) return 0//Cooldown check @@ -24,15 +23,11 @@ var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc if (tank && tank.modded) tank.explode() - - spark_system.queue() + + spark(src, 4, cardinal) return 1 /obj/item/device/assembly/igniter/attack_self(mob/user as mob) activate() add_fingerprint(user) return - -/obj/item/device/assembly/igniter/New() - . = ..() - spark_system = bind_spark(src, 4, cardinal) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 06acb04d7ec..2216354d97c 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -39,10 +39,10 @@ update_icon() - overlays.Cut() + cut_overlays() attached_overlays = list() if(on) - overlays += "infrared_on" + add_overlay("infrared_on") attached_overlays += "infrared_on" if(holder) @@ -103,8 +103,7 @@ if(!holder) visible_message("\icon[src] *beep* *beep*") cooldown = 2 - spawn(10) - process_cooldown() + addtimer(CALLBACK(src, .proc/process_cooldown), 10) return @@ -261,4 +260,4 @@ if(next) qdel(next) next = null - ..() + return ..() diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index e0e2b0dbe6d..7aa068234cf 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -57,9 +57,7 @@ if(!holder) mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*") cooldown = 2 - spawn(10) - process_cooldown() - return + addtimer(CALLBACK(src, .proc/process_cooldown), 10) process() @@ -93,13 +91,13 @@ update_icon() - overlays.Cut() + cut_overlays() attached_overlays = list() if(timing) - overlays += "prox_timing" + add_overlay("prox_timing") attached_overlays += "prox_timing" if(scanning) - overlays += "prox_scanning" + add_overlay("prox_scanning") attached_overlays += "prox_scanning" if(holder) holder.update_icon() diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 8ba62cdc371..ba3103418ce 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -11,8 +11,8 @@ /obj/item/assembly/shock_kit/Destroy() qdel(part1) qdel(part2) - ..() - return + + return ..() /obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wrench) && !status) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 3fc26cb2a94..00964f78b33 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -17,18 +17,14 @@ var/datum/radio_frequency/radio_connection var/deadman = 0 - New() - ..() - spawn(40) - set_frequency(frequency) - return - + Initialize() + . = ..() + set_frequency(frequency) activate() if(cooldown > 0) return 0 cooldown = 2 - spawn(10) - process_cooldown() + addtimer(CALLBACK(src, .proc/process_cooldown), 10) signal() return 1 @@ -156,13 +152,13 @@ proc/set_frequency(new_frequency) if(!frequency) return - if(!radio_controller) + if(!SSradio) sleep(20) - if(!radio_controller) + if(!SSradio) return - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) + radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT) return process() @@ -188,7 +184,7 @@ usr.visible_message("\red [usr] moves their finger over [src]'s signal button...") /obj/item/device/assembly/signaler/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) + if(SSradio) + SSradio.remove_object(src,frequency) frequency = 0 - ..() + return ..() diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 565a8ea160d..59af8749460 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -2,8 +2,8 @@ name = "timer" desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." icon_state = "timer" - origin_tech = list(TECH_MAGNET = 1) - matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10) + origin_tech = list(TECH_MAGNET = 1) + matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10) wires = WIRE_PULSE @@ -42,8 +42,7 @@ if(!holder) visible_message("\icon[src] *beep* *beep*", "*beep* *beep*") cooldown = 2 - spawn(10) - process_cooldown() + addtimer(CALLBACK(src, .proc/process_cooldown), 10) return @@ -58,10 +57,10 @@ update_icon() - overlays.Cut() + cut_overlays() attached_overlays = list() if(timing) - overlays += "timer_timing" + add_overlay("timer_timing") attached_overlays += "timer_timing" if(holder) holder.update_icon() diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 09fd236be0d..dcba4b2afaa 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -25,7 +25,8 @@ var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID var/species = "Human" -/obj/effect/landmark/corpse/initialize() +/obj/effect/landmark/corpse/Initialize() + . = ..() createCorpse() /obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. @@ -34,7 +35,9 @@ M.real_name = src.name M.death(1) //Kills the new mob if(src.corpseuniform) - M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) + var/obj/item/clothing/under/cuniform = new corpseuniform(M) + cuniform.sensor_mode = 0 + M.equip_to_slot_or_del(cuniform, slot_w_uniform) if(src.corpsesuit) M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit) if(src.corpseshoes) @@ -164,6 +167,11 @@ corpsemask = /obj/item/clothing/mask/breath corpsehelmet = /obj/item/clothing/head/helmet/space/void/engineering +/obj/effect/landmark/corpse/engineer/rotten + name = "unidentifiable corpse" + species = "Skeleton" + corpseid = 0 + /obj/effect/landmark/corpse/clown name = "Clown" corpseuniform = /obj/item/clothing/under/rank/clown diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 04c255b94eb..d7c7a498ab5 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -8,7 +8,8 @@ var/active = 0 -/obj/machinery/gateway/initialize() +/obj/machinery/gateway/Initialize() + . = ..() update_icon() if(dir == 2) density = 0 @@ -34,7 +35,8 @@ var/wait = 0 //this just grabs world.time at world start var/obj/machinery/gateway/centeraway/awaygate = null -/obj/machinery/gateway/centerstation/initialize() +/obj/machinery/gateway/centerstation/Initialize() + . = ..() update_icon() wait = world.time + config.gateway_delay //+ thirty minutes default awaygate = locate(/obj/machinery/gateway/centeraway) @@ -149,7 +151,8 @@ obj/machinery/gateway/centerstation/process() var/obj/machinery/gateway/centeraway/stationgate = null -/obj/machinery/gateway/centeraway/initialize() +/obj/machinery/gateway/centeraway/Initialize() + . = ..() update_icon() stationgate = locate(/obj/machinery/gateway/centerstation) @@ -233,4 +236,4 @@ obj/machinery/gateway/centerstation/process() else user << "\blue Recalibration successful!: \black This gate's systems have been fine tuned. Travel to this gate will now be on target." calibrated = 1 - return \ No newline at end of file + return diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index 5aeb9651d2b..2a45c4c0de4 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -5,7 +5,8 @@ var/lootdoubles = 0 //if the same item can be spawned twice var/loot = "" //a list of possible items to spawn- a string of paths -/obj/effect/spawner/lootdrop/initialize() +/obj/effect/spawner/lootdrop/Initialize() + ..() var/list/things = params2list(loot) if(things && things.len) @@ -21,4 +22,5 @@ continue new loot_path(get_turf(src)) - qdel(src) + + return INITIALIZE_HINT_QDEL diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm index 78cbe78f8d2..42d4471d0e8 100644 --- a/code/modules/blob/blob.dm +++ b/code/modules/blob/blob.dm @@ -26,7 +26,7 @@ var/blob_cost = 1 //point cost of the blob tile /obj/effect/blob/New(loc) - processing_objects.Add(src) + START_PROCESSING(SScalamity, src) health = maxHealth var/matrix/M = matrix() M.Turn(90 * pick(0,1,2,3)) @@ -40,7 +40,9 @@ parent_core.blob_count -= blob_cost parent_core = null - ..() + STOP_PROCESSING(SScalamity, src) + + return ..() /obj/effect/blob/process() if(!parent_core) @@ -50,7 +52,7 @@ return // Make deleting the parent more responsive. - if(!isnull(parent_core.gcDestroyed)) + if(QDELING(parent_core)) parent_core = null return @@ -303,7 +305,6 @@ expandType = /obj/effect/blob /obj/effect/blob/core/secondary/New() - processing_objects.Add(src) health = maxHealth update_icon() return ..(loc) @@ -311,7 +312,7 @@ /obj/effect/blob/core/secondary/Destroy() if(parent_core) parent_core.core_count -= 1 - ..() + return ..() /obj/effect/blob/shield name = "strong blob" @@ -330,7 +331,7 @@ /obj/effect/blob/shield/Destroy() density = 0 update_nearby_tiles() - ..() + return ..() /obj/effect/blob/shield/update_icon() if(health > maxHealth * 2 / 3) diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm index 28d625c9fef..fd3e0c5fa3b 100644 --- a/code/modules/cargo/randomstock.dm +++ b/code/modules/cargo/randomstock.dm @@ -300,7 +300,6 @@ var/list/global/random_stock_large = list( ) /datum/cargospawner/New() - //First lets get the reference to our warehouse for(var/areapath in typesof(/area/quartermaster/storage)) warehouse = locate(areapath) @@ -312,6 +311,7 @@ var/list/global/random_stock_large = list( for (var/obj/structure/table/B in warehouse) tables |= B +/datum/cargospawner/proc/start() if (!warehouse || !warehouseturfs.len) admin_notice("ERROR: Cargo spawner failed to locate warehouse. Terminating.", R_DEBUG) qdel(src) diff --git a/code/modules/cciaa/cciaa.dm b/code/modules/cciaa/cciaa.dm index 1767933b35d..d9ead7b329e 100644 --- a/code/modules/cciaa/cciaa.dm +++ b/code/modules/cciaa/cciaa.dm @@ -8,11 +8,7 @@ if(!holder) return //how did they get here? - if(!ticker) - alert("Wait until the game starts") - return - - if(ticker.current_state < GAME_STATE_PLAYING) + if(!ROUND_IS_STARTED) src << "The game hasn't started yet!" return diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm new file mode 100644 index 00000000000..219adb408fd --- /dev/null +++ b/code/modules/client/asset_cache.dm @@ -0,0 +1,212 @@ +/* +Asset cache quick users guide: + +Make a datum at the bottom of this file with your assets for your thing. +The simple subsystem will most like be of use for most cases. +Then call get_asset_datum() with the type of the datum you created and store the return +Then call .send(client) on that stored return value. + +You can set verify to TRUE if you want send() to sleep until the client has the assets. +*/ + + +// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. +// This is doubled for the first asset, then added per asset after +#define ASSET_CACHE_SEND_TIMEOUT 7 + +//When sending mutiple assets, how many before we give the client a quaint little sending resources message +#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 + +/client + var/list/cache = list() // List of all assets sent to this client by the asset cache. + var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. + var/list/sending = list() + var/last_asset_job = 0 // Last job done. + +//This proc sends the asset to the client, but only if it needs it. +//This proc blocks(sleeps) unless verify is set to false +/proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + + else + return 0 + + else + return 0 + + if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) + return 0 + + client << browse_rsc(SSassets.cache[asset_name], asset_name) + if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. + if (client) + client.cache += asset_name + return 1 + if (!client) + return 0 + + client.sending |= asset_name + var/job = ++client.last_asset_job + + client << browse({" + + "}, "window=asset_cache_browser") + + var/t = 0 + var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT + while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() + sleep(1) // Lock up the caller until this is received. + t++ + + if(client) + client.sending -= asset_name + client.cache |= asset_name + client.completed_asset_jobs -= job + + return 1 + +//This proc blocks(sleeps) unless verify is set to false +/proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + + else + return 0 + + else + return 0 + + var/list/unreceived = asset_list - (client.cache + client.sending) + if(!unreceived || !unreceived.len) + return 0 + if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + to_chat(client, "Sending Resources...") + for(var/asset in unreceived) + if (asset in SSassets.cache) + client << browse_rsc(SSassets.cache[asset], asset) + + if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. + if (client) + client.cache += unreceived + return 1 + if (!client) + return 0 + client.sending |= unreceived + var/job = ++client.last_asset_job + + client << browse({" + + "}, "window=asset_cache_browser") + + var/t = 0 + var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len + while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() + sleep(1) // Lock up the caller until this is received. + t++ + + if(client) + client.sending -= unreceived + client.cache |= unreceived + client.completed_asset_jobs -= job + + return 1 + +//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. +//The proc calls procs that sleep for long times. +/proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) + for(var/file in files) + if (!client) + break + if (register_asset) + register_asset(file,files[file]) + send_asset(client,file) + sleep(0) //queuing calls like this too quickly can cause issues in some client versions + +//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. +//if it's an icon or something be careful, you'll have to copy it before further use. +/proc/register_asset(var/asset_name, var/asset) + SSassets.cache[asset_name] = asset + +//These datums are used to populate the asset cache, the proc "register()" does this. + +//all of our asset datums, used for referring to these later +var/list/asset_datums = list() + +//get a assetdatum or make a new one +/proc/get_asset_datum(var/type) + if (!(type in asset_datums)) + return new type() + return asset_datums[type] + +/datum/asset/New() + asset_datums[type] = src + +/datum/asset/proc/register() + return + +/datum/asset/proc/send(client) + return + +//If you don't need anything complicated. +/datum/asset/simple + var/assets = list() + var/verify = FALSE + +/datum/asset/simple/register() + for(var/asset_name in assets) + register_asset(asset_name, assets[asset_name]) + +/datum/asset/simple/send(client) + send_asset_list(client,assets,verify) + +/datum/asset/simple/misc + assets = list( + "search.js" = 'html/search.js', + "panels.css" = 'html/panels.css', + "loading.gif" = 'html/images/loading.gif', + "bootstrap.min.css" = 'html/bootstrap/css/bootstrap.min.css', + "bootstrap.min.js" = 'html/bootstrap/js/bootstrap.min.js', + "jquery-2.0.0.min.js" = 'html/jquery/jquery-2.0.0.min.js', + "ie-truth.min.js" = 'html/iestats/ie-truth.min.js' + ) + +/datum/asset/simple/paper + assets = list( + "talisman.png" = 'html/images/talisman.png', + "barcode0.png" = 'html/images/barcode0.png', + "barcode1.png" = 'html/images/barcode1.png', + "barcode2.png" = 'html/images/barcode2.png', + "barcode3.png" = 'html/images/barcode3.png' + ) + +/datum/asset/simple/changelog + assets = list( + "88x31.png" = 'html/88x31.png', + "bug-minus.png" = 'html/bug-minus.png', + "cross-circle.png" = 'html/cross-circle.png', + "hard-hat-exclamation.png" = 'html/hard-hat-exclamation.png', + "image-minus.png" = 'html/image-minus.png', + "image-plus.png" = 'html/image-plus.png', + "map-pencil.png" = 'html/map-pencil.png', + "music-minus.png" = 'html/music-minus.png', + "music-plus.png" = 'html/music-plus.png', + "tick-circle.png" = 'html/tick-circle.png', + "wrench-screwdriver.png" = 'html/wrench-screwdriver.png', + "spell-check.png" = 'html/spell-check.png', + "burn-exclamation.png" = 'html/burn-exclamation.png', + "chevron.png" = 'html/chevron.png', + "chevron-expand.png" = 'html/chevron-expand.png', + "changelog.css" = 'html/changelog.css', + "changelog.js" = 'html/changelog.js' + ) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 2478287170d..bf996843542 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -1,4 +1,6 @@ /client + parent_type = /datum + //////////////// //ADMIN THINGS// //////////////// diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index b2edde4e29b..ee0cbb7dc30 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -24,6 +24,16 @@ if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null return + // asset_cache + if(href_list["asset_cache_confirm_arrival"]) + //to_chat(src, "ASSET JOB [href_list["asset_cache_confirm_arrival"]] ARRIVED.") + var/job = text2num(href_list["asset_cache_confirm_arrival"]) + //because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us + // into letting append to a list without limit. + if (job && job <= last_asset_job && !(job in completed_asset_jobs)) + completed_asset_jobs += job + return + if (href_list["EMERG"] && href_list["EMERG"] == "action") if (!info_sent) handle_connection_info(src, href_list["data"]) @@ -157,7 +167,7 @@ if ("dismiss") if (href_list["notification"]) var/datum/client_notification/a = locate(href_list["notification"]) - if (a && isnull(a.gcDestroyed)) + if (!QDELETED(a)) a.dismiss() // Forum link from various panels. @@ -322,7 +332,6 @@ winset(src, null, "command=\".configure graphics-hwmode on\"") send_resources() - nanomanager.send_resources(src) // Server greeting shenanigans. if (server_greeting.find_outdated_info(src, 1)) @@ -441,22 +450,9 @@ //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() - - getFiles( - 'html/search.js', - 'html/panels.css', - 'html/images/loading.gif', - 'html/images/ntlogo.png', - 'html/images/talisman.png', - 'html/images/barcode0.png', - 'html/images/barcode1.png', - 'html/images/barcode2.png', - 'html/images/barcode3.png', - 'html/bootstrap/css/bootstrap.min.css', - 'html/bootstrap/js/bootstrap.min.js', - 'html/jquery/jquery-2.0.0.min.js', - 'html/iestats/ie-truth.min.js' - ) + spawn (10) //removing this spawn causes all clients to not get verbs. + //Precache the client with all other assets slowly, so as to not block other browse() calls + getFilesSlow(src, SSassets.cache, register_asset = FALSE) /mob/proc/MayRespawn() return 0 diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 01e5b3a8665..b48ccb962cd 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -71,7 +71,7 @@ pref.toggles ^= toggle_flag if(toggle_flag == SOUND_LOBBY && isnewplayer(user)) if(pref.toggles & SOUND_LOBBY) - user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) + user << sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) else user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) return TOPIC_REFRESH diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index bbb94611fed..7a9743a3838 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -10,9 +10,9 @@ var/list/gear_datums = list() ..() /hook/startup/proc/populate_gear_list() - + // Setup custom loadout. //create a list of gear datums to sort - for(var/geartype in typesof(/datum/gear)-/datum/gear) + for(var/geartype in subtypesof(/datum/gear)) var/datum/gear/G = geartype var/use_name = initial(G.display_name) @@ -24,11 +24,12 @@ var/list/gear_datums = list() gear_datums[use_name] = new geartype LC.gear[use_name] = gear_datums[use_name] - loadout_categories = sortAssoc(loadout_categories) + sortTim(loadout_categories, /proc/cmp_text_asc, FALSE) for(var/loadout_category in loadout_categories) var/datum/loadout_category/LC = loadout_categories[loadout_category] - LC.gear = sortAssoc(LC.gear) - return 1 + sortTim(LC.gear, /proc/cmp_text_asc, FALSE) + + return TRUE /datum/category_item/player_setup_item/loadout name = "Loadout" @@ -74,6 +75,7 @@ var/list/gear_datums = list() pref.gear = json_decode(pref.gear) catch log_debug("SQL CHARACTER LOAD: Unable to load custom loadout for client [pref.client ? pref.client.ckey : "UNKNOWN"].") + pref.gear = list() gear_reset = TRUE else diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index 4e70450faa1..27f4b7ef043 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -55,5 +55,6 @@ var/obj/item/weapon/storage/toolbox/lunchbox/lunchbox = lunchbox_type if(!initial(lunchbox.filled)) lunchboxes[initial(lunchbox.name)] = lunchbox_type - gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes)) + sortTim(lunchboxes, /proc/cmp_text_asc) + gear_tweaks += new/datum/gear_tweak/path(lunchboxes) gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks()) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 99af44e65eb..b04284df81d 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -122,9 +122,6 @@ var/sql_role = SQL_CHARACTER var/modified = 0 -/datum/category_group/player_setup_category/dd_SortValue() - return sort_order - /datum/category_group/player_setup_category/proc/sanitize_setup() for(var/datum/category_item/player_setup_item/PI in items) PI.sanitize_preferences() @@ -214,9 +211,6 @@ pref = null return ..() -/datum/category_item/player_setup_item/dd_SortValue() - return sort_order - /* * Called when the item is asked to load per character settings - Only called when sql saves are disabled or unavailable */ diff --git a/code/modules/client/preferences_notification.dm b/code/modules/client/preferences_notification.dm index ac42be96411..8d58401dd26 100644 --- a/code/modules/client/preferences_notification.dm +++ b/code/modules/client/preferences_notification.dm @@ -42,7 +42,7 @@ owner.notifications -= src owner = null - ..() + return ..() /* * Associates a callback to be executed whenever a notification is dismissed. diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm index ac0d5447e64..cb97fd588d4 100644 --- a/code/modules/client/preferences_spawnpoints.dm +++ b/code/modules/client/preferences_spawnpoints.dm @@ -24,20 +24,13 @@ var/list/spawntypes = list() /datum/spawnpoint/arrivals display_name = "Arrivals Shuttle" - msg = "has arrived on the station" + msg = "is inbound from the NTCC Odin" + /datum/spawnpoint/arrivals/New() ..() turfs = latejoin -/datum/spawnpoint/gateway - display_name = "Gateway" - msg = "has completed translation from offsite gateway" - -/datum/spawnpoint/gateway/New() - ..() - turfs = latejoin_gateway - /datum/spawnpoint/cryo display_name = "Cryogenic Storage" msg = "has completed cryogenic revival" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 91b3f1c84cd..35ea159a3b7 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -461,9 +461,9 @@ BLIND // can't see anything return ..() /obj/item/clothing/shoes/update_icon() - overlays.Cut() + cut_overlays() if(holding) - overlays += image(icon, "[icon_state]_knife") + add_overlay("[icon_state]_knife") return ..() /obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 4f8e69479e7..5f0c6d0a06b 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -45,8 +45,8 @@ vision_flags = SEE_TURFS see_invisible = SEE_INVISIBLE_NOLIGHTING -/obj/item/clothing/glasses/meson/New() - ..() +/obj/item/clothing/glasses/meson/Initialize() + . = ..() overlay = global_hud.meson /obj/item/clothing/glasses/meson/prescription @@ -62,8 +62,8 @@ toggleable = 1 unacidable = 1 -/obj/item/clothing/glasses/science/New() - ..() +/obj/item/clothing/glasses/science/Initialize() + . = ..() overlay = global_hud.science /obj/item/clothing/glasses/night @@ -77,8 +77,8 @@ see_invisible = SEE_INVISIBLE_NOLIGHTING off_state = "denight" -/obj/item/clothing/glasses/night/New() - ..() +/obj/item/clothing/glasses/night/Initialize() + . = ..() overlay = global_hud.nvg /obj/item/clothing/glasses/eyepatch @@ -248,8 +248,8 @@ desc = "Sunglasses with a HUD." icon_state = "sunhud" - New() - ..() + Initialize() + . = ..() src.hud = new/obj/item/clothing/glasses/hud/security(src) return @@ -284,8 +284,8 @@ M.disabilities &= ~NEARSIGHTED ..() -/obj/item/clothing/glasses/thermal/New() - ..() +/obj/item/clothing/glasses/thermal/Initialize() + . = ..() overlay = global_hud.thermal /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index dd7e421e6ac..d1e215c9474 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -35,7 +35,7 @@ new /obj/item/clothing/glasses/hud/health(T) new /obj/item/clothing/glasses/regular(T) user.drop_item(src) - del(src) + qdel(src) /obj/item/clothing/glasses/hud/security name = "security HUD" @@ -57,7 +57,7 @@ new /obj/item/clothing/glasses/hud/health(T) new /obj/item/clothing/glasses/regular(T) user.drop_item(src) - del(src) + qdel(src) /obj/item/clothing/glasses/hud/security/jensenshades name = "augmented shades" diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm index ad14ed6ad31..88a5b376abe 100644 --- a/code/modules/clothing/gloves/stungloves.dm +++ b/code/modules/clothing/gloves/stungloves.dm @@ -87,8 +87,8 @@ /obj/item/clothing/gloves/update_icon() ..() - overlays.Cut() + cut_overlays() if(wired) - overlays += "gloves_wire" + add_overlay("gloves_wire") if(cell) - overlays += "gloves_cell" + add_overlay("gloves_cell") diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm index 15e51154d88..8748d7b61e5 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm @@ -174,7 +174,7 @@ interface_desc = "A shoulder-mounted cell-powered taser." gun_type = /obj/item/weapon/gun/energy/taser/mounted - + /obj/item/rig_module/mounted/pulse name = "mounted pulse rifle" @@ -185,7 +185,7 @@ interface_desc = "A shoulder-mounted cell-powered pulse rifle." gun_type = /obj/item/weapon/gun/energy/pulse - + /obj/item/rig_module/mounted/smg name = "mounted submachine gun" @@ -196,7 +196,7 @@ interface_desc = "A forearm-mounted suit-powered ballistic submachine gun." gun_type = /obj/item/weapon/gun/energy/mountedsmg - + /obj/item/rig_module/mounted/xray name = "mounted xray laser gun" @@ -207,7 +207,7 @@ interface_desc = "A forearm-mounted suit-powered xray laser gun." gun_type = /obj/item/weapon/gun/energy/xray/mounted - + /obj/item/rig_module/mounted/ion name = "mounted ion rifle" @@ -219,6 +219,38 @@ gun_type = /obj/item/weapon/gun/energy/ionrifle/mounted +/obj/item/rig_module/mounted/plasmacutter + name = "hardsuit plasma cutter" + desc = "A forearm mounted kinetic accelerator" + icon_state = "plasmacutter" + interface_name = "plasma cutter" + interface_desc = "A self-sustaining plasma arc capable of cutting through walls." + suit_overlay_active = "plasmacutter" + suit_overlay_inactive = "plasmacutter" + construction_cost = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250) + construction_time = 300 + + gun_type = /obj/item/weapon/gun/energy/plasmacutter/mounted + +/obj/item/rig_module/mounted/kinetic_accelerator + name = "hardsuit kinetic accelerator" + desc = "A lethal-looking industrial cutter." + icon_state = "kineticgun" + interface_name = "kinetic accelerator" + interface_desc = "A ranged mining tool that does increased damage in low pressure." + + gun_type = /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg + +/obj/item/rig_module/mounted/thermalldrill + name = "hardsuit thermal drill" + desc = "An incredibly lethal looking thermal drill." + icon_state = "thermaldrill" + interface_name = "thermal drill" + interface_desc = "A potent drill that can pierce rock walls over long distances." + + gun_type = /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill + + /obj/item/rig_module/mounted/energy_blade name = "energy blade projector" diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index 11c9a713d42..6743c9b488d 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -261,6 +261,10 @@ ..() src.module = module +/stat_rig_module/Destroy() + module = null + return ..() + /stat_rig_module/proc/AddHref(var/list/href_list) return diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 4f4fab6f600..16c89569fc0 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -1,6 +1,5 @@ /* Contains: * /obj/item/rig_module/device - * /obj/item/rig_module/device/plasmacutter * /obj/item/rig_module/device/healthscanner * /obj/item/rig_module/device/drill * /obj/item/rig_module/device/orescanner @@ -28,20 +27,6 @@ var/device_type var/obj/item/device -/obj/item/rig_module/device/plasmacutter - name = "hardsuit plasma cutter" - desc = "A lethal-looking industrial cutter." - icon_state = "plasmacutter" - interface_name = "plasma cutter" - interface_desc = "A self-sustaining plasma arc capable of cutting through walls." - suit_overlay_active = "plasmacutter" - suit_overlay_inactive = "plasmacutter" - use_power_cost = 0.5 - construction_cost = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250) - construction_time = 300 - - device_type = /obj/item/weapon/pickaxe/plasmacutter - /obj/item/rig_module/device/healthscanner name = "health scanner module" desc = "A hardsuit-mounted health scanner." @@ -54,7 +39,7 @@ device_type = /obj/item/device/healthanalyzer /obj/item/rig_module/device/drill - name = "hardsuit drill mount" + name = "hardsuit diamond drill mount" desc = "A very heavy diamond-tipped drill." icon_state = "drill" interface_name = "mounted drill" @@ -67,6 +52,18 @@ device_type = /obj/item/weapon/pickaxe/diamonddrill +/obj/item/rig_module/device/basicdrill + name = "hardsuit drill mount" + desc = "A very heavy basic drill." + icon_state = "drill" + interface_name = "mounted drill" + interface_desc = "A basic industrial drill." + suit_overlay_active = "mounted-drill" + suit_overlay_inactive = "mounted-drill" + use_power_cost = 0.1 + + device_type = /obj/item/weapon/pickaxe/drill + /obj/item/rig_module/device/anomaly_scanner name = "hardsuit anomaly scanner" desc = "You think it's called an Elder Sarsparilla or something." diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm index 53695df857f..0e643aa05ed 100644 --- a/code/modules/clothing/spacesuits/rig/modules/vision.dm +++ b/code/modules/clothing/spacesuits/rig/modules/vision.dm @@ -28,6 +28,11 @@ /datum/rig_vision/meson/New() glasses = new /obj/item/clothing/glasses/meson +/datum/rig_vision/material + mode = "meson scanner" +/datum/rig_vision/material/New() + glasses = new /obj/item/clothing/glasses/material + /datum/rig_vision/sechud mode = "security HUD" /datum/rig_vision/sechud/New() @@ -83,7 +88,7 @@ /obj/item/rig_module/vision/meson - name = "hardsuit meson scanner" + name = "hardsuit meson/material scanner" desc = "A layered, translucent visor system for a hardsuit." icon_state = "meson" @@ -92,10 +97,11 @@ construction_cost = list("glass"=5000,DEFAULT_WALL_MATERIAL=1500) construction_time = 300 - interface_name = "meson scanner" - interface_desc = "An integrated meson scanner." + interface_name = "meson/material scanner" + interface_desc = "An integrated meson/material scanner." - vision_modes = list(/datum/rig_vision/meson) + vision_modes = list(/datum/rig_vision/meson, + /datum/rig_vision/material) /obj/item/rig_module/vision/thermal diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 743041f3c48..1d4c14838f6 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -94,18 +94,18 @@ usr << "The maintenance panel is [open ? "open" : "closed"]." usr << "Hardsuit systems are [offline ? "offline" : "online"]." -/obj/item/weapon/rig/New() - ..() +/obj/item/weapon/rig/Initialize() + . = ..() item_state = icon_state wires = new(src) - if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len)) + if(!LAZYLEN(req_access) && !LAZYLEN(req_one_access)) locked = 0 spark_system = bind_spark(src, 5) - processing_objects |= src + START_PROCESSING(SSprocessing, src) if(initial_modules && initial_modules.len) for(var/path in initial_modules) @@ -158,7 +158,7 @@ if(istype(M)) M.drop_from_inventory(piece) qdel(piece) - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) qdel(wires) wires = null qdel(spark_system) @@ -844,9 +844,14 @@ if(!wearer.lastarea) wearer.lastarea = get_area(wearer.loc) - if((istype(wearer.loc, /turf/space)) || (wearer.lastarea.has_gravity == 0)) - if(!wearer.Process_Spacemove(0)) + if(!wearer.check_solid_ground()) + var/allowmove = wearer.Allow_Spacemove(0) + if(!allowmove) return 0 + else if(allowmove == -1 && wearer.handle_spaceslipping()) //Check to see if we slipped + return 0 + else + wearer.inertia_dir = 0 //If not then we can reset inertia and move if(malfunctioning) direction = pick(cardinal) diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index 6e2461e6e31..0b54c3986c2 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -67,5 +67,5 @@ /obj/item/rig_module/power_sink, /obj/item/rig_module/chem_dispenser/combat, /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/device/plasmacutter + /obj/item/rig_module/mounted/plasmacutter ) diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm index 678657626a8..de59cfdcfcb 100644 --- a/code/modules/clothing/spacesuits/rig/suits/ert.dm +++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm @@ -39,7 +39,7 @@ /obj/item/rig_module/ai_container, /obj/item/rig_module/vision/meson, /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/plasmacutter, + /obj/item/rig_module/mounted/plasmacutter, /obj/item/rig_module/device/rcd ) @@ -104,7 +104,7 @@ /obj/item/rig_module/mounted/pulse, /obj/item/rig_module/chem_dispenser/combat, /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/device/plasmacutter, + /obj/item/rig_module/mounted/plasmacutter, /obj/item/rig_module/device/rcd, /obj/item/rig_module/datajack ) diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index b80d456359e..3b56e45540b 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -77,7 +77,7 @@ /obj/item/weapon/rig/industrial/equipped initial_modules = list( - /obj/item/rig_module/device/plasmacutter, + /obj/item/rig_module/mounted/plasmacutter, /obj/item/rig_module/device/drill, /obj/item/rig_module/device/orescanner, /obj/item/rig_module/device/rcd, @@ -109,7 +109,7 @@ /obj/item/weapon/rig/eva/equipped initial_modules = list( - /obj/item/rig_module/device/plasmacutter, + /obj/item/rig_module/mounted/plasmacutter, /obj/item/rig_module/maneuvering_jets, /obj/item/rig_module/device/rcd, /obj/item/rig_module/vision/meson @@ -145,7 +145,7 @@ initial_modules = list( /obj/item/rig_module/ai_container, /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/plasmacutter, + /obj/item/rig_module/mounted/plasmacutter, /obj/item/rig_module/device/rcd, /obj/item/rig_module/vision/meson ) diff --git a/code/modules/clothing/spacesuits/rig/suits/terminator.dm b/code/modules/clothing/spacesuits/rig/suits/terminator.dm index d450537a5c4..f1ac57db98c 100644 --- a/code/modules/clothing/spacesuits/rig/suits/terminator.dm +++ b/code/modules/clothing/spacesuits/rig/suits/terminator.dm @@ -25,7 +25,7 @@ /obj/item/rig_module/vision, /obj/item/rig_module/voice, /obj/item/rig_module/datajack, - /obj/item/rig_module/device/plasmacutter + /obj/item/rig_module/mounted/plasmacutter ) /obj/item/clothing/head/helmet/space/rig/terminator @@ -52,5 +52,5 @@ /obj/item/rig_module/vision, /obj/item/rig_module/voice, /obj/item/rig_module/datajack, - /obj/item/rig_module/device/plasmacutter + /obj/item/rig_module/mounted/plasmacutter ) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 423cb7ee10a..235808b9c7e 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -31,8 +31,8 @@ light_wedge = LIGHT_WIDE on = 0 -/obj/item/clothing/head/helmet/space/initialize() - ..() +/obj/item/clothing/head/helmet/space/Initialize() + . = ..() if(camera_networks && camera_networks.len) verbs += /obj/item/clothing/head/helmet/space/proc/toggle_camera diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index d7ca80e760b..0919fcca4d3 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -6,6 +6,7 @@ desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing." armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.3 + brightness_on = 6 /obj/item/clothing/suit/space/syndicate name = "red space suit" diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm index 941338dae88..7247d28960d 100644 --- a/code/modules/clothing/spacesuits/void/merc.dm +++ b/code/modules/clothing/spacesuits/void/merc.dm @@ -13,6 +13,7 @@ species_restricted = list("Human", "Vaurca", "Machine") camera_networks = list(NETWORK_MERCENARY) light_overlay = "helmet_light_green" //todo: species-specific light overlays + brightness_on = 6 /obj/item/clothing/suit/space/void/merc icon_state = "rig-syndie" diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index f6fb0ae6b0b..4813055a981 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -9,6 +9,7 @@ slot_r_hand_str = "eng_helm" ) armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80) + brightness_on = 6 /obj/item/clothing/suit/space/void/engineering name = "engineering voidsuit" @@ -34,6 +35,7 @@ ) armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20) light_overlay = "helmet_light_dual" + brightness_on = 6 /obj/item/clothing/suit/space/void/mining icon_state = "rig-mining" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 9fb30b498f1..12fbb7642bb 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -27,7 +27,7 @@ if (pockets) qdel(pockets) pockets = null - ..() + return ..() /obj/item/clothing/suit/armor/attack_hand(mob/user as mob) if (pockets) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 2bac0f9ee6c..2fcbf17ce04 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -11,7 +11,7 @@ /obj/item/clothing/suit/storage/Destroy() qdel(pockets) pockets = null - ..() + return ..() /obj/item/clothing/suit/storage/attack_hand(mob/user as mob) if (pockets.handle_attack_hand(user)) diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index a8423bd1b44..72546649e1a 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -151,7 +151,7 @@ /obj/item/clothing/suit/bomb_suit/Destroy() processing_objects.Remove(src) - ..() + return ..() /obj/item/clothing/head/bomb_hood/security diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 480cb22092d..163afc3ee79 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -35,7 +35,7 @@ /obj/item/weapon/reagent_containers/glass/rag/Destroy() processing_objects -= src //so we don't continue turning to ash while gc'd - ..() + return ..() /obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob) if(on_fire) diff --git a/code/modules/detectivework/tools/swabs.dm b/code/modules/detectivework/tools/swabs.dm index 696e3994b08..7faaa6d39f1 100644 --- a/code/modules/detectivework/tools/swabs.dm +++ b/code/modules/detectivework/tools/swabs.dm @@ -82,7 +82,7 @@ choices |= "Blood" if(istype(A, /obj/item/clothing)) choices |= "Gunshot Residue" - if(A.other_DNA && A.other_DNA_type == "saliva") + if(LAZYLEN(A.other_DNA) && A.other_DNA_type == "saliva") choices |= "Saliva" var/choice @@ -113,7 +113,7 @@ sample_type = "residue" if ("Saliva") - if (!A.other_DNA || !length(A.other_DNA)) return + if (!LAZYLEN(A.other_DNA)) return dna = A.other_DNA.Copy() sample_type = "saliva" diff --git a/code/modules/detectivework/tools/uvlight.dm b/code/modules/detectivework/tools/uvlight.dm index b2e62477855..22bb84301d7 100644 --- a/code/modules/detectivework/tools/uvlight.dm +++ b/code/modules/detectivework/tools/uvlight.dm @@ -40,7 +40,7 @@ stored_alpha.Cut() if(reset_objects.len) for(var/obj/item/I in reset_objects) - I.overlays -= I.blood_overlay + I.cut_overlay(I.blood_overlay, TRUE) if(I.fluorescent == 2) I.fluorescent = 1 reset_objects.Cut() @@ -64,5 +64,5 @@ if(istype(A, /obj/item)) var/obj/item/O = A if(O.was_bloodied && !(O.blood_overlay in O.overlays)) - O.overlays |= O.blood_overlay + O.add_overlay(O.blood_overlay, TRUE) reset_objects |= O diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 85edb8f37e7..73aeb647bcb 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -33,8 +33,8 @@ log transactions var/editing_security_level = 0 var/view_screen = NO_SCREEN -/obj/machinery/atm/initialize() - ..() +/obj/machinery/atm/Initialize() + . = ..() machine_id = "[station_name()] RT #[num_financial_terminals++]" /obj/machinery/atm/Destroy() diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index ef89fd62ae4..2d1a2fb36ae 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -161,4 +161,39 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) /obj/item/weapon/spacecash/ewallet/examine(mob/user) ..(user) if (!(user in view(2)) && user!=src.loc) return - user << "\blue Charge card's owner: [src.owner_name]. Credit chips remaining: [src.worth]." + user << "Charge card's owner: [src.owner_name]. Credit chips remaining: [src.worth]." + +/obj/item/weapon/spacecash/ewallet/lotto + name = "lottery card" + desc = "A scratch-action charge card that contains a variable amount of money." + worth = 0 + var/scratched = 0 + +/obj/item/weapon/spacecash/ewallet/lotto/attack_self(mob/user) + if(!scratched) + user << "You initiate the simulated scratch action process on the charge card. . ." + if(do_after(user,5)) + switch(rand(1,100)) + if(1 to 29) + worth = rand(0,200) + user << "The card reads [worth]. Not your lucky day!" + if(30 to 59) + worth = 200 + user << "The card reads [worth]. At least you broke even." + if(60 to 79) + worth = pick(200,300,400,500) + user << "The card reads [worth]. That's a pretty penny!" + if(80 to 95) + worth = pick(500,600,700,800,900,1000) + user << "The card reads [worth]. Your luck is running high!" + if(95 to 99) + worth = pick(1000,2000,3000,4000,5000,6000,7000,8000,9000) + user << "The card reads [worth]. You're rich!" + if(100) + worth = pick(10000,20000,30000,40000,50000) + user << "The card reads [worth]. You're blessed!" + else + worth = 0 + user << "The card reads [worth]. Not your lucky day!" + scratched = 1 + owner_name = user.name \ No newline at end of file diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index 6f5d1b57962..f9b7ca07740 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -48,12 +48,13 @@ /var/list/economic_species_modifier = list( - /datum/species/human = 10, - /datum/species/skrell = 12, + /datum/species/human = 12, + /datum/species/skrell = 10, /datum/species/tajaran = 7, /datum/species/unathi = 7, - /datum/species/diona = 5, - /datum/species/vox = 1 + /datum/species/diona = 3, + /datum/species/machine = 3, + /datum/species/bug = 1 ) //---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel: diff --git a/code/modules/effects/_effect_system_docs.dm b/code/modules/effects/_effect_system_docs.dm index f8e830c9bd3..a99f90396ea 100644 --- a/code/modules/effects/_effect_system_docs.dm +++ b/code/modules/effects/_effect_system_docs.dm @@ -13,7 +13,7 @@ /datum/effect_system/proc/queue() - Called when the object is queued for update. Overriding procs should call ..() -/datum/effect_system/proc/process() +/datum/effect_system/process() - Called when the processor processes this effect. Return ..() to allow default behavior of self-destroying after one tick. Alternately; EFFECT_HALT, EFFECT_CONTINUE, and EFFECT_DESTROY can be used to tell the processor what to do with the object. diff --git a/code/modules/effects/effect_system.dm b/code/modules/effects/effect_system.dm index a68dcecb1ca..e6ac6507b97 100644 --- a/code/modules/effects/effect_system.dm +++ b/code/modules/effects/effect_system.dm @@ -12,16 +12,19 @@ /datum/effect_system/Destroy() if (holder) holder = null - ..() + STOP_EFFECT(src) + return ..() // Queues an effect. /datum/effect_system/proc/queue() - if (effect_master) - effect_master.queue(src) + if (holder) + set_loc(holder) + if (SSeffects) + QUEUE_EFFECT(src) return TRUE return FALSE -/datum/effect_system/proc/process() +/datum/effect_system/process(elapsed) if (holder) location = get_turf(holder) return EFFECT_HALT @@ -31,7 +34,7 @@ holder = target /datum/effect_system/proc/set_loc(var/atom/movable/loc) - if (istype(loc, /turf/)) + if (isturf(loc)) location = loc else location = get_turf(loc) diff --git a/code/modules/effects/sparks/procs.dm b/code/modules/effects/sparks/procs.dm index 910e991c160..e0bb9101b9c 100644 --- a/code/modules/effects/sparks/procs.dm +++ b/code/modules/effects/sparks/procs.dm @@ -3,7 +3,7 @@ new /datum/effect_system/sparks(get_turf(loc), TRUE, amount, spread_dirs) /proc/bind_spark(var/atom/movable/loc, var/amount = 1, var/spread_dirs = cardinal) - var/datum/effect_system/sparks/S = new /datum/effect_system/sparks(loc, FALSE, amount, spread_dirs) + var/datum/effect_system/sparks/S = new(loc, FALSE, amount, spread_dirs) S.bind(loc) return S diff --git a/code/modules/effects/sparks/spawner.dm b/code/modules/effects/sparks/spawner.dm index 1ed6b8db2ff..843424c6d1e 100644 --- a/code/modules/effects/sparks/spawner.dm +++ b/code/modules/effects/sparks/spawner.dm @@ -20,32 +20,26 @@ ..(start_immediately) -/datum/effect_system/sparks/queue() - if (holder) - location = get_turf(holder) - - return ..() - /datum/effect_system/sparks/process() . = ..() var/total_sparks = 1 if (location) - var/obj/visual_effect/sparks/S = getFromPool(/obj/visual_effect/sparks, location, src, 0) //Trigger one on the tile it's on + var/obj/visual_effect/sparks/S = new(location, src, 0) //Trigger one on the tile it's on S.start() playsound(location, "sparks", 100, 1) - effects_visuals += S // Queue it. + QUEUE_VISUAL(S) // Queue it. while (total_sparks <= src.amount) playsound(location, "sparks", 100, 1) var/direction = 0 - if (src.spread && src.spread.len) - direction = 0 - else + if (LAZYLEN(src.spread)) direction = pick(src.spread) + else + direction = 0 - S = getFromPool(/obj/visual_effect/sparks, location, src) + S = new /obj/visual_effect/sparks(location, src) S.start(direction) - effects_visuals += S + QUEUE_VISUAL(S) total_sparks++ diff --git a/code/modules/effects/sparks/visuals.dm b/code/modules/effects/sparks/visuals.dm index 7e55170e3d1..f83cd1b426e 100644 --- a/code/modules/effects/sparks/visuals.dm +++ b/code/modules/effects/sparks/visuals.dm @@ -20,7 +20,8 @@ animate(src, alpha = 0, time = 2, easing = SINE_EASING | EASE_IN) /obj/visual_effect/sparks/start(var/direction) - ..() if (direction) - spawn (5) - step(src, direction) + addtimer(CALLBACK(src, .proc/do_step, direction), 5) + +/obj/visual_effect/sparks/proc/do_step(direction) + step(src, direction) diff --git a/code/modules/effects/visual_effect.dm b/code/modules/effects/visual_effect.dm index 454d1e3c2fe..9bf33ce91f2 100644 --- a/code/modules/effects/visual_effect.dm +++ b/code/modules/effects/visual_effect.dm @@ -4,7 +4,9 @@ anchored = 1 simulated = 0 mouse_opacity = 0 - var/life_ticks // How many ticks this effect will life before it stops processing. + var/life_ticks // How many ticks this effect will live before it stops processing. + // Will be set to a random number between life_ticks_min and life_ticks_max if unspecified. + var/life_ticks_max // The high limit for the random tick picker. var/life_ticks_min // The low limit for the random tick picker. @@ -12,8 +14,8 @@ ..() life_ticks_min = life_min life_ticks_max = life_max - life_ticks = rand(life_ticks_min, life_ticks_max) - flick(icon_state, src) + if (!life_ticks) + life_ticks = rand(life_ticks_min, life_ticks_max) // Called when the visual_effect is manifested. /obj/visual_effect/proc/start() @@ -26,10 +28,6 @@ life_ticks-- return EFFECT_CONTINUE -// Called just before the visual_effect is returned to the pool. -/obj/visual_effect/proc/end() - loc = null - /obj/visual_effect/Destroy() - // ¯\_(ツ)_/¯ - // This runtimes in expansions.dm if ..() is called. + STOP_VISUAL(src) + return ..() diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 2442f13677d..4957c41184c 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -20,8 +20,10 @@ /datum/event/carp_migration/start() if(severity == EVENT_LEVEL_MAJOR) spawn_fish(landmarks_list.len) + spawn_caverndweller(landmarks_list.len) else if(severity == EVENT_LEVEL_MODERATE) spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups + spawn_caverndweller(rand(1, 2)) //less of those, also don't happen in the regular event else spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs @@ -38,13 +40,28 @@ while (i <= num_groups) var/group_size = rand(group_size_min, group_size_max) for (var/j = 1, j <= group_size, j++) - spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i])) + var/mob/living/simple_animal/hostile/carp/carp = new(spawn_locations[i]) + spawned_carp += "\ref[carp]" + i++ + +/datum/event/carp_migration/proc/spawn_caverndweller(var/num_groups, var/group_size_min=3, var/group_size_max=5) + var/list/spawn_locations = list() + + for(var/obj/effect/landmark/C in landmarks_list) + if(C.name == "cavernspawn") + spawn_locations.Add(C.loc) + spawn_locations = shuffle(spawn_locations) + num_groups = min(num_groups, spawn_locations.len) + + var/i = 1 + while (i <= num_groups) + var/group_size = rand(group_size_min, group_size_max) + for (var/j = 1, j <= group_size, j++) + spawned_carp.Add(new /mob/living/simple_animal/hostile/retaliate/cavern_dweller(spawn_locations[i])) i++ /datum/event/carp_migration/end() - for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp) - if(!C.stat) - var/turf/T = get_turf(C) - if(istype(T, /turf/space)) - if(!prob(50)) - qdel(C) + for (var/carp_ref in spawned_carp) + var/mob/living/simple_animal/hostile/carp/fish = locate(carp_ref) + if (fish && istype(fish.loc, /turf/space) && prob(50)) + qdel(fish) diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm index d1df5889e87..ae94c88719f 100644 --- a/code/modules/events/event.dm +++ b/code/modules/events/event.dm @@ -29,7 +29,7 @@ if(!enabled) return 0 - if(excluded_gamemodes.len && (ticker.mode in excluded_gamemodes)) + if(excluded_gamemodes.len && (SSticker.mode in excluded_gamemodes)) // There's no way it'll be run this round anyways. enabled = 0 return 0 @@ -116,7 +116,7 @@ //Do not override this proc, instead use the appropiate procs. //This proc will handle the calls to the appropiate procs. -/datum/event/proc/process() +/datum/event/process() if(activeFor > startWhen && activeFor < endWhen) tick() diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 6e502275277..4857108eadb 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -21,7 +21,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT var/last_world_time = 0 -/datum/event_container/proc/process() +/datum/event_container/process() if(!next_event_time) set_event_delay() @@ -164,7 +164,6 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 100), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 1),0,10,125, list("Extended")), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 50, list(ASSIGNMENT_SECURITY = 25)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 50, list(ASSIGNMENT_ENGINEER = 7)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 50, list(ASSIGNMENT_SECURITY = 25)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 12), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Major Vermin Infestation", /datum/event/infestation, 60, list(ASSIGNMENT_JANITOR = 15, ASSIGNMENT_SECURITY = 15)) diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm index 9b5425fe3ca..9fdbbd935e3 100644 --- a/code/modules/events/infestation.dm +++ b/code/modules/events/infestation.dm @@ -172,7 +172,7 @@ num-- if(vermin == VERM_SPIDERS) - var/obj/effect/spider/spiderling/S = new(T) + var/obj/effect/spider/spiderling/S = new /obj/effect/spider/spiderling(T) S.amount_grown = 1 S.growth_rate = (rand(50,300)/1000)//At most, they grow at 30% the usual rate. As low as 1/20th if (severity == EVENT_LEVEL_MODERATE) @@ -213,4 +213,4 @@ #undef VERM_DIYAAB #undef VERM_BATS #undef VERM_YITHIAN -#undef VERM_TINDALOS \ No newline at end of file +#undef VERM_TINDALOS diff --git a/code/modules/events/shipping_error.dm b/code/modules/events/shipping_error.dm index ba1492e65ac..45d6bdcfeaa 100644 --- a/code/modules/events/shipping_error.dm +++ b/code/modules/events/shipping_error.dm @@ -1,6 +1,6 @@ /datum/event/shipping_error/start() var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)] + O.ordernum = SScargo.ordernum + O.object = SScargo.supply_packs[pick(SScargo.supply_packs)] O.orderedby = random_name(pick(MALE,FEMALE), species = "Human") - supply_controller.shoppinglist += O \ No newline at end of file + SScargo.shoppinglist += O diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm index d64ebbfcb15..9577157e2b5 100644 --- a/code/modules/events/wallrot.dm +++ b/code/modules/events/wallrot.dm @@ -6,26 +6,27 @@ datum/event/wallrot/announce() command_announcement.Announce("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert") datum/event/wallrot/start() - spawn() - var/turf/simulated/wall/center = null + set waitfor = FALSE + + var/turf/simulated/wall/center = null - // 100 attempts - for(var/i=0, i<100, i++) - var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1) - if(istype(candidate, /turf/simulated/wall)) - center = candidate + // 100 attempts + for(var/i=0, i<100, i++) + var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1) + if(istype(candidate, /turf/simulated/wall)) + center = candidate - if(center) - // Make sure at least one piece of wall rots! - center.rot() + if(center) + // Make sure at least one piece of wall rots! + center.rot() - // Have a chance to rot lots of other walls. - var/rotcount = 0 - var/actual_severity = severity * rand(10, 20) - for(var/turf/simulated/wall/W in range(12, center)) if(prob(30)) - W.rot() - rotcount++ + // Have a chance to rot lots of other walls. + var/rotcount = 0 + var/actual_severity = severity * rand(10, 20) + for(var/turf/simulated/wall/W in range(12, center)) if(prob(30)) + W.rot() + rotcount++ - // Only rot up to severity walls - if(rotcount >= actual_severity) - break \ No newline at end of file + // Only rot up to severity walls + if(rotcount >= actual_severity) + break diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 757d692c3a0..998b563a38b 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -261,35 +261,34 @@ proc/check_panel(mob/M) New() ..() - spawn(300) - if(my_target) - my_target.hallucinations -= src - qdel(src) + addtimer(CALLBACK(src, .proc/end), 300) step_away(src,my_target,2) spawn attack_loop() + proc/end() + if (my_target) + my_target.hallucinations -= src + + walk(src, 0) + qdel(src) proc/updateimage() - // qdel(src.currentimage) - - if(src.dir == NORTH) - qdel(src.currentimage) + del currentimage // Can't qdel images. src.currentimage = new /image(up,src) else if(src.dir == SOUTH) - qdel(src.currentimage) + del currentimage src.currentimage = new /image(down,src) else if(src.dir == EAST) - qdel(src.currentimage) + del currentimage src.currentimage = new /image(right,src) else if(src.dir == WEST) - qdel(src.currentimage) + del currentimage src.currentimage = new /image(left,src) my_target << currentimage - proc/attack_loop() - while(1) + while(!QDELETED(src)) sleep(rand(5,10)) if(src.health < 0) collapse() @@ -328,9 +327,7 @@ proc/check_panel(mob/M) O.name = "blood" var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1) target << I - spawn(300) - qdel(O) - return + QDEL_IN(O, 300) var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_magazine/a357,\ /obj/item/weapon/gun/energy/crossbow, /obj/item/weapon/melee/energy/sword,\ diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 2917f8c2ceb..a2431f5e95e 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -161,7 +161,7 @@ //This could all be done better, but it works for now. /obj/machinery/computer/HolodeckControl/Destroy() emergencyShutdown() - ..() + return ..() /obj/machinery/computer/HolodeckControl/ex_act(severity) emergencyShutdown() diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index ca092df49f8..b7eed760381 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -74,13 +74,14 @@ plane = PLANE_SPACE_BACKGROUND dynamic_lighting = 0 -/turf/simulated/floor/holofloor/space/New() +/turf/simulated/floor/holofloor/space/Initialize() + . = ..() icon_state = "[((x + y) ^ ~(x * y) + z) % 25]" var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]") I.plane = PLANE_SPACE_DUST I.alpha = 80 I.blend_mode = BLEND_ADD - overlays += I + add_overlay(I) /turf/simulated/floor/holofloor/beach desc = "Uncomfortably gritty for a hologram." @@ -120,10 +121,10 @@ initial_flooring = null footstep_sound = "gravelstep" -/turf/simulated/floor/holofloor/desert/New() - ..() +/turf/simulated/floor/holofloor/desert/Initialize() + . = ..() if(prob(10)) - overlays += "asteroid[rand(0,9)]" + add_overlay("asteroid[rand(0,9)]") /obj/structure/holostool name = "stool" @@ -139,7 +140,7 @@ item_state = "boxing" /obj/structure/window/reinforced/holowindow/Destroy() - ..() + return ..() /obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob) if(!istype(W)) return//I really wish I did not need this @@ -195,10 +196,10 @@ return /obj/structure/window/reinforced/holowindow/disappearing/Destroy() - ..() + return ..() /obj/machinery/door/window/holowindoor/Destroy() - ..() + return ..() /obj/machinery/door/window/holowindoor/attackby(obj/item/weapon/I as obj, mob/user as mob) @@ -236,7 +237,7 @@ qdel(src) /obj/structure/bed/chair/holochair/Destroy() - ..() + return ..() /obj/structure/bed/chair/holochair/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wrench)) diff --git a/code/modules/hydroponics/beekeeping/net.dm b/code/modules/hydroponics/beekeeping/net.dm index a07e35d6e7d..ed789df002b 100644 --- a/code/modules/hydroponics/beekeeping/net.dm +++ b/code/modules/hydroponics/beekeeping/net.dm @@ -90,7 +90,7 @@ if (target.strength <= 0) qdel(target) - if (target && !target.gcDestroyed) + if (!QDELETED(target)) target.update_icons() @@ -141,4 +141,4 @@ B.update_icons() caught_bees = 0 - feralbees = 0 \ No newline at end of file + feralbees = 0 diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 995e372de8a..a202813a21e 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -11,8 +11,7 @@ var/datum/seed/seed var/potency = -1 -/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc,planttype) - +/obj/item/weapon/reagent_containers/food/snacks/grown/New(loca, planttype) ..() if(!dried_type) dried_type = type @@ -26,14 +25,12 @@ if(!plantname) return - if(!plant_controller) - sleep(250) // ugly hack, should mean roundstart plants are fine. - if(!plant_controller) + if(!SSplants) world << "Plant controller does not exist and [src] requires it. Aborting." qdel(src) return - seed = plant_controller.seeds[plantname] + seed = SSplants.seeds[plantname] if(!seed) return @@ -63,15 +60,13 @@ if(!seed) return - if(!plant_controller) - sleep(250) // ugly hack, should mean roundstart plants are fine. - if(!plant_controller) + if(!SSplants) world << "Plant controller does not exist and [src] requires it. Aborting." qdel(src) return - if(plant_controller.product_descs["[seed.uid]"]) - desc = plant_controller.product_descs["[seed.uid]"] + if(SSplants.product_descs["[seed.uid]"]) + desc = SSplants.product_descs["[seed.uid]"] else var/list/descriptors = list() if(reagents.has_reagent("sugar") || reagents.has_reagent("cherryjelly") || reagents.has_reagent("honey") || reagents.has_reagent("berryjuice")) @@ -123,17 +118,17 @@ desc += " mushroom" else desc += " fruit" - plant_controller.product_descs["[seed.uid]"] = desc + SSplants.product_descs["[seed.uid]"] = desc desc += ". Delicious! Probably." /obj/item/weapon/reagent_containers/food/snacks/grown/update_icon() - if(!seed || !plant_controller || !plant_controller.plant_icon_cache) + if(!seed || !SSplants || !SSplants.plant_icon_cache) return - overlays.Cut() + cut_overlays() var/image/plant_icon var/icon_key = "fruit-[seed.get_trait(TRAIT_PRODUCT_ICON)]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]-[seed.get_trait(TRAIT_PLANT_COLOUR)]" - if(plant_controller.plant_icon_cache[icon_key]) - plant_icon = plant_controller.plant_icon_cache[icon_key] + if(SSplants.plant_icon_cache[icon_key]) + plant_icon = SSplants.plant_icon_cache[icon_key] else plant_icon = image('icons/obj/hydroponics_products.dmi',"blank") var/image/fruit_base = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-product") @@ -143,8 +138,8 @@ var/image/fruit_leaves = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-leaf") fruit_leaves.color = "[seed.get_trait(TRAIT_PLANT_COLOUR)]" plant_icon.overlays |= fruit_leaves - plant_controller.plant_icon_cache[icon_key] = plant_icon - overlays |= plant_icon + SSplants.plant_icon_cache[icon_key] = plant_icon + add_overlay(plant_icon) /obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) if(seed && seed.get_trait(TRAIT_JUICY) == 2) @@ -339,8 +334,8 @@ var/list/fruit_icon_cache = list() -/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/New(var/newloc, var/datum/seed/S) - ..(newloc) +/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/Initialize(mapload, datum/seed/S) + . = ..() // Need to go through and make a general image caching controller. Todo. if(!istype(S)) qdel(src) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 01fd8764d83..f0797a61063 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -8,9 +8,8 @@ var/plantname var/potency = 1 -/obj/item/weapon/grown/New(newloc,planttype) - - ..() +/obj/item/weapon/grown/Initialize(newloc,planttype) + . = ..() var/datum/reagents/R = new/datum/reagents(50) reagents = R @@ -19,7 +18,7 @@ //Handle some post-spawn var stuff. if(planttype) plantname = planttype - var/datum/seed/S = plant_controller.seeds[plantname] + var/datum/seed/S = SSplants.seeds[plantname] if(!S || !S.chems) return diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index cd9fd93f325..a3300f23f00 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -62,9 +62,7 @@ set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick. set_trait(TRAIT_PLANT_COLOUR, "#46B543") // Colour of the plant icon. - spawn(5) - sleep(-1) - update_growth_stages() + addtimer(CALLBACK(src, .proc/update_growth_stages), 5) /datum/seed/proc/get_trait(var/trait) return traits["[trait]"] @@ -335,8 +333,8 @@ seed_noun = pick("spores","nodes","cuttings","seeds") set_trait(TRAIT_POTENCY,rand(5,30),200,0) - set_trait(TRAIT_PRODUCT_ICON,pick(plant_controller.plant_product_sprites)) - set_trait(TRAIT_PLANT_ICON,pick(plant_controller.plant_sprites)) + set_trait(TRAIT_PRODUCT_ICON,pick(SSplants.plant_product_sprites)) + set_trait(TRAIT_PLANT_ICON,pick(SSplants.plant_sprites)) set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]") set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]") update_growth_stages() @@ -662,10 +660,10 @@ if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." //This may be a new line. Update the global if it is. - if(name == "new line" || !(name in plant_controller.seeds)) - uid = plant_controller.seeds.len + 1 + if(name == "new line" || !(name in SSplants.seeds)) + uid = SSplants.seeds.len + 1 name = "[uid]" - plant_controller.seeds[name] = src + SSplants.seeds[name] = src if(harvest_sample) var/obj/item/seeds/seeds = new(get_turf(user)) @@ -747,6 +745,6 @@ /datum/seed/proc/update_growth_stages() if(get_trait(TRAIT_PLANT_ICON)) - growth_stages = plant_controller.plant_sprites[get_trait(TRAIT_PLANT_ICON)] + growth_stages = SSplants.plant_sprites[get_trait(TRAIT_PLANT_ICON)] else growth_stages = 0 diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index b1d31343444..2fd3b580ece 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -144,8 +144,8 @@ var/list/data = list() var/list/geneMasks[0] - for(var/gene_tag in plant_controller.gene_tag_masks) - geneMasks.Add(list(list("tag" = gene_tag, "mask" = plant_controller.gene_tag_masks[gene_tag]))) + for(var/gene_tag in SSplants.gene_tag_masks) + geneMasks.Add(list(list("tag" = gene_tag, "mask" = SSplants.gene_tag_masks[gene_tag]))) data["geneMasks"] = geneMasks data["activity"] = active @@ -186,10 +186,10 @@ if(!seed) return seed.loc = get_turf(src) - if(seed.seed.name == "new line" || isnull(plant_controller.seeds[seed.seed.name])) - seed.seed.uid = plant_controller.seeds.len + 1 + if(seed.seed.name == "new line" || isnull(SSplants.seeds[seed.seed.name])) + seed.seed.uid = SSplants.seeds.len + 1 seed.seed.name = "[seed.seed.uid]" - plant_controller.seeds[seed.seed.name] = seed.seed + SSplants.seeds[seed.seed.name] = seed.seed seed.update_seed() visible_message("\icon[src] [src] beeps and spits out [seed].") @@ -242,8 +242,8 @@ if(!genetics.roundstart) loaded_disk.genesource += " (variety #[genetics.uid])" - loaded_disk.name += " ([plant_controller.gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])" - loaded_disk.desc += " The label reads \'gene [plant_controller.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'." + loaded_disk.name += " ([SSplants.gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])" + loaded_disk.desc += " The label reads \'gene [SSplants.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'." eject_disk = 1 degradation += rand(20,60) @@ -288,7 +288,7 @@ for(var/datum/plantgene/P in loaded_disk.genes) if(data["locus"] != "") data["locus"] += ", " - data["locus"] += "[plant_controller.gene_tag_masks[P.genetype]]" + data["locus"] += "[SSplants.gene_tag_masks[P.genetype]]" else data["disk"] = 0 @@ -318,7 +318,7 @@ last_action = world.time active = 1 - if(!isnull(plant_controller.seeds[seed.seed.name])) + if(!isnull(SSplants.seeds[seed.seed.name])) seed.seed = seed.seed.diverge(1) seed.seed_type = seed.seed.name seed.update_seed() diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index f033c8d08cf..7d35cd0322b 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -11,16 +11,14 @@ var/global/list/plant_seed_sprites = list() var/datum/seed/seed var/modified = 0 -/obj/item/seeds/New() - while(!plant_controller) - sleep(30) +/obj/item/seeds/Initialize() update_seed() - ..() + . = ..() //Grabs the appropriate seed datum from the global list. /obj/item/seeds/proc/update_seed() - if(!seed && seed_type && !isnull(plant_controller.seeds) && plant_controller.seeds[seed_type]) - seed = plant_controller.seeds[seed_type] + if(!seed && seed_type && !isnull(SSplants.seeds) && SSplants.seeds[seed_type]) + seed = SSplants.seeds[seed_type] update_appearance() //Updates strings and icon appropriately based on seed datum. @@ -28,7 +26,7 @@ var/global/list/plant_seed_sprites = list() if(!seed) return // Update icon. - overlays.Cut() + cut_overlays() var/is_seeds = ((seed.seed_noun in list("seeds","pits","nodes")) ? 1 : 0) var/image/seed_mask var/seed_base_key = "base-[is_seeds ? seed.get_trait(TRAIT_PLANT_COLOUR) : "spores"]" @@ -49,8 +47,8 @@ var/global/list/plant_seed_sprites = list() seed_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) plant_seed_sprites[seed_overlay_key] = seed_overlay - overlays |= seed_mask - overlays |= seed_overlay + add_overlay(seed_mask) + add_overlay(seed_overlay) if(is_seeds) src.name = "packet of [seed.seed_name] [seed.seed_noun]" @@ -75,10 +73,10 @@ var/global/list/plant_seed_sprites = list() /obj/item/seeds/random seed_type = null -/obj/item/seeds/random/New() - seed = plant_controller.create_random_seed() +/obj/item/seeds/random/Initialize() + seed = SSplants.create_random_seed() seed_type = seed.name - update_seed() + . = ..() /obj/item/seeds/replicapod seed_type = "diona" diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 84ed688e5f4..634b10655f7 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -27,7 +27,6 @@ use_power = 1 idle_power_usage = 100 - var/initialized = 0 // Map-placed ones break if seeds are loaded right at the start of the round, so we do it on the first interaction var/list/datum/seed_pile/piles = list() var/list/starting_seeds = list() var/list/scanner = list() // What properties we can view @@ -40,31 +39,110 @@ /obj/machinery/seed_storage/garden name = "Garden seed storage" scanner = list("stats") - starting_seeds = list(/obj/item/seeds/appleseed = 3, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3, /obj/item/seeds/koisspore = 3) + starting_seeds = list( + /obj/item/seeds/appleseed = 3, + /obj/item/seeds/bananaseed = 3, + /obj/item/seeds/berryseed = 3, + /obj/item/seeds/cabbageseed = 3, + /obj/item/seeds/carrotseed = 3, + /obj/item/seeds/chantermycelium = 3, + /obj/item/seeds/cherryseed = 3, + /obj/item/seeds/chiliseed = 3, + /obj/item/seeds/cocoapodseed = 3, + /obj/item/seeds/cornseed = 3, + /obj/item/seeds/eggplantseed = 3, + /obj/item/seeds/grapeseed = 3, + /obj/item/seeds/grassseed = 3, + /obj/item/seeds/replicapod = 3, + /obj/item/seeds/lemonseed = 3, + /obj/item/seeds/limeseed = 3, + /obj/item/seeds/mtearseed = 2, + /obj/item/seeds/orangeseed = 3, + /obj/item/seeds/peanutseed = 3, + /obj/item/seeds/plumpmycelium = 3, + /obj/item/seeds/poppyseed = 3, + /obj/item/seeds/potatoseed = 3, + /obj/item/seeds/pumpkinseed = 3, + /obj/item/seeds/riceseed = 3, + /obj/item/seeds/soyaseed = 3, + /obj/item/seeds/sugarcaneseed = 3, + /obj/item/seeds/sunflowerseed = 3, + /obj/item/seeds/shandseed = 2, + /obj/item/seeds/tobaccoseed = 3, + /obj/item/seeds/tomatoseed = 3, + /obj/item/seeds/towermycelium = 3, + /obj/item/seeds/watermelonseed = 3, + /obj/item/seeds/wheatseed = 3, + /obj/item/seeds/whitebeetseed = 3, + /obj/item/seeds/koisspore = 3 + ) /obj/machinery/seed_storage/xenobotany name = "Xenobotany seed storage" scanner = list("stats", "produce", "soil", "temperature", "light") - starting_seeds = list(/obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/appleseed = 3, /obj/item/seeds/amanitamycelium = 2, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/libertymycelium = 2, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/nettleseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plastiseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/reishimycelium = 2, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3, /obj/item/seeds/koisspore = 3) + starting_seeds = list( + /obj/item/seeds/ambrosiavulgarisseed = 3, + /obj/item/seeds/appleseed = 3, + /obj/item/seeds/amanitamycelium = 2, + /obj/item/seeds/bananaseed = 3, + /obj/item/seeds/berryseed = 3, + /obj/item/seeds/cabbageseed = 3, + /obj/item/seeds/carrotseed = 3, + /obj/item/seeds/chantermycelium = 3, + /obj/item/seeds/cherryseed = 3, + /obj/item/seeds/chiliseed = 3, + /obj/item/seeds/cocoapodseed = 3, + /obj/item/seeds/cornseed = 3, + /obj/item/seeds/replicapod = 3, + /obj/item/seeds/eggplantseed = 3, + /obj/item/seeds/glowshroom = 2, + /obj/item/seeds/grapeseed = 3, + /obj/item/seeds/grassseed = 3, + /obj/item/seeds/lemonseed = 3, + /obj/item/seeds/libertymycelium = 2, + /obj/item/seeds/limeseed = 3, + /obj/item/seeds/mtearseed = 2, + /obj/item/seeds/nettleseed = 2, + /obj/item/seeds/orangeseed = 3, + /obj/item/seeds/peanutseed = 3, + /obj/item/seeds/plastiseed = 3, + /obj/item/seeds/plumpmycelium = 3, + /obj/item/seeds/poppyseed = 3, + /obj/item/seeds/potatoseed = 3, + /obj/item/seeds/pumpkinseed = 3, + /obj/item/seeds/reishimycelium = 2, + /obj/item/seeds/riceseed = 3, + /obj/item/seeds/soyaseed = 3, + /obj/item/seeds/sugarcaneseed = 3, + /obj/item/seeds/sunflowerseed = 3, + /obj/item/seeds/shandseed = 2, + /obj/item/seeds/tobaccoseed = 3, + /obj/item/seeds/tomatoseed = 3, + /obj/item/seeds/towermycelium = 3, + /obj/item/seeds/watermelonseed = 3, + /obj/item/seeds/wheatseed = 3, + /obj/item/seeds/whitebeetseed = 3, + /obj/item/seeds/koisspore = 3 + ) /obj/machinery/seed_storage/attack_hand(mob/user as mob) user.set_machine(src) interact(user) +/obj/machinery/seed_storage/Initialize() + . = ..() + for(var/typepath in starting_seeds) + var/amount = starting_seeds[typepath] + if(isnull(amount)) amount = 1 + + for (var/i = 1 to amount) + var/O = new typepath + add(O) + /obj/machinery/seed_storage/interact(mob/user as mob) if (..()) return - if (!initialized) - for(var/typepath in starting_seeds) - var/amount = starting_seeds[typepath] - if(isnull(amount)) amount = 1 - - for (var/i = 1 to amount) - var/O = new typepath - add(O) - initialized = 1 - var/dat = "

Seed storage contents

" if (piles.len == 0) dat += "No seeds" diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index d76cdce7e6b..5b35a7347ab 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -2,23 +2,25 @@ #define VINE_GROWTH_STAGES 5 /proc/spacevine_infestation(var/potency_min=70, var/potency_max=100, var/maturation_min=5, var/maturation_max=15) - spawn() //to stop the secrets panel hanging - var/turf/T = pick_area_turf(/area/hallway, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects)) - if(T) - var/datum/seed/seed = plant_controller.create_random_seed(1) - seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines. - seed.set_trait(TRAIT_POTENCY,rand(potency_min, potency_max)) // 70-100 potency will help guarantee a wide spread and powerful effects. - seed.set_trait(TRAIT_MATURATION,rand(maturation_min, maturation_max)) + set waitfor = FALSE - //make vine zero start off fully matured - var/obj/effect/plant/vine = new(T,seed) - vine.health = vine.max_health - vine.mature_time = 0 - vine.process() + var/turf/T = pick_area_turf(/area/hallway, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects)) + if(T) + var/datum/seed/seed = SSplants.create_random_seed(1) + seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines. + seed.set_trait(TRAIT_POTENCY,rand(potency_min, potency_max)) // 70-100 potency will help guarantee a wide spread and powerful effects. + seed.set_trait(TRAIT_MATURATION,rand(maturation_min, maturation_max)) - log_and_message_admins("Spacevines spawned at \the [get_area(T)]", location = T) - return - log_and_message_admins("Event: Spacevines failed to find a viable turf.") + //make vine zero start off fully matured + var/obj/effect/plant/vine = new(T,seed) + vine.health = vine.max_health + vine.mature_time = 0 + vine.process() + + log_and_message_admins("Spacevines spawned at \the [get_area(T)]", location = T) + return + + log_and_message_admins("Event: Spacevines failed to find a viable turf.") /obj/effect/dead_plant anchored = 1 @@ -65,31 +67,32 @@ var/last_biolum = null /obj/effect/plant/Destroy() - if(plant_controller) - plant_controller.remove_plant(src) + if(SSplants) + STOP_PROCESSING(SSplants, src) for(var/obj/effect/plant/neighbor in range(1,src)) - plant_controller.add_plant(neighbor) - ..() + if (!QDELETED(neighbor)) + START_PROCESSING(SSplants, neighbor) + return ..() + /obj/effect/plant/single spread_chance = 0 -/obj/effect/plant/New(var/newloc, var/datum/seed/newseed, var/obj/effect/plant/newparent) - ..() + +/obj/effect/plant/Initialize(mapload, datum/seed/newseed, obj/effect/plant/newparent) + . = ..() if(!newparent) parent = src else parent = newparent - if(!plant_controller) - sleep(250) // ugly hack, should mean roundstart plants are fine. - if(!plant_controller) + if(!SSplants) world << "Plant controller does not exist and [src] requires it. Aborting." qdel(src) return if(!istype(newseed)) - newseed = plant_controller.seeds[DEFAULT_SEED] + newseed = SSplants.seeds[DEFAULT_SEED] seed = newseed if(!seed) qdel(src) @@ -118,17 +121,19 @@ mature_time = world.time + seed.get_trait(TRAIT_MATURATION) + 15 //prevent vines from maturing until at least a few seconds after they've been created. spread_chance = seed.get_trait(TRAIT_POTENCY) - spread_distance = ((growth_type>0) ? round(spread_chance*0.6) : round(spread_chance*0.3)) + spread_distance = ((growth_type > 0) ? round(spread_chance * 0.6) : round(spread_chance * 0.3)) update_icon() + addtimer(CALLBACK(src, .proc/post_initialize), 1) - spawn(1) // Plants will sometimes be spawned in the turf adjacent to the one they need to end up in, for the sake of correct dir/etc being set. - set_dir(calc_dir()) - update_icon() - plant_controller.add_plant(src) - // Some plants eat through plating. - if(islist(seed.chems) && !isnull(seed.chems["pacid"])) - var/turf/T = get_turf(src) - T.ex_act(prob(80) ? 3 : 2) +// Plants will sometimes be spawned in the turf adjacent to the one they need to end up in, for the sake of correct dir/etc being set. +/obj/effect/plant/proc/post_initialize() + set_dir(calc_dir()) + update_icon() + START_PROCESSING(SSplants, src) + // Some plants eat through plating. + if(islist(seed.chems) && !isnull(seed.chems["pacid"])) + var/turf/T = get_turf(src) + T.ex_act(prob(80) ? 3 : 2) /obj/effect/plant/update_icon() //TODO: should really be caching this. @@ -234,7 +239,7 @@ /obj/effect/plant/attackby(var/obj/item/weapon/W, var/mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - plant_controller.add_plant(src) + START_PROCESSING(SSplants, src) if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel)) if(sampled) diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index 0b8ead04763..9c99d25756d 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -18,7 +18,7 @@ continue if(floor.density) if(!isnull(seed.chems["pacid"])) - spawn(rand(5,25)) floor.ex_act(3) + addtimer(CALLBACK(floor, /atom/.proc/ex_act, 3), rand(5, 25)) continue if(!Adjacent(floor) || !floor.Enter(src)) continue @@ -29,7 +29,6 @@ neighbor.neighbors -= T /obj/effect/plant/process() - // Something is very wrong, kill ourselves. if(!seed) die_off() @@ -79,24 +78,31 @@ //spread to 1-3 adjacent turfs depending on yield trait. var/max_spread = between(1, round(seed.get_trait(TRAIT_YIELD)*3/14), 3) - for(var/i in 1 to max_spread) - if(prob(spread_chance)) - sleep(rand(3,5)) - if(!neighbors.len) - break - var/turf/target_turf = pick(neighbors) - var/obj/effect/plant/child = new(get_turf(src),seed,parent) - spawn(1) // This should do a little bit of animation. - child.loc = target_turf - child.update_icon() - // Update neighboring squares. - for(var/obj/effect/plant/neighbor in range(1,target_turf)) - neighbor.neighbors -= target_turf + addtimer(CALLBACK(src, .proc/do_spread, spread_chance, max_spread), 1) // We shouldn't have spawned if the controller doesn't exist. check_health() if(neighbors.len || health != max_health) - plant_controller.add_plant(src) + START_PROCESSING(SSplants, src) + +/obj/effect/plant/proc/do_spread(spread_chance, max_spread) + for(var/i in 1 to max_spread) + if(prob(spread_chance)) + sleep(rand(3,5)) + if(!neighbors.len) + return + + var/turf/target_turf = pick(neighbors) + var/obj/effect/plant/child = new(get_turf(src),seed,parent) + // This should do a little bit of animation. + addtimer(CALLBACK(src, .proc/do_move, target_turf, child), 1) + // Update neighboring squares. + for(var/obj/effect/plant/neighbor in range(1,target_turf)) + neighbor.neighbors -= target_turf + +/obj/effect/plant/proc/do_move(turf/target, obj/effect/plant/child) + child.loc = target + child.update_icon() /obj/effect/plant/proc/die_off() // Kill off our plant. @@ -107,7 +113,8 @@ continue for(var/obj/effect/plant/neighbor in check_turf.contents) neighbor.neighbors |= check_turf - plant_controller.add_plant(neighbor) - spawn(1) if(src) qdel(src) + START_PROCESSING(SSplants, neighbor) -#undef NEIGHBOR_REFRESH_TIME \ No newline at end of file + QDEL_IN(src, 1) + +#undef NEIGHBOR_REFRESH_TIME diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index 2b9407aecd0..6fd167f6bf8 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -10,8 +10,7 @@ if(!buckled_mob && !M.buckled && !M.anchored && (issmall(M) || prob(round(seed.get_trait(TRAIT_POTENCY)/6)))) //wait a tick for the Entered() proc that called HasProximity() to finish (and thus the moving animation), //so we don't appear to teleport from two tiles away when moving into a turf adjacent to vines. - spawn(1) - entangle(M) + addtimer(CALLBACK(src, .proc/entangle, M), 1) /obj/effect/plant/attack_hand(var/mob/user) manual_unbuckle(user) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 7a025071f95..3c8117f7f7b 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -340,7 +340,7 @@ //Remove the seed if something is already planted. if(seed) seed = null - seed = plant_controller.seeds[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))] + seed = SSplants.seeds[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))] if(!seed) return //Weed does not exist, someone fucked up. dead = 0 @@ -370,7 +370,7 @@ // We need to make sure we're not modifying one of the global seed datums. // If it's not in the global list, then no products of the line have been // harvested yet and it's safe to assume it's restricted to this tray. - if(!isnull(plant_controller.seeds[seed.name])) + if(!isnull(SSplants.seeds[seed.name])) seed = seed.diverge() seed.mutate(severity,get_turf(src)) @@ -426,8 +426,8 @@ var/previous_plant = seed.display_name var/newseed = seed.get_mutant_variant() - if(newseed in plant_controller.seeds) - seed = plant_controller.seeds[newseed] + if(newseed in SSplants.seeds) + seed = SSplants.seeds[newseed] else return diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index 90bc1ec986b..2b8fedd3723 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -78,4 +78,4 @@ for(var/obj/effect/plant/plant in get_turf(src)) if(plant.invisibility == INVISIBILITY_MAXIMUM) plant.invisibility = initial(plant.invisibility) - ..() + return ..() diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index acac05f0f3c..2d1e78d8ea6 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -52,13 +52,13 @@ else if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown)) var/obj/item/weapon/reagent_containers/food/snacks/grown/G = target - grown_seed = plant_controller.seeds[G.plantname] + grown_seed = SSplants.seeds[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/weapon/grown)) var/obj/item/weapon/grown/G = target - grown_seed = plant_controller.seeds[G.plantname] + grown_seed = SSplants.seeds[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/seeds)) diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm index bcee0352797..a4d1c19ee91 100644 --- a/code/modules/hydroponics/trays/tray_update_icons.dm +++ b/code/modules/hydroponics/trays/tray_update_icons.dm @@ -12,20 +12,20 @@ if(labelled) name += " ([labelled])" - overlays.Cut() + cut_overlays() // Updates the plant overlay. if(!isnull(seed)) if(mechanical && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2)) - overlays += "over_lowhealth3" + add_overlay("over_lowhealth3") if(dead) var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead" - var/image/dead_overlay = plant_controller.plant_icon_cache["[ikey]"] + var/image/dead_overlay = SSplants.plant_icon_cache["[ikey]"] if(!dead_overlay) dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") dead_overlay.color = DEAD_PLANT_COLOUR - overlays |= dead_overlay + add_overlay(dead_overlay) else if(!seed.growth_stages) seed.update_growth_stages() @@ -41,36 +41,37 @@ maturation = 1 overlay_stage = maturation ? max(1,round(age/maturation)) : 1 var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]" - var/image/plant_overlay = plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] + var/image/plant_overlay = SSplants.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] if(!plant_overlay) plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]") plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR) - plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay - overlays |= plant_overlay + SSplants.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay + + add_overlay(plant_overlay) if(harvest && overlay_stage == seed.growth_stages) ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]" - var/image/harvest_overlay = plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] + var/image/harvest_overlay = SSplants.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] if(!harvest_overlay) harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]") harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay - overlays |= harvest_overlay + SSplants.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay + add_overlay(harvest_overlay) //Draw the cover. if(closed_system) - overlays += "hydrocover" + add_overlay("hydrocover") //Updated the various alert icons. if(mechanical) if(waterlevel <= 10) - overlays += "over_lowwater3" + add_overlay("over_lowwater3") if(nutrilevel <= 2) - overlays += "over_lownutri3" + add_overlay("over_lownutri3") if(weedlevel >= 5 || pestlevel >= 5 || toxins >= 40) - overlays += "over_alert3" + add_overlay("over_alert3") if(harvest) - overlays += "over_harvest3" + add_overlay("over_harvest3") // Update bioluminescence. if(seed && seed.get_trait(TRAIT_BIOLUM)) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index ef11e5e69fa..0d1793adbf1 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -19,7 +19,8 @@ density = 1 opacity = 1 -/obj/structure/bookcase/initialize() +/obj/structure/bookcase/Initialize() + . = ..() for(var/obj/item/I in loc) if(istype(I, /obj/item/weapon/book)) I.loc = src @@ -295,4 +296,4 @@ user << "Computer has been associated with this unit." else user << "No associated computer found. Only local scans will function properly." - user << "\n" \ No newline at end of file + user << "\n" diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 7d78916525e..f3b5ef515f7 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -276,11 +276,11 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f if(!bibledelay) var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(src.loc) - if(ticker && ( ticker.Bible_icon_state && ticker.Bible_item_state) ) - B.icon_state = ticker.Bible_icon_state - B.item_state = ticker.Bible_item_state - B.name = ticker.Bible_name - B.deity_name = ticker.Bible_deity_name + if((SSticker.Bible_icon_state && SSticker.Bible_item_state) ) + B.icon_state = SSticker.Bible_icon_state + B.item_state = SSticker.Bible_item_state + B.name = SSticker.Bible_name + B.deity_name = SSticker.Bible_deity_name bibledelay = 1 spawn(60) diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 437c1d680e4..2309e367dc0 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -57,15 +57,13 @@ // Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf... /atom/proc/update_light() set waitfor = FALSE - if (gcDestroyed) + if (QDELING(src)) return L_PROF(src, "atom_update") if (!light_power || !light_range) // We won't emit light anyways, destroy the light source. - if(light) - light.destroy() - light = null + QDEL_NULL(light) else if (!istype(loc, /atom/movable)) // We choose what atom should be the top atom of the light here. . = src @@ -77,24 +75,6 @@ else light = new/datum/light_source(src, .) -// Incase any lighting vars are on in the typepath we turn the light on in New(). -/atom/New() - . = ..() - - if (light_power && light_range) - update_light() - - if (opacity && isturf(loc)) - var/turf/T = loc - T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways. - -// Destroy our light source so we GC correctly. -/atom/Destroy() - if (light) - light.destroy() - light = null - . = ..() - // If we have opacity, make sure to tell (potentially) affected light sources. /atom/movable/Destroy() var/turf/T = loc @@ -131,14 +111,14 @@ /atom/Entered(var/atom/movable/Obj, var/atom/OldLoc) //Implemented here because forceMove() doesn't call Move() . = ..() - if (Obj && OldLoc != src) + if (Obj && OldLoc != src && Obj.light_sources && Obj.light_sources.len) for (var/datum/light_source/L in Obj.light_sources) // Cycle through the light sources on this atom and tell them to update. L.source_atom.update_light() /atom/Exited(var/atom/movable/Obj, var/atom/newloc) . = ..() - if (!newloc && Obj && newloc != src) // Incase the atom is being moved to nullspace, we handle queuing for a lighting update here. + if (!newloc && Obj && newloc != src && Obj.light_sources && Obj.light_sources.len) // Incase the atom is being moved to nullspace, we handle queuing for a lighting update here. for (var/datum/light_source/L in Obj.light_sources) // Cycle through the light sources on this atom and tell them to update. L.source_atom.update_light() @@ -148,3 +128,4 @@ for (var/datum/light_source/L in src.light_sources) if (L.light_angle) L.source_atom.update_light() + diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 917ac1625b0..7a3e45e89d8 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -1,4 +1,3 @@ -/var/list/datum/lighting_corner/all_lighting_corners = list() /var/datum/lighting_corner/dummy/dummy_lighting_corner = new // Because we can control each corner of every lighting overlay. // And corners get shared between multiple turfs (unless you're on the corners of the map, then 1 corner doesn't). @@ -34,7 +33,7 @@ /datum/lighting_corner/New(var/turf/new_turf, var/diagonal) . = ..() - all_lighting_corners += src + SSlighting.lighting_corners += src masters[new_turf] = turn(diagonal, 180) z = new_turf.z @@ -102,7 +101,7 @@ if (!now) needs_update = TRUE update_overlays(FALSE) - lighting_update_corners += src + SSlighting.corner_queue += src else update_overlays(TRUE) @@ -117,11 +116,19 @@ else if (mx < LIGHTING_SOFT_THRESHOLD) . = 0 // 0 means soft lighting. +#ifdef LIGHTING_USE_MEMORY_HACK cache_r = lum_r * . + (rand(1,999)/100000) || LIGHTING_SOFT_THRESHOLD cache_g = lum_g * . + (rand(1,999)/100000) || LIGHTING_SOFT_THRESHOLD cache_b = lum_b * . + (rand(1,999)/100000) || LIGHTING_SOFT_THRESHOLD cache_u = lum_u * . || LIGHTING_SOFT_THRESHOLD cache_mx = mx +#else + cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_u = lum_u * . || LIGHTING_SOFT_THRESHOLD + cache_mx = round(mx, LIGHTING_ROUND_VALUE) +#endif for (var/TT in masters) var/turf/T = TT @@ -130,7 +137,15 @@ T.lighting_overlay.update_overlay() else if (!T.lighting_overlay.needs_update) T.lighting_overlay.needs_update = TRUE - lighting_update_overlays += T.lighting_overlay + SSlighting.overlay_queue += T.lighting_overlay + +/datum/lighting_corner/Destroy(force = FALSE) + crash_with("Some fuck [force ? "force-" : ""]deleted a lighting corner.") + if (!force) + return QDEL_HINT_LETMELIVE + + SSlighting.lighting_corners -= src + return ..() /datum/lighting_corner/dummy/New() return diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 724b09df019..20a5aa8bc04 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -1,5 +1,3 @@ -/var/list/all_lighting_overlays = list() // Global list of lighting overlays. - /atom/movable/lighting_overlay name = "" anchored = TRUE @@ -21,7 +19,7 @@ /atom/movable/lighting_overlay/New(atom/loc, no_update = FALSE) . = ..() verbs.Cut() - global.all_lighting_overlays += src + SSlighting.lighting_overlays += src var/turf/T = loc // If this runtimes atleast we'll know what's creating overlays in things that aren't turfs. T.lighting_overlay = src @@ -34,17 +32,20 @@ /atom/movable/lighting_overlay/Destroy() L_PROF(loc, "overlay_destroy") - global.all_lighting_overlays -= src - global.lighting_update_overlays -= src + SSlighting.lighting_overlays -= src + SSlighting.overlay_queue -= src var/turf/T = loc if (istype(T)) T.lighting_overlay = null T.luminosity = 1 - - ..() + + return ..() /atom/movable/lighting_overlay/proc/update_overlay() + if (QDELING(src)) // This shouldn't happen. + return + var/turf/T = loc if (!istype(T)) // Erm... if (loc) @@ -78,15 +79,53 @@ var/datum/lighting_corner/ca = T.corners[1] || dummy_lighting_corner var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) + luminosity = max > LIGHTING_SOFT_THRESHOLD - color = list( +// The RNG introduced by LIGHTING_USE_MEMORY_HACK makes this shortcut ineffective. +#ifndef LIGHTING_USE_MEMORY_HACK + var/rr = cr.cache_r + var/rg = cr.cache_g + var/rb = cr.cache_b + + var/gr = cg.cache_r + var/gg = cg.cache_g + var/gb = cg.cache_b + + var/br = cb.cache_r + var/bg = cb.cache_g + var/bb = cb.cache_b + + var/ar = ca.cache_r + var/ag = ca.cache_g + var/ab = ca.cache_b + + // Check for a common value first so we can skip expensive color matrixes if possible. + var/all_equal = ((rr == gr && gr == br && br == ar) && (rg == gg && gg == bg && bg == ag) && (rb == gb && gb == bb && bb == ab)) + + if (!luminosity) + icon_state = LIGHTING_DARKNESS_ICON_STATE + color = null + else if (all_equal && rr == LIGHTING_DEFAULT_TUBE_R && rg == LIGHTING_DEFAULT_TUBE_G && rb == LIGHTING_DEFAULT_TUBE_B) + icon_state = LIGHTING_STATION_ICON_STATE + color = null + else + icon_state = LIGHTING_BASE_ICON_STATE + color = list( + rr, rg, rb, 0, + gr, gg, gb, 0, + br, bg, bb, 0, + ar, ag, ab, 0, + 0, 0, 0, 1 + ) +#else + color = list( cr.cache_r, cr.cache_g, cr.cache_b, 0, cg.cache_r, cg.cache_g, cg.cache_b, 0, cb.cache_r, cb.cache_g, cb.cache_b, 0, ca.cache_r, ca.cache_g, ca.cache_b, 0, 0, 0, 0, 1 ) - luminosity = max > LIGHTING_SOFT_THRESHOLD +#endif // Variety of overrides so the overlays don't get affected by weird things. @@ -102,6 +141,9 @@ /atom/movable/lighting_overlay/singuloCanEat() return FALSE +/atom/movable/lighting_overlay/can_fall() + return FALSE + // Override here to prevent things accidentally moving around overlays. /atom/movable/lighting_overlay/forceMove(atom/destination, no_tp = FALSE, harderforce = FALSE) if(harderforce) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm deleted file mode 100644 index c38b768cfd7..00000000000 --- a/code/modules/lighting/lighting_setup.dm +++ /dev/null @@ -1,84 +0,0 @@ -/proc/create_lighting_overlays_zlevel(var/zlevel) - ASSERT(zlevel) - - for (var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))) - if (!T.dynamic_lighting) - continue - - var/area/A = T.loc - if (!A.dynamic_lighting) - continue - - new /atom/movable/lighting_overlay(T, TRUE) - -// This repeats a bit of code from the lighting process. -/proc/initialize_lighting() - admin_notice(span("danger", "Generating lighting overlays (1/4)..."), R_DEBUG) - for (var/zlevel = 1 to world.maxz) - create_lighting_overlays_zlevel(zlevel) - CHECK_TICK - - admin_notice(span("danger", "Initializing light sources (2/4)..."), R_DEBUG) - var/num_lights = 0 - var/list/lights = lighting_update_lights - lighting_update_lights = list() - - while (lights.len) - var/datum/light_source/L = lights[lights.len] - lights.len-- - - if (!L) continue - - if (L.destroyed || L.check() || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - num_lights++ - CHECK_TICK - - admin_notice(span("danger", "Processed [num_lights] light sources."), R_DEBUG) - - admin_notice(span("danger", "Initializing lighting corners (3/4)..."), R_DEBUG) - var/num_corners = 0 - var/list/corners = lighting_update_corners - lighting_update_corners = list() - - while (corners.len) - var/datum/lighting_corner/C = corners[corners.len] - corners.len-- - - if (!C) continue - - C.update_overlays() - - C.needs_update = FALSE - num_corners++ - - CHECK_TICK - - admin_notice(span("danger", "Processed [num_corners] light corners."), R_DEBUG) - admin_notice(span("danger", "Initializing lighting overlays (4/4)..."), R_DEBUG) - var/num_overlays = 0 - var/list/overlays = lighting_update_overlays - lighting_update_overlays = list() - - while (overlays.len) - var/atom/movable/lighting_overlay/O = overlays[overlays.len] - overlays.len-- - - if (!O) continue - - O.update_overlay() - O.needs_update = FALSE - - num_overlays++ - CHECK_TICK - - admin_notice(span("danger", "Processed [num_overlays] light overlays."), R_DEBUG) diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index f7aefe77ea8..9cc9df58c85 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -80,23 +80,25 @@ return ..() // Kill ourselves. -/datum/light_source/proc/destroy(var/no_update = FALSE) +/datum/light_source/Destroy(force) L_PROF(source_atom, "source_destroy") - destroyed = TRUE - if (!no_update) - force_update() + force_update() if (source_atom && source_atom.light_sources) source_atom.light_sources -= src if (top_atom && top_atom.light_sources) top_atom.light_sources -= src + . = ..() + if (!force) + return QDEL_HINT_IWILLGC + // Process the light RIGHT NOW. #define DO_UPDATE \ - if (destroyed || check() || force_update) { \ + if (QDELETED(src) || check() || force_update) { \ remove_lum(TRUE); \ - if (!destroyed) { \ + if (!QDELETED(src)) { \ apply_lum(TRUE); \ } \ } \ @@ -111,13 +113,13 @@ #define QUEUE_UPDATE \ if (!needs_update) \ { \ - lighting_update_lights += src; \ + SSlighting.light_queue += src; \ needs_update = TRUE; \ } // Picks either scheduled or instant updates based on current server load. #define INTELLIGENT_UPDATE \ - if (world.tick_usage > TICK_LIMIT || !ticker || ticker.current_state <= GAME_STATE_SETTING_UP) { \ + if (world.tick_usage > SSlighting.instant_tick_limit || SSlighting.force_queued) { \ QUEUE_UPDATE; \ } \ else { \ @@ -160,7 +162,7 @@ // Will check if we actually need to update, and update any variables that may need to be updated. /datum/light_source/proc/check() if (!source_atom || !light_range || !light_power) - destroy(no_update = TRUE) + qdel(src) return 1 if (!top_atom) @@ -433,6 +435,8 @@ L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights. affecting_turfs -= L for (var/turf/T in L) + if (QDELETED(T)) + continue T.affecting_lights -= src for (var/datum/lighting_corner/C in corners - effect_str) // New corners diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 79a4b91c282..3ae58356979 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -9,12 +9,6 @@ var/tmp/list/datum/lighting_corner/corners var/tmp/has_opaque_atom = FALSE // Not to be confused with opacity, this will be TRUE if there's any opaque atom on the tile. -/turf/New() - . = ..() - - if (opacity) - has_opaque_atom = TRUE - // Causes any affecting light sources to be queued for a visibility update, for example a door got opened. /turf/proc/reconsider_lights() L_PROF(src, "turf_reconsider") @@ -29,7 +23,7 @@ /turf/proc/lighting_clear_overlay() if (lighting_overlay) - returnToPool(lighting_overlay) + qdel(lighting_overlay) L_PROF(src, "turf_clear_overlay") @@ -161,3 +155,31 @@ continue corners[i] = new/datum/lighting_corner(src, LIGHTING_CORNER_DIAGONAL[i]) + +/turf/ChangeTurf(turf/N, tell_universe = TRUE, force_lighting_update = FALSE) + if (!SSlighting) + return ..() + + var/old_opacity = opacity + var/old_dynamic_lighting = dynamic_lighting + var/list/old_affecting_lights = affecting_lights + var/old_lighting_overlay = lighting_overlay + var/list/old_corners = corners + + . = ..() + + recalc_atom_opacity() + lighting_overlay = old_lighting_overlay + affecting_lights = old_affecting_lights + corners = old_corners + if ((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) + reconsider_lights() + + if (dynamic_lighting != old_dynamic_lighting) + if (dynamic_lighting) + lighting_build_overlay() + else + lighting_clear_overlay() + + for (var/turf/space/S in RANGE_TURFS(1, src)) + S.update_starlight() diff --git a/code/modules/lighting/lighting_verbs.dm b/code/modules/lighting/lighting_verbs.dm index bc9e4561a74..ce14b59d8eb 100644 --- a/code/modules/lighting/lighting_verbs.dm +++ b/code/modules/lighting/lighting_verbs.dm @@ -38,9 +38,9 @@ var/list/admin_verbs_lighting = list( return log_and_message_admins("has flushed the lighting processor queues.") - lighting_update_lights = list() - lighting_update_corners = list() - lighting_update_overlays = list() + SSlighting.light_queue = list() + SSlighting.corner_queue = list() + SSlighting.overlay_queue = list() /client/proc/lighting_reconsider_target(turf/T in world) set category = "Lighting" diff --git a/code/modules/liquid/splash_simulation.dm b/code/modules/liquid/splash_simulation.dm index 983f46603df..1ba530a0f1a 100644 --- a/code/modules/liquid/splash_simulation.dm +++ b/code/modules/liquid/splash_simulation.dm @@ -7,7 +7,7 @@ var/list/datum/puddle/puddles = list() datum/puddle var/list/obj/effect/liquid/liquid_objects = list() -datum/puddle/proc/process() +datum/puddle/process() //world << "DEBUG: Puddle process!" for(var/obj/effect/liquid/L in liquid_objects) L.spread() @@ -26,7 +26,7 @@ datum/puddle/Destroy() puddles -= src for(var/obj/O in liquid_objects) qdel(O) - ..() + return ..() client/proc/splash() var/volume = input("Volume?","Volume?", 0 ) as num @@ -133,7 +133,7 @@ obj/effect/liquid/Move() obj/effect/liquid/Destroy() src.controller.liquid_objects.Remove(src) - ..() + return ..() obj/effect/liquid/proc/update_icon2() //icon_state = num2text( max(1,min(7,(floor(volume),10)/10)) ) @@ -199,4 +199,4 @@ obj/proc/liquid_pass() obj/machinery/door/liquid_pass() return !density -#undef LIQUID_TRANSFER_THRESHOLD \ No newline at end of file +#undef LIQUID_TRANSFER_THRESHOLD diff --git a/code/modules/maps/reader.dm b/code/modules/maps/reader.dm index fe0bbfe6a4f..6a803297e65 100644 --- a/code/modules/maps/reader.dm +++ b/code/modules/maps/reader.dm @@ -302,13 +302,6 @@ var/global/dmm_suite/preloader/_preloader = null placed.set_opacity(1) placed.underlays += turfs_underlays -//atom creation method that preloads variables at creation -/atom/New() - if(_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() - _preloader.load(src) - - . = ..() - ////////////////// //Preloader datum ////////////////// diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 164bc537594..66ba57f652e 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -568,9 +568,14 @@ var/list/name_to_material hardness = 500 weight = 500 +/material/voxalloy/elevatorium + name = "elevatorium" + display_name = "elevator panelling" + icon_colour = "#666666" + /material/wood name = "wood" - stack_type = /obj/item/stack/material/wood + stack_type = null icon_colour = "#824B28" integrity = 50 icon_base = "solid" @@ -588,6 +593,17 @@ var/list/name_to_material sheet_singular_name = "plank" sheet_plural_name = "planks" +/material/rust + name = "rust" + display_name = "rusty steel" + stack_type = null + icon_colour = "#B7410E" + icon_base = "arust" + integrity = 250 + explosion_resistance = 8 + hardness = 15 + weight = 18 + /material/wood/holographic name = "holowood" display_name = "wood" diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 4028cbc0ad2..b8db5b19a19 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -10,8 +10,8 @@ var/codelen = 4 locked = 1 -/obj/structure/closet/crate/secure/loot/New() - ..() +/obj/structure/closet/crate/secure/loot/Initialize() + . = ..() var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") for(var/i in 1 to codelen) @@ -94,7 +94,7 @@ if(79 to 80) new/obj/item/weapon/pickaxe/gold(src) if(81 to 82) - new/obj/item/weapon/pickaxe/plasmacutter(src) + new/obj/item/weapon/gun/energy/plasmacutter(src) if(83 to 84) new/obj/item/toy/katana(src) if(85) @@ -179,8 +179,8 @@ var/turf/T = get_turf(src.loc) explosion(T, 0, 0, 1, 2) qdel(src) - -/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user) + +/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user) if (locked) user << "The crate unlocks!" locked = 0 diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 54b1879704e..e3c786dc85e 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -7,7 +7,7 @@ /obj/machinery/mining/drill name = "mining drill head" - desc = "An enormous drill." + desc = "A large industrial drill. Its bore does not penetrate deep enough to access the sublevels." icon_state = "mining_drill" var/braces_needed = 2 var/list/supports = list() diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 180d84ff60e..8059ef7c8b7 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -1,24 +1,28 @@ /**********************Mineral processing unit console**************************/ /obj/machinery/mineral/processing_unit_console - name = "production machine console" + name = "ore redemption console" icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = 1 anchored = 1 + use_power = 1 + idle_power_usage = 15 + active_power_usage = 50 var/obj/machinery/mineral/processing_unit/machine = null - var/machinedir = EAST + var/machinedir = NORTHEAST var/show_all_ores = 0 + var/points = 0 + var/obj/item/weapon/card/id/inserted_id -/obj/machinery/mineral/processing_unit_console/New() - ..() - spawn(7) - src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir)) - if (machine) - machine.console = src - else - qdel(src) +/obj/machinery/mineral/processing_unit_console/Initialize() + . = ..() + src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir)) + if (machine) + machine.console = src + else + return INITIALIZE_HINT_QDEL /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) add_fingerprint(user) @@ -37,6 +41,14 @@ var/dat = "

Ore processor console

" + dat += "Current unclaimed points: [points]
" + + if(istype(inserted_id)) + dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
" + dat += "Claim points.
" + else + dat += "No ID inserted. Insert ID.
" + dat += "
" for(var/ore in machine.ores_processing) @@ -72,6 +84,32 @@ usr.set_machine(src) src.add_fingerprint(usr) + if(href_list["choice"]) + if(istype(inserted_id)) + if(href_list["choice"] == "eject") + inserted_id.loc = loc + if(!usr.get_active_hand()) + usr.put_in_hands(inserted_id) + inserted_id = null + if(href_list["choice"] == "claim") + if(access_mining_station in inserted_id.access) + if(points >= 0) + inserted_id.mining_points += points + if(points != 0) + ping( "\The [src] pings, \"Point transfer complete! Transaction total: [points] points!\"" ) + points = 0 + else + usr << "[station_name()]'s mining division is currently indebted to NanoTrasen. Transaction incomplete until debt is cleared." + else + usr << "Required access not found." + else if(href_list["choice"] == "insert") + var/obj/item/weapon/card/id/I = usr.get_active_hand() + if(istype(I)) + usr.drop_item() + I.loc = src + inserted_id = I + else usr << "No valid ID." + if(href_list["toggle_smelting"]) var/choice = input("What setting do you wish to use for processing [href_list["toggle_smelting"]]?") as null|anything in list("Smelting","Compressing","Alloying","Nothing") @@ -88,6 +126,10 @@ if(href_list["toggle_power"]) machine.active = !machine.active + if(machine.active) + machine.icon_state = "furnace" + else + machine.icon_state = "furnace-off" if(href_list["toggle_ores"]) @@ -100,23 +142,26 @@ /obj/machinery/mineral/processing_unit - name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron... + name = "industrial smelter" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron... //lol fuk u bay it is icon = 'icons/obj/machines/mining_machines.dmi' - icon_state = "furnace" + icon_state = "furnace-off" density = 1 anchored = 1 light_range = 3 var/obj/machinery/mineral/input = null var/obj/machinery/mineral/output = null - var/obj/machinery/mineral/console = null + var/obj/machinery/mineral/processing_unit_console/console = null var/sheets_per_tick = 10 var/list/ores_processing[0] var/list/ores_stored[0] var/static/list/alloy_data var/active = 0 + use_power = 1 + idle_power_usage = 15 + active_power_usage = 50 -/obj/machinery/mineral/processing_unit/New() - ..() +/obj/machinery/mineral/processing_unit/Initialize() + . = ..() // initialize static alloy_data list if(!alloy_data) @@ -131,18 +176,16 @@ ores_processing[OD.name] = 0 ores_stored[OD.name] = 0 - //Locate our output and input machinery. - spawn(5) - for (var/dir in cardinal) - src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) - if(src.input) break - for (var/dir in cardinal) - src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) - if(src.output) break - return - return +//Locate our output and input machinery. + for (var/dir in cardinal) + src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) + if(src.input) break + for (var/dir in cardinal) + src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) + if(src.output) break /obj/machinery/mineral/processing_unit/process() + ..() if (!src.output || !src.input) return @@ -158,6 +201,8 @@ qdel(O) if(!active) + if(icon_state != "furnace-off") + icon_state = "furnace-off" return //Process our stored ores and spit out sheets. @@ -197,6 +242,10 @@ else var/total for(var/needs_metal in A.requires) + if(console) + var/ore/Ore = ore_data[needs_metal] + console.points += Ore.worth + use_power(100) ores_stored[needs_metal] -= A.requires[needs_metal] total += A.requires[needs_metal] total = max(1,round(total*A.product_mod)) //Always get at least one sheet. @@ -216,6 +265,9 @@ continue for(var/i=0,iYou start feeding [W] into \the [src]" + if(do_after(user,30)) + src.visible_message("\The [src] begins to print out a modsuit.") + pressing = 1 + update_icon() + use_power(500) + qdel(W) + spawn(300) + ping( "\The [src] pings, \"Module successfuly produced!\"" ) + if(kineticaccelerator) + var/obj/item/rig_module/mounted/kinetic_accelerator/KA = new /obj/item/rig_module/mounted/kinetic_accelerator(src.loc) + var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/KGUN = KA.gun + for(var/obj/item/borg/upgrade/modkit/kmod in kinetic_mods) + KGUN.modkits += kmod + else + new outcome_path(src.loc) + use_power(500) + pressing = 0 + update_icon() + ..() diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 6e548c6aa5c..781180f4c13 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -7,18 +7,18 @@ density = 1 anchored = 1 var/obj/machinery/mineral/stacking_machine/machine = null - var/machinedir = SOUTHEAST + var/machinedir = NORTHEAST + use_power = 1 + idle_power_usage = 15 + active_power_usage = 50 -/obj/machinery/mineral/stacking_unit_console/New() - - ..() - - spawn(7) - src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) - if (machine) - machine.console = src - else - qdel(src) +/obj/machinery/mineral/stacking_unit_console/Initialize() + . = ..() + src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) + if (machine) + machine.console = src + else + return INITIALIZE_HINT_QDEL /obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user) add_fingerprint(user) @@ -77,9 +77,12 @@ var/list/stack_storage[0] var/list/stack_paths[0] var/stack_amt = 50; // Amount to stack before releassing + use_power = 1 + idle_power_usage = 15 + active_power_usage = 50 -/obj/machinery/mineral/stacking_machine/New() - ..() +/obj/machinery/mineral/stacking_machine/Initialize() + . = ..() for(var/stacktype in typesof(/obj/item/stack/material)-/obj/item/stack/material) var/obj/item/stack/S = new stacktype(src) @@ -94,17 +97,19 @@ stack_storage["plasteel"] = 0 stack_paths["plasteel"] = /obj/item/stack/material/plasteel - spawn( 5 ) - for (var/dir in cardinal) - src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) - if(src.input) break - for (var/dir in cardinal) - src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) - if(src.output) break - return - return + for (var/dir in cardinal) + src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) + if(src.input) break + for (var/dir in cardinal) + src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) + if(src.output) break /obj/machinery/mineral/stacking_machine/process() + ..() + if(!console) + log_debug("Stacking machine tried to process, but no console has linked itself to it.") + qdel(src) + return if (src.output && src.input) var/turf/T = get_turf(input) for(var/obj/item/O in T.contents) diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm index 1bbf7706ec2..0eba125f23b 100644 --- a/code/modules/mining/machine_unloading.dm +++ b/code/modules/mining/machine_unloading.dm @@ -7,23 +7,24 @@ icon_state = "unloader" density = 1 anchored = 1.0 + use_power = 1 + idle_power_usage = 15 + active_power_usage = 50 var/obj/machinery/mineral/input = null var/obj/machinery/mineral/output = null -/obj/machinery/mineral/unloading_machine/New() - ..() - spawn( 5 ) - for (var/dir in cardinal) - src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) - if(src.input) break - for (var/dir in cardinal) - src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) - if(src.output) break - return - return +/obj/machinery/mineral/unloading_machine/Initialize() + . = ..() + for (var/dir in cardinal) + src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) + if(src.input) break + for (var/dir in cardinal) + src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) + if(src.output) break /obj/machinery/mineral/unloading_machine/process() + ..() if (src.output && src.input) if (locate(/obj/structure/ore_box, input.loc)) var/obj/structure/ore_box/BOX = locate(/obj/structure/ore_box, input.loc) @@ -43,4 +44,4 @@ O.loc = src.output.loc else return - return \ No newline at end of file + return diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm new file mode 100644 index 00000000000..f10ae791235 --- /dev/null +++ b/code/modules/mining/machine_vending.dm @@ -0,0 +1,217 @@ +//PROGRESSION SYSTEM: Miners start with a basic ass manual pickaxe. They can shortly buy an autodrill, or save up for a /TG/ Kinetic Accelerator. +//HARDSUITS: Miners all start with an *empty* industrial hardsuit. Many of the items they can buy here (auto-drill, kinetic accelerator) can be converted into modules +// with a special machine. +//VENDOR: Obj/item's are immediately dispensed by the vendor. Machines, structures, vehicles, and etc get spawned on the cargo shuttle. +//Think up of lots of items. Not everything needs to be unique or even mining-special, but it should be neat. Convert most of /tg/'s items. 25% of this at least +// should be bling. Things that shorten the distance between base and mining. Instant-teleporters should be one use. +var/global/list/minevendor_list = list( //keep in order of price + new /datum/data/mining_equipment("Food Ration", /obj/item/weapon/reagent_containers/food/snacks/liquidfood, 5), + new /datum/data/mining_equipment("Poster", /obj/item/weapon/contraband/poster, 20), + new /datum/data/mining_equipment("Ore Scanner Pad", /obj/item/weapon/ore_radar, 50), + new /datum/data/mining_equipment("5 Red Flags", /obj/item/stack/flag/red, 50), + new /datum/data/mining_equipment("5 Green Flags", /obj/item/stack/flag/green, 50), + new /datum/data/mining_equipment("5 Yellow Flags", /obj/item/stack/flag/yellow, 50), + new /datum/data/mining_equipment("Ore-bag", /obj/item/weapon/storage/bag/ore, 50), + new /datum/data/mining_equipment("Meat Pizza", /obj/item/pizzabox/meat, 50), + new /datum/data/mining_equipment("Lantern", /obj/item/device/flashlight/lantern, 75), + new /datum/data/mining_equipment("Shovel", /obj/item/weapon/shovel, 100), + //new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack, 100), + new /datum/data/mining_equipment("Pickaxe", /obj/item/weapon/pickaxe, 100), + new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100), + new /datum/data/mining_equipment("Compressed rail cartridge", /obj/item/weapon/rrf_ammo, 100), + new /datum/data/mining_equipment("Emergency Floodlight", /obj/item/weapon/floodlight_diy, 150), + new /datum/data/mining_equipment("Premium Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150), + new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150), + new /datum/data/mining_equipment("Lottery Chip", /obj/item/weapon/spacecash/ewallet/lotto, 200), + new /datum/data/mining_equipment("Ripley Paint Kit", /obj/item/device/kit/paint/ripley/random, 200), + new /datum/data/mining_equipment("Material Scanners", /obj/item/clothing/glasses/material, 200), + new /datum/data/mining_equipment("Mining Drill", /obj/item/weapon/pickaxe/drill, 200), + new /datum/data/mining_equipment("Deep Ore Scanner", /obj/item/weapon/mining_scanner, 250), + new /datum/data/mining_equipment("Magboots", /obj/item/clothing/shoes/magboots, 300), + //new /datum/data/mining_equipment("Stimpack Bundle", /obj/item/weapon/storage/box/stims, 300), + new /datum/data/mining_equipment("Autochisel", /obj/item/weapon/autochisel, 400), + new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack, 400), + new /datum/data/mining_equipment("Drone Drill Upgrade", /obj/item/device/mine_bot_ugprade, 400), + new /datum/data/mining_equipment("Seismic Charge", /obj/item/weapon/plastique/seismic, 500), + new /datum/data/mining_equipment("Industrial Drill Brace", /obj/machinery/mining/brace, 500, 1), + new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500), + new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/weapon/storage/belt/mining, 500), + new /datum/data/mining_equipment("Item-Warp Beacon", /obj/item/warp_core, 500), + new /datum/data/mining_equipment("Item-Warp Pack", /obj/item/weapon/extraction_pack, 600), + new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/device/mine_bot_ugprade/health, 600), + new /datum/data/mining_equipment("Rapid-Railway-Fabricator", /obj/item/weapon/rrf, 600), + //new /datum/data/mining_equipment("Survival Autoinjector", /obj/item/weapon/reagent_containers/hypospray/autoinjector/survival, 600), + new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), + new /datum/data/mining_equipment("Ore Magnet", /obj/item/weapon/oremagnet, 600), + new /datum/data/mining_equipment("Minecart", /obj/vehicle/train/cargo/trolley/mining, 600, 1), + new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 700), + new /datum/data/mining_equipment("Mining RIG", /obj/item/weapon/rig/industrial, 750), + new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 750), + new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 750), + new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750), + new /datum/data/mining_equipment("1000 credits", /obj/item/weapon/spacecash/c1000, 800), + new /datum/data/mining_equipment("Mass Driver", /obj/item/weapon/mass_driver_diy, 800), + //new /datum/data/mining_equipment("Drone Plasma Cutter Upgrade", /obj/item/device/mine_bot_ugprade/plasma, 800), + new /datum/data/mining_equipment("Mining Drone", /mob/living/silicon/robot/drone/mining, 800), + new /datum/data/mining_equipment("Minecart Engine", /obj/vehicle/train/cargo/engine/mining, 800, 1), + new /datum/data/mining_equipment("Ore Summoner", /obj/item/weapon/oreportal, 800), + //new /datum/data/mining_equipment("Plasma Cutter", /obj/item/weapon/gun/energy/plasmacutter, 900), + //new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000), + new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000), + new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000), + new /datum/data/mining_equipment("Industrial Drill Head", /obj/machinery/mining/drill, 1000, 1), + new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 1250), + new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/turfs, 1500), + new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 1500), + new /datum/data/mining_equipment("Drone Thermal Drill Upgrade", /obj/item/device/mine_bot_ugprade/thermal, 2000), + new /datum/data/mining_equipment("Thermal Drill", /obj/item/weapon/gun/energy/vaurca/thermaldrill, 2750) + ) + +/obj/machinery/mineral/equipment_vendor + name = "mining equipment vendor" + desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here." + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "mining" + density = 1 + anchored = 1 + var/obj/item/weapon/card/id/inserted_id + +/datum/data/mining_equipment + var/equipment_name = "generic" + var/equipment_path = null + var/cost = 0 + var/shuttle + +/datum/data/mining_equipment/New(name, path, cost, shuttle) + src.equipment_name = name + src.equipment_path = path + src.cost = cost + src.shuttle = shuttle + +/obj/item/weapon/circuitboard/machine/mining_equipment_vendor + name = "circuit board (Mining Equipment Vendor)" + build_path = /obj/machinery/mineral/equipment_vendor + origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/matter_bin = 3) + +/obj/machinery/mineral/equipment_vendor/power_change() + ..() + update_icon() + +/obj/machinery/mineral/equipment_vendor/update_icon() + if(powered()) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]-off" + return + +/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/mineral/equipment_vendor/interact(mob/user) + var/dat + dat +="
" + if(istype(inserted_id)) + dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
" + else + dat += "No ID inserted. Insert ID.
" + dat += "
" + dat += "
Equipment point cost list:
" + for(var/datum/data/mining_equipment/prize in minevendor_list) + dat += "" + dat += "
[prize.equipment_name][prize.cost]Purchase
" + + var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350) + popup.set_content(dat) + popup.open() + return + +/obj/machinery/mineral/equipment_vendor/Topic(href, href_list) + if(..()) + return + if(href_list["choice"]) + if(istype(inserted_id)) + if(href_list["choice"] == "eject") + inserted_id.loc = loc + if(!usr.get_active_hand()) + usr.put_in_hands(inserted_id) + inserted_id = null + else if(href_list["choice"] == "insert") + var/obj/item/weapon/card/id/I = usr.get_active_hand() + if(istype(I)) + usr.drop_item() + I.loc = src + inserted_id = I + else usr << "No valid ID." + if(href_list["purchase"]) + if(istype(inserted_id)) + var/datum/data/mining_equipment/prize = locate(href_list["purchase"]) + if (!prize || !(prize in minevendor_list)) + return + if(prize.cost > inserted_id.mining_points) + else + if(prize.shuttle) + var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle + if(shuttle) + var/area/area_shuttle = shuttle.get_location_area() + if(!area_shuttle) + usr << "{ERR Code: NO_SHUTTLE} Order failed! Please try again." + return + + + var/list/clear_turfs = list() + + for(var/turf/T in area_shuttle) + if(T.density) continue + var/contcount + for(var/atom/A in T.contents) + if(!A.simulated) + continue + contcount++ + if(contcount) + continue + clear_turfs += T + + if(!clear_turfs.len) + usr << "{ERR Code: NO_SHUTTLE_SPACE} Order failed! Please try again." + return + + var/i = rand(1,clear_turfs.len) + var/turf/pickedloc = clear_turfs[i] + + if(pickedloc) + inserted_id.mining_points -= prize.cost + new prize.equipment_path(pickedloc) + usr << "Order passed. Your order has been placed on the next available supply shuttle." + else + usr << "{ERR Code: NO_SHUTTLE_SPACE} Order failed! Please try again." + return + else + usr << "{ERR Code: NO_SHUTTLE} Order failed! Please try again." + return + else + inserted_id.mining_points -= prize.cost + new prize.equipment_path(src.loc) + + updateUsrDialog() + return + +/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params) + if(istype(I,/obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/C = usr.get_active_hand() + if(istype(C) && !istype(inserted_id)) + usr.drop_item() + C.loc = src + inserted_id = C + interact(user) + return + if(default_deconstruction_screwdriver(user, "mining-open", "mining", I)) + updateUsrDialog() + return + if(default_deconstruction_crowbar(I)) + return + return ..() diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 6babe4ce93a..4fa74413211 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -23,10 +23,9 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/device/analyzer(src) new /obj/item/weapon/storage/bag/ore(src) - new /obj/item/device/flashlight/lantern(src) new /obj/item/weapon/shovel(src) new /obj/item/weapon/pickaxe(src) - new /obj/item/clothing/glasses/material(src) + new /obj/item/weapon/ore_radar(src) /******************************Lantern*******************************/ @@ -34,33 +33,160 @@ name = "lantern" icon_state = "lantern" desc = "A mining lantern." - brightness_on = 4 // luminosity when on - light_power = 0.75 + light_power = 1 + brightness_on = 6 light_wedge = LIGHT_OMNI light_color = LIGHT_COLOR_FIRE /*****************************Pickaxe********************************/ /obj/item/weapon/pickaxe - name = "mining drill" - desc = "The most basic of mining drills, for short excavations and small mineral extractions." + name = "pickaxe" + desc = "The most basic of mining implements. Surely this is a joke?" icon = 'icons/obj/items.dmi' flags = CONDUCT slot_flags = SLOT_BELT - force = 15.0 throwforce = 4.0 + force = 10.0 icon_state = "pickaxe" - item_state = "jackhammer" + item_state = "pickaxe" w_class = 4.0 matter = list(DEFAULT_WALL_MATERIAL = 3750) - var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO + var/digspeed //moving the delay to an item var so R&D can make improved picks. --NEO origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) attack_verb = list("hit", "pierced", "sliced", "attacked") - var/drill_sound = 'sound/weapons/Genhit.ogg' - var/drill_verb = "drilling" + var/drill_sound = 'sound/weapons/chisel1.ogg' + var/drill_verb = "excavating" + var/autodrill = 0 //pickaxes must be manually swung to mine, drills can mine rocks via bump sharp = 1 - var/excavation_amount = 100 + var/can_wield = 1 + + var/excavation_amount = 30 + var/wielded = 0 + var/force_unwielded = 10.0 + var/force_wielded = 30.0 + var/digspeed_unwielded = 30 + var/digspeed_wielded = 10 + var/drilling = 0 + + action_button_name = "Wield pick/drill" + +/obj/item/weapon/pickaxe/proc/unwield() + wielded = 0 + force = force_unwielded + digspeed = digspeed_unwielded + name = initial(name) + update_icon() + +/obj/item/weapon/pickaxe/proc/wield() + wielded = 1 + force = force_wielded + digspeed = digspeed_wielded + name = "[name] (Wielded)" + update_icon() + +/obj/item/weapon/pickaxe/mob_can_equip(M as mob, slot) + //Cannot equip wielded items. + if(wielded) + M << "Unwield the [initial(name)] first!" + return 0 + + return ..() + +/obj/item/weapon/pickaxe/dropped(mob/user as mob) + //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand + if(user) + var/obj/item/weapon/pickaxe/O = user.get_inactive_hand() + if(istype(O)) + O.unwield() + return unwield() + +/obj/item/weapon/pickaxe/pickup(mob/user) + unwield() + +/obj/item/weapon/pickaxe/attack_self(mob/user as mob) + + ..() + + if(!can_wield) + return + + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(issmall(H)) + user << "It's too heavy for you to wield fully." + return + else + return + + if(wielded) //Trying to unwield it + unwield() + user << "You are now carrying the [initial(name)] with one hand." + + var/obj/item/weapon/pickaxe/offhand/O = user.get_inactive_hand() + if(O && istype(O)) + O.unwield() + + else //Trying to wield it + if(user.get_inactive_hand()) + user << "You need your other hand to be empty" + return + wield() + user << "You grab the [initial(name)] with both hands." + + var/obj/item/weapon/pickaxe/offhand/O = new(user) ////Let's reserve his other hand~ + O.name = "[initial(name)] - offhand" + O.desc = "Your second grip on the [initial(name)]." + user.put_in_inactive_hand(O) + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + return + +/obj/item/weapon/pickaxe/ui_action_click() + if(src in usr) + attack_self(usr) + +/obj/item/weapon/pickaxe/verb/wield_pick() + if(can_wield) + set name = "Wield pick/drill" + set category = "Object" + set src in usr + + attack_self(usr) + +/obj/item/weapon/pickaxe/offhand + w_class = 5 + icon = 'icons/obj/weapons.dmi' + icon_state = "offhand" + item_state = null + name = "offhand" + simulated = FALSE + + action_button_name = null + +/obj/item/weapon/pickaxe/proc/copy_stats(obj/item/weapon/pickaxe/parent) + digspeed_wielded = parent.digspeed_wielded + excavation_amount = parent.excavation_amount + force = parent.force_wielded + +/obj/item/weapon/pickaxe/offhand/unwield() + if (ismob(loc)) + var/mob/living/our_mob = loc + our_mob.remove_from_mob(src) + + qdel(src) + +/obj/item/weapon/pickaxe/offhand/wield() + if (ismob(loc)) + var/mob/living/our_mob = loc + our_mob.remove_from_mob(src) + + qdel(src) /obj/item/weapon/pickaxe/hammer name = "sledgehammer" @@ -71,59 +197,75 @@ name = "silver pickaxe" icon_state = "spickaxe" item_state = "spickaxe" - digspeed = 30 origin_tech = list(TECH_MATERIAL = 3) desc = "This makes no metallurgic sense." + excavation_amount = 30 + + digspeed_unwielded = 30 + digspeed_wielded = 5 /obj/item/weapon/pickaxe/drill - name = "advanced mining drill" // Can dig sand as well! + name = "mining drill" // Can dig sand as well! icon_state = "handdrill" item_state = "jackhammer" - digspeed = 30 origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2) desc = "Yours is the drill that will pierce through the rock walls." drill_verb = "drilling" + autodrill = 1 + drill_sound = 'sound/weapons/circsawhit.ogg' + digspeed = 20 + digspeed_unwielded = 30 + force_unwielded = 15.0 + excavation_amount = 100 + + can_wield = 0 + force = 15.0 + + action_button_name = null /obj/item/weapon/pickaxe/jackhammer name = "sonic jackhammer" icon_state = "jackhammer" item_state = "jackhammer" - digspeed = 20 //faster than drill, but cannot dig origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2) desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." drill_verb = "hammering" + autodrill = 1 + drill_sound = 'sound/weapons/resonator_blast.ogg' + digspeed = 15 + digspeed_unwielded = 15 + force_unwielded = 25.0 + excavation_amount = 100 + + can_wield = 0 + force = 25.0 + + action_button_name = null /obj/item/weapon/pickaxe/gold name = "golden pickaxe" icon_state = "gpickaxe" item_state = "gpickaxe" - digspeed = 20 + digspeed = 10 origin_tech = list(TECH_MATERIAL = 4) desc = "This makes no metallurgic sense." - drill_verb = "picking" + excavation_amount = 50 -/obj/item/weapon/pickaxe/plasmacutter - name = "plasma cutter" - icon_state = "plasmacutter" - item_state = "gun" - w_class = 3.0 //it is smaller than the pickaxe - damtype = "fire" - digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire - origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3) - desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff." - drill_verb = "cutting" - drill_sound = 'sound/items/Welder.ogg' - sharp = 1 - edge = 1 + digspeed_unwielded = 30 + digspeed_wielded = 5 + force_wielded = 35.0 /obj/item/weapon/pickaxe/diamond name = "diamond pickaxe" icon_state = "dpickaxe" item_state = "dpickaxe" - digspeed = 10 origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4) desc = "A pickaxe with a diamond pick head." - drill_verb = "picking" + excavation_amount = 30 + + digspeed_unwielded = 20 + digspeed_wielded = 1 + force_wielded = 35.0 /obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME! name = "diamond mining drill" @@ -133,14 +275,34 @@ origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 5) desc = "Yours is the drill that will pierce the heavens!" drill_verb = "drilling" + autodrill = 1 + drill_sound = 'sound/weapons/circsawhit.ogg' + excavation_amount = 100 + + can_wield = 0 + force = 20.0 + digspeed = 5 + digspeed_unwielded = 5 + force_unwielded = 20.0 + + action_button_name = null /obj/item/weapon/pickaxe/borgdrill name = "cyborg mining drill" icon_state = "diamonddrill" item_state = "jackhammer" digspeed = 15 + digspeed_unwielded = 15 + force_unwielded = 25.0 desc = "" drill_verb = "drilling" + autodrill = 1 + drill_sound = 'sound/weapons/circsawhit.ogg' + can_wield = 0 + force = 15.0 + excavation_amount = 100 + + action_button_name = null /*****************************Shovel********************************/ @@ -170,26 +332,15 @@ throwforce = 7.0 w_class = 2.0 - -/**********************Mining car (Crate like thing, not the rail car)**************************/ - -/obj/structure/closet/crate/miningcar - desc = "A mining car. This one doesn't work on rails, but has to be dragged." - name = "Mining car (not for rails)" - icon = 'icons/obj/storage.dmi' - icon_state = "miningcar" - density = 1 - icon_opened = "miningcaropen" - icon_closed = "miningcar" - // Flags. /obj/item/stack/flag name = "flags" desc = "Some colourful flags." singular_name = "flag" - amount = 10 - max_amount = 10 + amount = 5 + max_amount = 5 + w_class = 2 icon = 'icons/obj/mining.dmi' var/upright = 0 var/base_state @@ -249,3 +400,921 @@ newflag.icon_state = "[newflag.base_state]_open" newflag.visible_message("[user] plants [newflag] firmly in the ground.") src.use(1) + +/**********************Miner Carts***********************/ +/obj/item/weapon/rrf_ammo + name = "compressed railway cartridge" + desc = "Highly compressed matter for the RRF." + icon = 'icons/obj/ammo.dmi' + icon_state = "rcd" + item_state = "rcdammo" + w_class = 2 + origin_tech = list(TECH_MATERIAL = 2) + matter = list(DEFAULT_WALL_MATERIAL = 15000,"glass" = 7500) + +/obj/item/weapon/rrf + name = "\improper Rapid-Railway-Fabricator" + desc = "A device used to rapidly deploy mine tracks." + icon = 'icons/obj/items.dmi' + icon_state = "rcd" + opacity = 0 + density = 0 + anchored = 0.0 + var/stored_matter = 30 + w_class = 3.0 + +/obj/item/weapon/rrf/examine(mob/user) + if(..(user, 0)) + user << "It currently holds [stored_matter]/30 fabrication-units." + +/obj/item/weapon/rrf/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + if (istype(W, /obj/item/weapon/rcd_ammo)) + + if ((stored_matter + 30) > 30) + user << "The RRF can't hold any more matter." + return + + qdel(W) + + stored_matter += 30 + playsound(src.loc, 'sound/machines/click.ogg', 10, 1) + user << "The RRF now holds [stored_matter]/30 fabrication-units." + return + + if (istype(W, /obj/item/weapon/rrf_ammo)) + + if ((stored_matter + 15) > 30) + user << "The RRF can't hold any more matter." + return + + qdel(W) + + stored_matter += 15 + playsound(src.loc, 'sound/machines/click.ogg', 10, 1) + user << "The RRF now holds [stored_matter]/30 fabrication-units." + return + +/obj/item/weapon/rrf/afterattack(atom/A, mob/user as mob, proximity) + + if(!proximity) return + + if(istype(user,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = user + if(R.stat || !R.cell || R.cell.charge <= 0) + return + else + if(stored_matter <= 0) + return + + if(!istype(A, /turf/simulated/floor)) + return + + if(locate(/obj/structure/track) in A) + return + + playsound(src.loc, 'sound/machines/click.ogg', 10, 1) + var/used_energy = 0 + + used_energy = 10 + + new /obj/structure/track(get_turf(A)) + + user << "Dispensing track..." + + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(R.cell) + R.cell.use(used_energy) + else + stored_matter-- + user << "The RRF now holds [stored_matter]/30 fabrication-units." + + +/obj/structure/track + name = "mine track" + desc = "Just like your grandpappy used to lay 'em in 1862." + icon = 'icons/obj/smoothtrack.dmi' + icon_state = "track15" + density = 0 + anchored = 1.0 + w_class = 3 + layer = 2.44 + +/obj/structure/track/Initialize() + . = ..() + var/obj/structure/track/track = locate() in loc + if (track && track != src) + qdel(src) + return + updateOverlays() + for (var/dir in cardinal) + var/obj/structure/track/R = locate(/obj/structure/track, get_step(src, dir)) + if(R) + R.updateOverlays() + +/obj/structure/track/Destroy() + for (var/dir in cardinal) + var/obj/structure/track/R = locate(/obj/structure/track, get_step(src, dir)) + if(R) + R.updateOverlays() + return ..() + +/obj/structure/track/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + if(2.0) + qdel(src) + return + +/obj/structure/track/attackby(obj/item/C as obj, mob/user as mob) + + if (istype(C, /obj/item/stack/tile/floor)) + var/turf/T = get_turf(src) + T.attackby(C, user) + return + if (istype(C, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = C + if(WT.remove_fuel(0, user)) + user << "Slicing apart connectors ..." + new /obj/item/stack/rods(src.loc) + qdel(src) + + return + +/obj/structure/track/proc/updateOverlays() + set waitfor = FALSE + overlays = list() + + var/dir_sum = 0 + + for (var/direction in cardinal) + if(locate(/obj/structure/track, get_step(src, direction))) + dir_sum += direction + + icon_state = "track[dir_sum]" + return + +/obj/vehicle/train/cargo/engine/mining + name = "mine cart engine" + desc = "A ridable electric minecart designed for pulling other mine carts." + icon = 'icons/obj/cart.dmi' + icon_state = "mining_engine" + on = 0 + powered = 1 + move_delay = -1 + + load_item_visible = 1 + load_offset_x = 0 + mob_offset_y = 15 + active_engines = 1 + + light_power = 1 + light_range = 6 + light_wedge = LIGHT_WIDE + light_color = LIGHT_COLOR_FIRE + +/obj/vehicle/train/cargo/engine/mining/Initialize() + . = ..() + cell = new /obj/item/weapon/cell/high(src) + key = null + var/image/I = new(icon = 'icons/obj/cart.dmi', icon_state = "[icon_state]_overlay", layer = src.layer + 0.2) //over mobs + overlays += I + turn_off() //so engine verbs are correctly set + +/obj/vehicle/train/cargo/engine/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/key/minecarts)) + if(!key) + user.drop_item() + W.forceMove(src) + key = W + verbs += /obj/vehicle/train/cargo/engine/verb/remove_key + return + ..() + +/obj/vehicle/train/cargo/engine/mining/Move(var/turf/destination) + return ((locate(/obj/structure/track) in destination)) ? ..() : FALSE + +/obj/vehicle/train/cargo/engine/mining/update_car(var/train_length, var/active_engines) + return + +/obj/vehicle/train/cargo/trolley/mining + name = "mine-cart" + desc = "A modern day twist to an ancient classic." + icon = 'icons/obj/cart.dmi' + icon_state = "mining_trailer" + anchored = 0 + passenger_allowed = 0 + move_delay = -1 + + load_item_visible = 1 + load_offset_x = 1 + load_offset_y = 15 + mob_offset_y = 16 + + light_power = 1 + light_range = 3 + light_wedge = LIGHT_OMNI + light_color = LIGHT_COLOR_FIRE + +/obj/vehicle/train/cargo/trolley/mining/Move(var/turf/destination) + return ((locate(/obj/structure/track) in destination)) ? ..() : FALSE + +/obj/item/weapon/key/minecarts + name = "key" + desc = "A keyring with a small steel key, and a pickaxe shaped fob." + icon = 'icons/obj/vehicles.dmi' + icon_state = "mine_keys" + w_class = 1 + +/**********************Pinpointer**********************/ + +/obj/item/weapon/ore_radar + name = "scanner pad" + desc = "An antiquated device that can detect ore in a wide radius around the user." + icon = 'icons/obj/device.dmi' + icon_state = "pinoff" + flags = CONDUCT + slot_flags = SLOT_BELT + w_class = 2.0 + item_state = "electronic" + throw_speed = 4 + throw_range = 20 + matter = list(DEFAULT_WALL_MATERIAL = 500) + var/turf/simulated/mineral/random/sonar = null + var/active = 0 + + +/obj/item/weapon/ore_radar/attack_self(mob/user) + if(!active) + active = 1 + usr << "You activate the pinpointer" + workdisk(user) + else + active = 0 + icon_state = "pinoff" + usr << "You deactivate the pinpointer" + +/obj/item/weapon/ore_radar/proc/workdisk(var/user) + if(!src.loc) + active = 0 + + if(!active) + return + + var/closest = 15 + + for(var/turf/simulated/mineral/random/R in orange(14,user)) + var/dist = get_dist(user, R) + if(dist < closest) + closest = dist + sonar = R + + if(!sonar) + icon_state = "pinonnull" + return + set_dir(get_dir(user,sonar)) + switch(get_dist(user,sonar)) + if(0) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + spawn(5) .() + +/**********************Jaunter**********************/ + +/obj/item/device/wormhole_jaunter + name = "wormhole jaunter" + desc = "A single use device harnessing outdated warp technology. The wormholes it creates are unpleasant to travel through, to say the least." + contained_sprite = 1 + icon = 'icons/obj/mining_contained.dmi' + icon_state = "jaunter" + item_state = "jaunter" + throwforce = 0 + w_class = 2 + throw_speed = 3 + throw_range = 5 + slot_flags = SLOT_BELT + origin_tech = list(TECH_BLUESPACE = 2, TECH_PHORON = 4, TECH_ENGINEERING = 4) + +/obj/item/device/wormhole_jaunter/attack_self(mob/user) + user.visible_message("[user.name] activates the [src.name]!") + feedback_add_details("jaunter", "U") // user activated + activate(user) + +/obj/item/device/wormhole_jaunter/proc/turf_check(mob/user) + var/turf/device_turf = get_turf(user) + if(!device_turf||device_turf.z==0) + user << "You're having difficulties getting the [src.name] to work." + return FALSE + return TRUE + +/obj/item/device/wormhole_jaunter/proc/get_destinations(mob/user) + var/list/destinations = list() + + for(var/obj/item/device/radio/beacon/B in teleportbeacons) + var/turf/T = get_turf(B) + if(T.z in config.station_levels) + destinations += B + + return destinations + +/obj/item/device/wormhole_jaunter/proc/activate(mob/user) + if(!turf_check(user)) + return + + var/list/L = get_destinations(user) + if(!L.len) + user << "The [src.name] found no beacons in the world to anchor a wormhole to." + return + var/chosen_beacon = pick(L) + var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100) + J.target = chosen_beacon + playsound(src,'sound/effects/sparks4.ogg',50,1) + qdel(src) + +/obj/item/device/wormhole_jaunter/emp_act(power) + var/triggered = FALSE + if(power == 1) + triggered = TRUE + else if(power == 2 && prob(50)) + triggered = TRUE + + if(triggered) + usr.visible_message("The [src] overloads and activates!") + feedback_add_details("jaunter","E") // EMP accidental activation + activate(usr) + +/obj/effect/portal/wormhole/jaunt_tunnel + name = "jaunt tunnel" + icon = 'icons/obj/objects.dmi' + icon_state = "bhole3" + desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon." + +/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M) + if(M.anchored || istype(M, /obj/effect)) + return + single_spark(M.loc) + if(istype(M)) + if(do_teleport(M, target, 6)) + single_spark(M.loc) + playsound(M,'sound/weapons/resonator_blast.ogg',50,1) + if(iscarbon(M)) + var/mob/living/carbon/L = M + L.Weaken(3) + if(ishuman(L)) + shake_camera(L, 20, 1) + addtimer(CALLBACK(L, /mob/living/carbon/.proc/vomit), 20) + +/**********************Lazarus Injector**********************/ + +/obj/item/weapon/lazarus_injector + name = "lazarus injector" + desc = "An injector with a cocktail of nanomachines and chemicals, this device can seemingly raise animals from the dead. If no effect in 3 days please call customer support." + icon = 'icons/obj/syringe.dmi' + icon_state = "borghypo" + item_state = "hypo" + throwforce = 0 + w_class = 2 + throw_speed = 3 + throw_range = 5 + var/loaded = 1 + var/malfunctioning = 0 + var/revive_type = TYPE_ORGANIC //So you can't revive boss monsters or robots with it + origin_tech = list(TECH_BIO = 7, TECH_MATERIAL = 4) + +/obj/item/weapon/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) + if(!loaded) + return + if(isliving(target) && proximity_flag) + if(istype(target, /mob/living/simple_animal)) + var/mob/living/simple_animal/M = target + if(!(M.find_type() & revive_type)) + user << "[src] does not work on this sort of creature." + return + if(M.stat == DEAD) + if(!malfunctioning) + M.faction = "neutral" + M.revive() + M.icon_state = M.icon_living + loaded = 0 + user.visible_message("[user] injects [M] with [src], reviving it.") + feedback_add_details("lazarus_injector", "[M.type]") + playsound(src,'sound/effects/refill.ogg',50,1) + return + else + user << "[src] is only effective on the dead." + return + else + user << "[src] is only effective on lesser beings." + return + +/obj/item/weapon/lazarus_injector/emp_act() + if(!malfunctioning) + malfunctioning = 1 + +/obj/item/weapon/lazarus_injector/examine(mob/user) + ..() + if(!loaded) + user << "[src] is empty." + if(malfunctioning) + user << "The display on [src] seems to be flickering." + +/**********************Point Transfer Card**********************/ + +/obj/item/weapon/card/mining_point_card + name = "mining points card" + desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard." + icon_state = "data" + var/points = 500 + +/obj/item/weapon/card/mining_point_card/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/card/id)) + if(points) + var/obj/item/weapon/card/id/C = I + C.mining_points += points + user << "You transfer [points] points to [C]." + points = 0 + else + user << "There's no points left on [src]." + ..() + +/obj/item/weapon/card/mining_point_card/examine(mob/user) + ..() + user << "There's [points] point\s on the card." + +/**********************"Fultons"**********************/ + +var/list/total_extraction_beacons = list() + +/obj/item/weapon/extraction_pack + name = "warp extraction pack" + desc = "A complex device that warps nonliving matter to nearby locations." + contained_sprite = 1 + icon = 'icons/obj/mining_contained.dmi' + icon_state = "fulton" + w_class = 3 + var/obj/structure/extraction_point/beacon + var/list/beacon_networks = list("station") + var/uses_left = 3 + origin_tech = list(TECH_BLUESPACE = 3, TECH_PHORON = 4, TECH_ENGINEERING = 4) + +/obj/item/weapon/extraction_pack/examine() + . = ..() + usr.show_message("It has [uses_left] uses remaining.", 1) + +/obj/item/weapon/extraction_pack/attack_self(mob/user) + var/list/possible_beacons = list() + for(var/B in total_extraction_beacons) + var/obj/structure/extraction_point/EP = B + if(EP.beacon_network in beacon_networks) + possible_beacons += EP + + if(!possible_beacons.len) + user << "There are no extraction beacons in existence!" + return + + else + var/A + + A = input("Select a beacon to connect to", "Warp Extraction Pack", A) in possible_beacons + + if(!A) + return + beacon = A + +/obj/item/weapon/extraction_pack/afterattack(atom/movable/A, mob/living/carbon/human/user) + if(!beacon) + user << "[src] is not linked to a beacon, and cannot be used." + return + if(!istype(A)) + return + else + if(istype(A,/mob/living)) + user << "[src] is not safe for use with living creatures, they wouldn't survive the trip back!" + return + if(A.loc == user) // no extracting stuff you're holding + return + if(A.anchored) + return + user << "You start attaching the pack to [A]..." + if(do_after(user,50)) + user << "You attach the pack to [A] and activate it." + uses_left-- + if(uses_left <= 0) + user.drop_item(src) + loc = A + single_spark(A.loc) + var/list/flooring_near_beacon = list() + for(var/turf/simulated/floor/floor in orange(1, beacon)) + flooring_near_beacon += floor + A.loc = pick(flooring_near_beacon) + single_spark(A.loc) + if(uses_left <= 0) + qdel(src) + + +/obj/item/warp_core + name = "warp extraction beacon signaller" + desc = "Emits a signal which Warp-Item recovery devices can lock onto. Activate in hand to create a beacon." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "subspace_amplifier" + origin_tech = list(TECH_BLUESPACE = 1, TECH_PHORON = 1, TECH_ENGINEERING = 2) + +/obj/item/warp_core/attack_self(mob/user) + user << "You start placing down the beacon. . ." + if(do_after(user,15)) + new /obj/structure/extraction_point(get_turf(user)) + qdel(src) + +/obj/structure/extraction_point + name = "warp recovery beacon" + desc = "A beacon for the Warp-Item recovery system. Hit a beacon with a pack to link the pack to a beacon." + icon = 'icons/obj/mining.dmi' + icon_state = "extraction_point" + anchored = 1 + density = 0 + var/beacon_network = "station" + +/obj/structure/extraction_point/New() + var/area/area_name = get_area(src) + name += " ([rand(100,999)]) ([area_name.name])" + total_extraction_beacons += src + ..() + +/obj/structure/extraction_point/Destroy() + total_extraction_beacons -= src + ..() + +/**********************Resonator**********************/ + +/obj/item/weapon/resonator + name = "resonator" + contained_sprite = 1 + icon = 'icons/obj/mining_contained.dmi' + icon_state = "resonator" + item_state = "resonator" + desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vacuum." + w_class = 3 + force = 15 + throwforce = 10 + var/burst_time = 30 + var/fieldlimit = 4 + var/list/fields = list() + var/quick_burst_mod = 0.8 + origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3) + +/obj/item/weapon/resonator/upgraded + name = "upgraded resonator" + desc = "An upgraded version of the resonator that can produce more fields at once." + icon_state = "resonatoru" + item_state = "resonatoru" + origin_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4, TECH_POWER = 2, TECH_ENGINEERING = 3) + fieldlimit = 8 + quick_burst_mod = 1 + burst_time = 15 + +/obj/item/weapon/resonator/proc/CreateResonance(target, creator) + var/turf/T = get_turf(target) + var/obj/effect/resonance/R = locate(/obj/effect/resonance) in T + if(R) + R.resonance_damage *= quick_burst_mod + R.burst(T) + return + if(fields.len < fieldlimit) + playsound(src,'sound/weapons/resonator_fire.ogg',50,1) + var/obj/effect/resonance/RE = new /obj/effect/resonance(T, creator, burst_time, src) + fields += RE + +/obj/item/weapon/resonator/attack_self(mob/user) + if(burst_time == 50) + burst_time = 30 + user << "You set the resonator's fields to detonate after 3 seconds." + else + burst_time = 50 + user << "You set the resonator's fields to detonate after 5 seconds." + +/obj/item/weapon/resonator/afterattack(atom/target, mob/user, proximity_flag) + ..() + if(user.Adjacent(target)) + if(isturf(target)) + CreateResonance(target, user) + +/obj/effect/resonance + name = "resonance field" + desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures." + icon = 'icons/effects/effects.dmi' + icon_state = "shield2" + layer = 5 + anchored = TRUE + mouse_opacity = 0 + var/resonance_damage = 20 + var/creator + var/obj/item/weapon/resonator/res + +/obj/effect/resonance/New(loc, set_creator, timetoburst, set_resonator) + ..() + creator = set_creator + res = set_resonator + var/turf/proj_turf = get_turf(src) + if(!istype(proj_turf)) + return + var/datum/gas_mixture/environment = proj_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure < 50) + name = "strong resonance field" + resonance_damage = 60 + + addtimer(CALLBACK(src, .proc/burst, loc), timetoburst) + +/obj/effect/resonance/Destroy() + if(res) + res.fields -= src + return ..() + +/obj/effect/resonance/proc/burst(turf/T) + playsound(src,'sound/weapons/resonator_blast.ogg',50,1) + if(istype(T, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = T + M.GetDrilled(1) + for(var/mob/living/L in T) + if(creator) + add_logs(creator, L, "used a resonator field on", "resonator") + L << "The [src.name] ruptured with you in it!" + L.apply_damage(resonance_damage, BRUTE) + qdel(src) + + +/******************************Ore Magnet*******************************/ +/obj/item/weapon/oremagnet + name = "ore magnet" + contained_sprite = 1 + icon = 'icons/obj/mining_contained.dmi' + icon_state = "magneto" + item_state = "magneto" + desc = "A handheld device that creates a well of negative force that attracts minerals of a very specific type, size, and state to its user." + w_class = 3 + force = 10 + throwforce = 5 + var/on = 0 + origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 3) + +/obj/item/weapon/oremagnet/attack_self(mob/user) + if(!on) + user << "You switch on the ore magnet." + on = 1 + else + user << "You switch off the ore magnet," + on = 0 + magneto() + +/obj/item/weapon/oremagnet/proc/magneto() + if(!src.loc) + on = 0 + if(!on) + return + for(var/obj/item/weapon/ore/O in oview(7,src.loc)) + if(prob(80)) + step_to(O,src.loc,0) + spawn(10) + .() + +/obj/item/weapon/oreportal + name = "ore summoner" + contained_sprite = 1 + icon = 'icons/obj/mining_contained.dmi' + icon_state = "supermagneto" + item_state = "jaunter" + desc = "A handheld device that creates a well of warp energy that teleports minerals of a very specific type, size, and state to its user." + w_class = 3 + force = 15 + throwforce = 5 + origin_tech = list(TECH_BLUESPACE = 4, TECH_ENGINEERING = 3) + +/obj/item/weapon/oreportal/attack_self(mob/user) + user << "You pulse the ore summoner." + for(var/obj/item/weapon/ore/O in orange(7,user)) + single_spark(O.loc) + do_teleport(O, user, 0) + +/******************************Sculpting*******************************/ +/obj/item/weapon/autochisel + name = "auto-chisel" + icon = 'icons/obj/items.dmi' + icon_state = "jackhammer" + item_state = "jackhammer" + origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2) + desc = "With an integrated AI chip and hair-trigger precision, this baby makes sculpting almost automatic!" + +/obj/structure/sculpting_block + name = "sculpting block" + desc = "A finely chiselled sculpting block, it is ready to be your canvas." + icon = 'icons/obj/mining.dmi' + icon_state = "sculpting_block" + density = 1 + opacity = 1 + anchored = 0 + var/sculpted = 0 + var/mob/living/T + var/times_carved = 0 + var/last_struck = 0 + +/obj/structure/sculpting_block/verb/rotate() + set name = "Rotate" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + usr << "It is fastened to the floor!" + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 + +/obj/structure/sculpting_block/attackby(obj/item/C as obj, mob/user as mob) + + if (istype(C, /obj/item/weapon/wrench)) + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + user << "You [anchored ? "un" : ""]anchor the [name]." + anchored = !anchored + + if (istype(C, /obj/item/weapon/autochisel)) + if(!sculpted) + if(last_struck) + return + + if(!T) + var/list/choices = list() + for(var/mob/living/M in view(7,user)) + choices += M + T = input(user,"Who do you wish to sculpt?") as null|anything in choices + user.visible_message("[user] begins sculpting.", + "You begin sculpting.") + + var/sculpting_coefficient = get_dist(user,T) + if(sculpting_coefficient <= 0) + sculpting_coefficient = 1 + + if(sculpting_coefficient >= 7) + user << "You hardly remember what [T] really looks like! Bah!" + T = null + + user.visible_message("[user] carves away at the sculpting block!", + "You continue sculpting.") + + if(prob(25)) + playsound(user, 'sound/items/Screwdriver.ogg', 20, 1) + else + playsound(user, "sound/weapons/chisel[rand(1,2)].ogg", 20, 1) + spawn(3) + playsound(user, "sound/weapons/chisel[rand(1,2)].ogg", 20, 1) + spawn(3) + playsound(user, "sound/weapons/chisel[rand(1,2)].ogg", 20, 1) + + last_struck = 1 + if(do_after(user,(20))) + last_struck = 0 + if(times_carved <= 9) + times_carved += 1 + if(times_carved < 1) + user << "You review your work and see there is more to do." + return + else + sculpted = 1 + user.visible_message("[user] finishes sculpting their magnum opus!", + "You finish sculpting a masterpiece.") + src.appearance = T + src.color = list( + 0.35, 0.3, 0.25, + 0.35, 0.3, 0.25, + 0.35, 0.3, 0.25 + ) + src.pixel_y += 8 + var/image/pedestal_underlay = image('icons/obj/mining.dmi', icon_state = "pedestal") + pedestal_underlay.appearance_flags = RESET_COLOR + pedestal_underlay.pixel_y -= 8 + src.underlays += pedestal_underlay + var/title = sanitize(input(usr, "If you would like to name your art, do so here.", "Christen Your Sculpture", "") as text|null) + if(title) + name = title + else + name = "*[T.name]*" + var/legend = sanitize(input(usr, "If you would like to describe your art, do so here.", "Story Your Sculpture", "") as message|null) + if(legend) + desc = legend + else + desc = "This is a sculpture of [T.name]. All craftsmanship is of the highest quality. It is decorated with rock and more rock. It is covered with rock. On the item is an image of a rock. The rock is [T.name]." + else + last_struck = 0 + return + +/******************************Gains Boroughs*******************************/ + +/obj/structure/punching_bag + name = "punching bag" + desc = "A punching bag. Better this than the Quartermaster." + icon = 'icons/obj/mining.dmi' + icon_state = "punchingbag" + anchored = 1 + layer = 5.1 + var/list/hit_sounds = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg',\ + 'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg') + +/obj/structure/punching_bag/attack_hand(mob/user as mob) + flick("[icon_state]2", src) + playsound(src.loc, pick(src.hit_sounds), 25, 1, -1) + +/obj/structure/weightlifter + name = "Weight Machine" + desc = "Just looking at this thing makes you feel tired." + icon = 'icons/obj/mining.dmi' + icon_state = "fitnessweight" + density = 1 + anchored = 1 + +/obj/structure/weightlifter/attack_hand(mob/user as mob) + if(in_use) + user << "It's already in use - wait a bit." + return + else + in_use = 1 + icon_state = "fitnessweight-c" + user.dir = SOUTH + user.Stun(4) + user.loc = src.loc + var/image/W = image('icons/obj/mining.dmi',"fitnessweight-w") + W.layer = 5.1 + overlays += W + var/bragmessage = pick("pushing it to the limit","going into overdrive","burning with determination","rising up to the challenge", "getting strong now","getting ripped") + user.visible_message("[user] is [bragmessage]!") + var/reps = 0 + user.pixel_y = 5 + while (reps++ < 6) + if (user.loc != src.loc) + break + + for (var/innerReps = max(reps, 1), innerReps > 0, innerReps--) + sleep(3) + animate(user, pixel_y = (user.pixel_y == 3) ? 5 : 3, time = 3) + + playsound(user,'sound/effects/spring.ogg', 60, 1) + + sleep(3) + animate(user, pixel_y = 2, time = 3) + sleep(3) + playsound(user, 'sound/machines/click.ogg', 60, 1) + in_use = 0 + animate(user, pixel_y = 0, time = 3) + var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!") + icon_state = "fitnessweight" + overlays -= W + user << "[finishmessage]" + +/******************************Seismic Charge*******************************/ + +/obj/item/weapon/plastique/seismic + name = "seismic charge" + desc = "A complex mining device that utilizes a seismic detonation to eliminate weak asteroid turf in a wide radius." + origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 4, TECH_PHORON = 2) + timer = 15 + +/obj/item/weapon/plastique/seismic/explode(var/turf/location) + if(!target) + target = get_atom_on_turf(src) + if(!target) + target = src + if(location) + new /obj/effect/overlay/temp/explosion(location) + playsound(location, 'sound/effects/Explosion1.ogg', 100, 1) + for(var/atom/A in range(4,location)) + if(istype(A,/turf/simulated/mineral)) + var/turf/simulated/mineral/M = A + M.GetDrilled(1) + else if(istype(A, /turf/simulated/wall) && prob(66)) + var/turf/simulated/wall/W = A + W.ex_act(2) + else if(istype(A, /obj/structure/window)) + var/obj/structure/window/WI = A + WI.ex_act(3) + else if(istype(A,/mob/living)) + var/mob/living/LI = A + LI << 'sound/weapons/resonator_blast.ogg' + if(iscarbon(LI)) + var/mob/living/carbon/L = A + L.Weaken(3) + if(ishuman(L)) + shake_camera(L, 20, 1) + addtimer(CALLBACK(L, /mob/living/carbon/.proc/vomit), 20) + + spawn(2) + for(var/turf/simulated/mineral/M in range(7,location)) + if(prob(75)) + M.GetDrilled(1) + + if(target) + target.overlays -= image_overlay + qdel(src) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 3d8493f65b1..91aaea2e1d5 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -8,8 +8,17 @@ /turf/simulated/mineral //wall piece name = "Rock" - icon = 'icons/turf/walls.dmi' + //icon = 'icons/turf/walls.dmi' + //icon_state = "rock" + icon = 'icons/turf/smooth/rock_wall.dmi' // Until we get sprites. icon_state = "rock" + layer = 2.01 + smooth = SMOOTH_MORE | SMOOTH_BORDER + canSmoothWith = list( + /turf/simulated/mineral, + /turf/simulated/wall, + /turf/unsimulated/wall + ) oxygen = 0 nitrogen = 0 opacity = 1 @@ -25,29 +34,54 @@ var/datum/geosample/geologic_data var/excavation_level = 0 var/list/finds - var/next_rock = 0 var/archaeo_overlay = "" - var/excav_overlay = "" var/obj/item/weapon/last_find var/datum/artifact_find/artifact_find has_resources = 1 -/turf/simulated/mineral/initialize() - MineralSpread() - updateMineralOverlays(TRUE) +// Copypaste parent call for performance. +/turf/simulated/mineral/Initialize() + if (initialized) + crash_with("Warning: [src]([type]) initialized multiple times!") -/turf/simulated/mineral/proc/updateMineralOverlays(var/update_neighbors) - var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST) - for(var/direction in step_overlays) - var/turf/turf_to_check = get_step(src,step_overlays[direction]) - if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/asteroid)) - var/turf/simulated/floor/asteroid/T = turf_to_check - T.updateMineralOverlays() - else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor)) - var/image/overlay = image('icons/turf/walls.dmi', "rock_side", dir = turn(step_overlays[direction], 180)) - overlay.plane = 0 - turf_to_check.overlays += overlay + initialized = TRUE + + if(dynamic_lighting) + luminosity = 0 + else + luminosity = 1 + + has_opaque_atom = TRUE + + if (smooth) + pixel_x = -4 + pixel_y = -4 + queue_smooth(src) + + return INITIALIZE_HINT_NORMAL + +/turf/simulated/mineral/examine(mob/user) + ..() + if(mineral) + switch(mined_ore) + if(0) + user << "It is ripe with [mineral.display_name]." + if(1) + user << "Its [mineral.display_name] looks a little depleted." + if(2) + user << "Its [mineral.display_name] looks very depleted!" + else + user << "It is devoid of any valuable minerals." + switch(emitter_blasts_taken) + if(0) + user << "It is in pristine condition." + if(1) + user << "It appears a little damaged." + if(2) + user << "It is crumbling!" + if(3) + user << "It looks ready to collapse at any moment!" /turf/simulated/mineral/ex_act(severity) switch(severity) @@ -55,6 +89,8 @@ if (prob(70)) mined_ore = 1 //some of the stuff gets blown up GetDrilled() + else + emitter_blasts_taken += 2 if(1.0) mined_ore = 2 //some of the stuff gets blown up GetDrilled() @@ -65,18 +101,22 @@ if(istype(Proj, /obj/item/projectile/beam/emitter)) emitter_blasts_taken++ - if(emitter_blasts_taken > 2) // 3 blasts per tile - mined_ore = 1 - GetDrilled() + if(emitter_blasts_taken > 2) // 3 blasts per tile + GetDrilled() /turf/simulated/mineral/Bumped(AM) . = ..() if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) + var/obj/item/weapon/pickaxe/P = H.l_hand + if(P.autodrill) + attackby(H.l_hand,H) + else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.r_hand + if(P.autodrill) + attackby(H.r_hand,H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM @@ -88,16 +128,24 @@ if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill)) M.selected.action(src) +#define SPREAD(the_dir) \ + if (prob(mineral.spread_chance)) { \ + var/turf/simulated/mineral/target = get_step(src, the_dir); \ + if (istype(target) && !target.mineral) { \ + target.mineral = mineral; \ + target.UpdateMineral(); \ + target.MineralSpread(); \ + } \ + } + /turf/simulated/mineral/proc/MineralSpread() if(mineral && mineral.spread) - for(var/trydir in cardinal) - if(prob(mineral.spread_chance)) - var/turf/simulated/mineral/target_turf = get_step(src, trydir) - if(istype(target_turf) && !target_turf.mineral) - target_turf.mineral = mineral - target_turf.UpdateMineral() - target_turf.MineralSpread() + SPREAD(NORTH) + SPREAD(SOUTH) + SPREAD(EAST) + SPREAD(WEST) +#undef SPREAD /turf/simulated/mineral/proc/UpdateMineral() clear_ore_effects() @@ -111,7 +159,7 @@ //Not even going to touch this pile of spaghetti /turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!usr.IsAdvancedToolUser()) usr << "\red You don't have the dexterity to do this!" return @@ -133,7 +181,7 @@ user << "\blue \icon[P] [src] has been excavated to a depth of [2*excavation_level]cm." return - if (istype(W, /obj/item/weapon/pickaxe)) + if (istype(W, /obj/item/weapon/pickaxe) && W.simulated) // Pickaxe offhand is not simulated. var/turf/T = user.loc if (!( istype(T, /turf) )) return @@ -141,9 +189,14 @@ var/obj/item/weapon/pickaxe/P = W if(last_act + P.digspeed > world.time)//prevents message spam return + + if(P.drilling) + return + last_act = world.time playsound(user, P.drill_sound, 20, 1) + P.drilling = 1 //handle any archaeological finds we might uncover var/fail_message @@ -153,7 +206,8 @@ //Chance to destroy / extract any finds here fail_message = ". [pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]" - user << "\red You start [P.drill_verb][fail_message ? fail_message : ""]." + if(fail_message) + user << "You start [P.drill_verb][fail_message ? fail_message : ""]." if(fail_message && prob(90)) if(prob(25)) @@ -164,7 +218,18 @@ artifact_debris() if(do_after(user,P.digspeed)) - user << "\blue You finish [P.drill_verb] the rock." + P.drilling = 0 + + if(prob(50)) + var/obj/item/weapon/ore/O + if(prob(25) && (mineral) && (P.excavation_amount >= 30)) + O = new mineral.ore (src) + else + O = new /obj/item/weapon/ore(src) + if(istype(O)) + geologic_data.UpdateNearbyArtifactInfo(src) + O.geologic_data = geologic_data + addtimer(CALLBACK(O, /atom/movable/.proc/forceMove, user.loc), 1) if(finds && finds.len) var/datum/find/F = finds[1] @@ -208,33 +273,26 @@ var/datum/find/F = finds[1] if(F.excavation_required <= excavation_level + F.view_range) archaeo_overlay = "overlay_archaeo[rand(1,3)]" - overlays += archaeo_overlay + add_overlay(archaeo_overlay) - //there's got to be a better way to do this - var/update_excav_overlay = 0 - if(excavation_level >= 75) - if(excavation_level - P.excavation_amount < 75) - update_excav_overlay = 1 - else if(excavation_level >= 50) - if(excavation_level - P.excavation_amount < 50) - update_excav_overlay = 1 - else if(excavation_level >= 25) - if(excavation_level - P.excavation_amount < 25) - update_excav_overlay = 1 + else + user << " You stop [P.drill_verb] the rock." + P.drilling = 0 - //update overlays displaying excavation level - if( !(excav_overlay && excavation_level > 0) || update_excav_overlay ) - var/excav_quadrant = round(excavation_level / 25) + 1 - excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]" - overlays += excav_overlay + if (istype(W, /obj/item/weapon/autochisel)) - //drop some rocks - next_rock += P.excavation_amount * 10 - while(next_rock > 100) - next_rock -= 100 - var/obj/item/weapon/ore/O = new(src) - geologic_data.UpdateNearbyArtifactInfo(src) - O.geologic_data = geologic_data + if(last_act + 80 > world.time)//prevents message spam + return + last_act = world.time + + user << "You start chiselling [src] into a sculptable block." + + if(!do_after(user,80)) + return + + user << "You finish chiselling [src] into a sculptable block." + new /obj/structure/sculpting_block(src) + GetDrilled(1) else return attack_hand(user) @@ -282,20 +340,15 @@ if(prob(3)) excavate_find(prob(5), finds[1]) - var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) - //Add some rubble, you did just clear out a big chunk of rock. var/turf/simulated/floor/asteroid/N = ChangeTurf(mined_turf) // Kill and update the space overlays around us. - for(var/direction in step_overlays) - var/turf/space/T = get_step(src, step_overlays[direction]) - if(istype(T)) - T.overlays.Cut() - for(var/next_direction in step_overlays) - if(istype(get_step(T, step_overlays[next_direction]),/turf/simulated/mineral)) - T.overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[next_direction]) + for(var/direction in cardinal) + var/turf/simulated/open/O = get_step(src, direction) + if(istype(O)) + O.update() if(rand(1,500) == 1) visible_message("An old dusty crate was buried within!") @@ -303,7 +356,6 @@ if(istype(N)) N.overlay_detail = rand(0,9) - N.updateMineralOverlays(1) /turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F) //with skill and luck, players can cleanly extract finds @@ -375,38 +427,52 @@ /turf/simulated/mineral/random name = "Mineral deposit" var/mineralSpawnChanceList = list( - ORE_URANIUM = 5, - ORE_PLATINUM = 5, - ORE_IRON = 35, - ORE_COAL = 35, - ORE_DIAMOND = 1, - ORE_GOLD = 5, - ORE_SILVER = 5, - ORE_PHORON = 10 + ORE_URANIUM = 2, + ORE_PLATINUM = 2, + ORE_IRON = 8, + ORE_COAL = 8, + ORE_DIAMOND = 1, + ORE_GOLD = 2, + ORE_SILVER = 2, + ORE_PHORON = 5 ) - var/mineralChance = 10 //means 10% chance of this plot changing to a mineral deposit + var/mineralChance = 45 -/turf/simulated/mineral/random/New() +/turf/simulated/mineral/random/Initialize() if (prob(mineralChance) && !mineral) var/mineral_name = pickweight(mineralSpawnChanceList) //temp mineral name if (mineral_name && (mineral_name in ore_data)) mineral = ore_data[mineral_name] UpdateMineral() - + . = ..() /turf/simulated/mineral/random/high_chance - mineralChance = 25 mineralSpawnChanceList = list( - ORE_URANIUM = 10, - ORE_PLATINUM = 10, - ORE_IRON = 20, - ORE_COAL = 20, - ORE_DIAMOND = 2, - ORE_GOLD = 10, - ORE_SILVER = 10, - ORE_PHORON = 20 + ORE_URANIUM = 2, + ORE_PLATINUM = 2, + ORE_IRON = 2, + ORE_COAL = 2, + ORE_DIAMOND = 1, + ORE_GOLD = 2, + ORE_SILVER = 2, + ORE_PHORON = 3 ) + mineralChance = 45 + +/turf/simulated/mineral/random/higher_chance + mineralSpawnChanceList = list( + ORE_URANIUM = 3, + ORE_PLATINUM = 3, + ORE_IRON = 1, + ORE_COAL = 1, + ORE_DIAMOND = 1, + ORE_GOLD = 3, + ORE_SILVER = 3, + ORE_PHORON = 2 + ) + mineralChance = 75 + /**********************Asteroid**************************/ @@ -415,8 +481,16 @@ // This means you can put grass on the asteroid etc. /turf/simulated/floor/asteroid name = "sand" - icon = 'icons/turf/flooring/asteroid.dmi' - icon_state = "asteroid" + //icon = 'icons/turf/flooring/asteroid.dmi' + //icon_state = "asteroid" + icon = 'icons/turf/smooth/ash.dmi' + icon_state = "ash" + smooth = SMOOTH_MORE | SMOOTH_BORDER + canSmoothWith = list( + /turf/simulated/floor/asteroid, + /turf/simulated/mineral, + /turf/simulated/wall + ) base_name = "sand" base_desc = "Gritty and unpleasant." base_icon = 'icons/turf/flooring/asteroid.dmi' @@ -426,19 +500,31 @@ oxygen = 0 nitrogen = 0 temperature = TCMB - var/dug = 0 //0 = has not yet been dug, 1 = has already been dug + var/dug = 0 //Increments by 1 everytime it's dug. 11 is the last integer that should ever be here. var/overlay_detail - var/static/list/overlay_cache has_resources = 1 footstep_sound = "gravelstep" -/turf/simulated/floor/asteroid/New() +// Copypaste parent for performance. +/turf/simulated/floor/asteroid/Initialize() + if(initialized) + crash_with("Warning: [src]([type]) initialized multiple times!") + initialized = TRUE + + if(dynamic_lighting) + luminosity = 0 + else + luminosity = 1 if(prob(20)) overlay_detail = rand(0,9) -/turf/simulated/floor/asteroid/initialize() - updateMineralOverlays(1) + if (smooth) + pixel_x = -4 + pixel_y = -4 + queue_smooth(src) + + return INITIALIZE_HINT_NORMAL /turf/simulated/floor/asteroid/ex_act(severity) switch(severity) @@ -446,9 +532,18 @@ return if(2.0) if (prob(70)) + dug += rand(4,10) + gets_dug() + else + dug += rand(1,3) gets_dug() if(1.0) - gets_dug() + if(prob(30)) + dug = 11 + gets_dug() + else + dug += rand(4,11) + gets_dug() return /turf/simulated/floor/asteroid/is_plating() @@ -499,20 +594,58 @@ break if(valid_tool) - if (dug) - user << "\red This area has already been dug" - return - var/turf/T = user.loc if (!(istype(T))) return - user << "\red You start digging." - playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1) + if (dug) + if(!GetBelow(src)) + return + user << " You start digging deeper." + playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) + if(!do_after(user,60)) + return + playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) + if(prob(33)) + switch(dug) + if(1) + user << " You've made a little progress." + if(2) + user << " You notice the hole is a little deeper." + if(3) + user << " You think you're about halfway there." + if(4) + user << " You finish up lifting another pile of dirt." + if(5) + user << " You dig a bit deeper. You're definitely halfway there now." + if(6) + user << " You still have a ways to go." + if(7) + user << " The hole looks pretty deep now." + if(8) + user << " The ground is starting to feel a lot looser." + if(9) + user << " You can almost see the other side." + if(10) + user << " Just a little deeper. . ." + else + user << " You penetrate the virgin earth!" + else + if(dug <= 10) + user << " You dig a little deeper." + else + user << " You dug a big hole." - if(!do_after(user,40)) return + gets_dug() + return - user << "\blue You dug a hole." + user << " You start digging." + playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) + + if(!do_after(user,40)) + return + + user << " You dug a hole." gets_dug() else if(istype(W,/obj/item/weapon/storage/bag/ore)) @@ -534,45 +667,34 @@ /turf/simulated/floor/asteroid/proc/gets_dug() - if(dug) - return - - for(var/i=0;i<(rand(3)+2);i++) - new/obj/item/weapon/ore/glass(src) - - dug = 1 icon_state = "asteroid_dug" - return -/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors) + new/obj/item/weapon/ore/glass(src) - overlays.Cut() + if(prob(50)) + var/list/ore = list(/obj/item/weapon/ore/coal = 8, + /obj/item/weapon/ore/iron = 6, + /obj/item/weapon/ore/phoron = 3, + /obj/item/weapon/ore/silver = 3, + /obj/item/weapon/ore/gold = 2, + /obj/item/weapon/ore/osmium = 3, + /obj/item/weapon/ore/hydrogen = 2, + /obj/item/weapon/ore/uranium = 1, + /obj/random/junk = 1, + /obj/item/weapon/ore/diamond = 0.5, + /obj/random/powercell = 0.2, + /obj/random/coin = 0.2, + /obj/random/loot = 0.1, + /obj/random/action_figure = 0.1) + var/ore_path = pickweight(ore) + if(ore) + new ore_path(src) + user << "You unearth something amidst the sand!" - var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) - for(var/direction in step_overlays) - - if(istype(get_step(src, step_overlays[direction]), /turf/space)) - overlays += image('icons/turf/flooring/asteroid.dmi', "asteroid_edges", dir = step_overlays[direction]) - - if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral)) - overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[direction]) - - if (!overlay_cache) - overlay_cache = list() - overlay_cache.len = 10 - for (var/i = 1; i <= overlay_cache.len; i++) - overlay_cache[i] = image('icons/turf/flooring/decals.dmi', "asteroid[i - 1]") - - if(overlay_detail) - overlays += overlay_cache[overlay_detail + 1] - - if(update_neighbors) - var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST) - for(var/direction in all_step_directions) - var/turf/simulated/floor/asteroid/A - if(istype(get_step(src, direction), /turf/simulated/floor/asteroid)) - A = get_step(src, direction) - A.updateMineralOverlays() + if(dug <= 10) + dug += 1 + else + ChangeTurf(/turf/space) /turf/simulated/floor/asteroid/Entered(atom/movable/M as mob|obj) ..() diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm new file mode 100644 index 00000000000..b63e8b29606 --- /dev/null +++ b/code/modules/mining/minebot.dm @@ -0,0 +1,243 @@ +/mob/living/silicon/robot/drone/mining + icon_state = "miningdrone" + law_type = /datum/ai_laws/mining_drone + module_type = /obj/item/weapon/robot_module/mining_drone/basic + holder_type = /obj/item/weapon/holder/drone/mining + maxHealth = 45 + health = 45 + pass_flags = PASSTABLE + req_access = list(access_mining, access_robotics) + idcard_type = /obj/item/weapon/card/id/synthetic/minedrone + speed = -1 + range_limit = 0 + var/health_upgrade + var/ranged_upgrade + var/melee_upgrade + var/drill_upgrade + +/mob/living/silicon/robot/drone/mining/New() + + ..() + + verbs += /mob/living/proc/hide + remove_language("Robot Talk") + add_language("Drone Talk", 1) + + //They are unable to be upgraded, so let's give them a bit of a better battery. + cell.maxcharge = 10000 + cell.charge = 10000 + + // NO BRAIN. + mmi = null + + //We need to screw with their HP a bit. They have around one fifth as much HP as a full borg. + for(var/V in components) if(V != "power cell") + var/datum/robot_component/C = components[V] + C.max_damage = 15 + + verbs -= /mob/living/silicon/robot/verb/Namepick + verbs -= /mob/living/silicon/robot/drone/verb/set_mail_tag + updateicon() + density = 0 + +/mob/living/silicon/robot/drone/mining/updatename() + real_name = "NT-I-[rand(100,999)]" + name = real_name + +/mob/living/silicon/robot/drone/mining/init() + aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src) + additional_law_channels["Drone"] = ":d" + if(!laws) laws = new law_type + if(!module) module = new module_type(src) + + flavor_text = "It's a tiny little mining drone. The casing is stamped with an corporate logo and the subscript: '[company_name] Automated Pickaxe!'" + playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) + +/mob/living/silicon/robot/drone/mining/welcome_drone() + src << "You are a mining drone, a tiny-brained robotic industrial machine." + src << "You have little individual will, some personality, and no drives or urges other than your laws and the art of mining." + src << "Remember, you DO NOT take orders from the AI." + src << "Use say ;Hello to talk to other drones and say Hello to speak silently to your nearby fellows." + +/mob/living/silicon/robot/drone/mining/attackby(var/obj/item/weapon/W, var/mob/user) + + if(istype(W, /obj/item/borg/upgrade/)) + user << "\The [src] is not compatible with \the [W]." + return + + else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + + if(stat == 2) + + var/choice = input("Look at your icon - is this what you want?") in list("Reboot","Recycle") + if(choice=="Reboot") + + if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave. + user << "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one." + return + + if(!allowed(usr)) + user << "Access denied." + return + + user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to reboot it.", ">You swipe your ID card through \the [src], attempting to reboot it.") + request_player() + return + + else + var/obj/item/weapon/card/id/ID = W + if(!allowed(usr)) + user << "Access denied." + return + + user.visible_message("\The [user] swipes \his ID card through \the [src], recycling it into points.", ">You swipe your ID card through \the [src], recycling it into points.") + ID.mining_points += 800 + if(health_upgrade) + ID.mining_points += 600 + health_upgrade = 0 + if(ranged_upgrade) + ID.mining_points += 600 + ranged_upgrade = 0 + if(melee_upgrade) + ID.mining_points += 400 + melee_upgrade = 0 + if(drill_upgrade) + ID.mining_points += 2000 + drill_upgrade = 0 + qdel(src) + return + + else + user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to shut it down.", "You swipe your ID card through \the [src], attempting to shut it down.") + + if(emagged) + return + + if(allowed(usr)) + shut_down() + else + user << "Access denied." + + return + + ..() + +/mob/living/silicon/robot/drone/mining/verb/print_report() + set name = "Print Message" + set desc = "Print out a status report of your own choosing." + set category = "Robot Commands" + + var/input = sanitize(input(usr, "Please enter a message to print out. NOTE: BBCode does not work.", "Print readout", "") as message|null) + if (!input) + usr << "Cancelled." + return + + var/customname = input(usr, "Pick a title for the report", "Title") as text|null + if (!customname) + usr << "Cancelled." + return + + var/status_report + switch(src.health) + if((maxHealth - (maxHealth/3)) to maxHealth) + status_report = "All systems nominal." + if((maxHealth/3) to maxHealth/2) + status_report = "Systems compromised." + if(0 to (maxHealth/3)) + status_report = "Systems failing." + else + status_report = "System status unknown." + + // Create the reply message + usr << "You begin printing the message." + if(do_after(src,20)) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) + P.name = "mining report - [customname]" + P.info = {"
+
NanoTrasen Mining Drone Report
+ FOR YOUR EYES ONLY

+ [input]
+ [status_report]
+
"} + P.update_icon() + visible_message("\icon[src] The [usr] pings, \"[P.name] ready for review\", and happily disgorges a small printout.", 2) + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + +/**********************Minebot Upgrades**********************/ + +/obj/item/device/mine_bot_ugprade + name = "minebot drill upgrade" + desc = "A minebot upgrade." + icon_state = "mainboard" + icon = 'icons/obj/module.dmi' + +/obj/item/device/mine_bot_ugprade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity) + if(!istype(M) || !proximity) + return + upgrade_bot(M, user) + +/obj/item/device/mine_bot_ugprade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) + if(M.melee_upgrade) + user << "[src] already has a drill upgrade installed!" + return + M.modtype = initial(M.modtype) + M.uneq_all() + qdel(M.module) + M.module = null + if(M.ranged_upgrade) + new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M) + else + new /obj/item/weapon/robot_module/mining_drone/drill(M) + M.module.rebuild() + M.recalculate_synth_capacities() + qdel(src) + +/obj/item/device/mine_bot_ugprade/health + name = "minebot chassis upgrade" + +/obj/item/device/mine_bot_ugprade/health/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) + if(M.health_upgrade) + user << "[src] already has a reinforced chassis!" + return + M.maxHealth = 100 + M.health += 55 + for(var/V in M.components) if(V != "power cell") + var/datum/robot_component/C = M.components[V] + C.max_damage = 30 + M.health_upgrade = 1 + qdel(src) + +/obj/item/device/mine_bot_ugprade/plasma + name = "minebot plasma cutter upgrade" + +/obj/item/device/mine_bot_ugprade/plasma/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) + if(M.ranged_upgrade) + user << "[src] already has a plasma cutter upgrade installed!" + return + M.modtype = initial(M.modtype) + M.uneq_all() + qdel(M.module) + M.module = null + if(M.melee_upgrade) + new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M) + else + new /obj/item/weapon/robot_module/mining_drone/plasmacutter(M) + M.ranged_upgrade = 1 + M.module.rebuild() + M.recalculate_synth_capacities() + qdel(src) + +/obj/item/device/mine_bot_ugprade/thermal + name = "minebot thermal drill upgrade" + +/obj/item/device/mine_bot_ugprade/thermal/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) + if(M.drill_upgrade) + user << "[src] already has a thermal drill!" + return + if(M.emagged == 1) + return 0 + + M.emagged = 1 + M.fakeemagged = 1 + M.drill_upgrade = 1 + qdel(src) \ No newline at end of file diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm index bc0ce899ea4..5e907f5a1ab 100644 --- a/code/modules/mining/mineral_effect.dm +++ b/code/modules/mining/mineral_effect.dm @@ -8,8 +8,8 @@ var/ore_key var/image/scanner_image -/obj/effect/mineral/New(var/newloc, var/ore/M) - ..(newloc) +/obj/effect/mineral/Initialize(mapload, var/ore/M) + . = ..() name = "[M.display_name] deposit" ore_key = M.name icon_state = "rock_[ore_key]" @@ -23,4 +23,4 @@ scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state)) else world << "No ore data for [src]!" - return scanner_image \ No newline at end of file + return scanner_image diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index 99dc1956b12..df9da302e83 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -20,20 +20,15 @@ var/chosen = DEFAULT_WALL_MATERIAL //which material will be used to make coins var/coinsToProduce = 10 - -/obj/machinery/mineral/mint/New() - ..() - spawn( 5 ) - for (var/dir in cardinal) - src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) - if(src.input) break - for (var/dir in cardinal) - src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) - if(src.output) break - processing_objects.Add(src) - return - return - +/obj/machinery/mineral/mint/Initialize() + . = ..() + for (var/dir in cardinal) + src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) + if(src.input) break + for (var/dir in cardinal) + src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) + if(src.output) break + processing_objects.Add(src) /obj/machinery/mineral/mint/process() if ( src.input) @@ -209,4 +204,4 @@ processing = 0; coinsToProduce = temp_coins src.updateUsrDialog() - return \ No newline at end of file + return diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index 41118552e3d..5402e922a9e 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -1,7 +1,7 @@ /obj/item/weapon/ore name = "rock" icon = 'icons/obj/mining.dmi' - icon_state = "ore2" + icon_state = "ore1" w_class = 2 var/datum/geosample/geologic_data var/material @@ -10,25 +10,25 @@ name = "pitchblende" icon_state = "ore_uranium" origin_tech = list(TECH_MATERIAL = 5) - material = "uranium" + material = ORE_URANIUM /obj/item/weapon/ore/iron name = "hematite" icon_state = "ore_iron" origin_tech = list(TECH_MATERIAL = 1) - material = "iron" + material = ORE_IRON /obj/item/weapon/ore/coal name = "raw carbon" icon_state = "ore_coal" origin_tech = list(TECH_MATERIAL = 1) - material = "coal" + material = ORE_COAL /obj/item/weapon/ore/glass name = "sand" icon_state = "ore_glass" origin_tech = list(TECH_MATERIAL = 1) - material = "sand" + material = ORE_SAND slot_flags = SLOT_HOLSTER // POCKET SAND! @@ -46,36 +46,36 @@ /obj/item/weapon/ore/phoron name = "phoron crystals" icon_state = "ore_phoron" - origin_tech = list(TECH_MATERIAL = 2) - material = "phoron" + origin_tech = list(TECH_MATERIAL = 2, TECH_PHORON = 2) + material = ORE_PHORON /obj/item/weapon/ore/silver name = "native silver ore" icon_state = "ore_silver" origin_tech = list(TECH_MATERIAL = 3) - material = "silver" + material = ORE_SILVER /obj/item/weapon/ore/gold name = "native gold ore" icon_state = "ore_gold" origin_tech = list(TECH_MATERIAL = 4) - material = "gold" + material = ORE_GOLD /obj/item/weapon/ore/diamond name = "diamonds" icon_state = "ore_diamond" origin_tech = list(TECH_MATERIAL = 6) - material = "diamond" + material = ORE_DIAMOND /obj/item/weapon/ore/osmium name = "raw platinum" icon_state = "ore_platinum" - material = "platinum" + material = ORE_PLATINUM /obj/item/weapon/ore/hydrogen name = "raw hydrogen" icon_state = "ore_hydrogen" - material = "mhydrogen" + material = ORE_HYDROGEN /obj/item/weapon/ore/slag name = "Slag" @@ -86,6 +86,8 @@ /obj/item/weapon/ore/New() pixel_x = rand(0,16)-8 pixel_y = rand(0,8)-8 + if(icon_state == "ore1") + icon_state = "ore[pick(1,2,3)]" /obj/item/weapon/ore/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/device/core_sampler)) diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm index f2f017e6ea1..84ae5a2f21e 100644 --- a/code/modules/mining/ore_datum.dm +++ b/code/modules/mining/ore_datum.dm @@ -17,6 +17,7 @@ var/global/list/ore_data = list() "million" = 999 ) var/xarch_source_mineral = "iron" + var/worth = 0 // Arbitrary point value for the ore redemption console /ore/New() . = ..() @@ -28,7 +29,7 @@ var/global/list/ore_data = list() display_name = "pitchblende" smelts_to = "uranium" result_amount = 5 - spread_chance = 10 + spread_chance = 15 ore = /obj/item/weapon/ore/uranium scan_icon = "mineral_uncommon" xarch_ages = list( @@ -36,6 +37,7 @@ var/global/list/ore_data = list() "million" = 704 ) xarch_source_mineral = "potassium" + worth = 25 /ore/hematite name = ORE_IRON @@ -43,9 +45,10 @@ var/global/list/ore_data = list() smelts_to = "iron" alloy = 1 result_amount = 5 - spread_chance = 25 + spread_chance = 30 ore = /obj/item/weapon/ore/iron scan_icon = "mineral_common" + worth = 4 /ore/coal name = ORE_COAL @@ -53,21 +56,22 @@ var/global/list/ore_data = list() smelts_to = "plastic" alloy = 1 result_amount = 5 - spread_chance = 25 + spread_chance = 35 ore = /obj/item/weapon/ore/coal scan_icon = "mineral_common" + worth = 2 /ore/glass name = ORE_SAND display_name = "sand" smelts_to = "glass" compresses_to = "sandstone" + worth = 1 /ore/phoron name = ORE_PHORON display_name = "phoron crystals" compresses_to = "phoron" - //smelts_to = something that explodes violently on the conveyor, huhuhuhu result_amount = 5 spread_chance = 25 ore = /obj/item/weapon/ore/phoron @@ -79,15 +83,17 @@ var/global/list/ore_data = list() "billion_lower" = 10 ) xarch_source_mineral = "phoron" + worth = 8 /ore/silver name = ORE_SILVER display_name = "native silver" smelts_to = "silver" result_amount = 5 - spread_chance = 10 + spread_chance = 15 ore = /obj/item/weapon/ore/silver scan_icon = "mineral_uncommon" + worth = 20 /ore/gold smelts_to = ORE_GOLD @@ -103,16 +109,18 @@ var/global/list/ore_data = list() "billion" = 4, "billion_lower" = 3 ) + worth = 30 /ore/diamond name = ORE_DIAMOND display_name = "diamond" compresses_to = "diamond" result_amount = 5 - spread_chance = 10 + spread_chance = 5 ore = /obj/item/weapon/ore/diamond scan_icon = "mineral_rare" xarch_source_mineral = "nitrogen" + worth = 50 /ore/platinum name = ORE_PLATINUM @@ -121,9 +129,10 @@ var/global/list/ore_data = list() compresses_to = "osmium" alloy = 1 result_amount = 5 - spread_chance = 10 + spread_chance = 15 ore = /obj/item/weapon/ore/osmium scan_icon = "mineral_rare" + worth = 15 /ore/hydrogen name = ORE_HYDROGEN @@ -131,3 +140,4 @@ var/global/list/ore_data = list() smelts_to = "tritium" compresses_to = "mhydrogen" scan_icon = "mineral_rare" + worth = 30 diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index ce365bbde27..4f2eecfe475 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -19,7 +19,10 @@ S.hide_from(usr) for(var/obj/item/weapon/ore/O in S.contents) S.remove_from_storage(O, src) //This will move the item to this item's contents - user << "\blue You empty the satchel into the box." + + CHECK_TICK + + user << span("notice", "You empty the satchel into the box.") update_ore_count() @@ -97,5 +100,7 @@ for (var/obj/item/weapon/ore/O in contents) O.loc = src.loc O.ex_act(severity++) + + CHECK_TICK qdel(src) - return \ No newline at end of file + return diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0c43d6b507b..eb420707223 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -467,7 +467,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp src << "Spawning as a mouse is currently disabled." return - if(ticker.current_state < GAME_STATE_PLAYING) + if(!ROUND_IS_STARTED) src << "You can not spawn as a mouse before round start!" return @@ -730,6 +730,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp for(var/image/I in client.images) if(I.icon_state == icon) iconRemoved = 1 + client.images -= I qdel(I) if(!iconRemoved) diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index da17ad95122..8544617ca05 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -18,9 +18,8 @@ flick(anim, animation) if(do_gibs) gibs(loc, viruses, dna) - spawn(15) - if(animation) qdel(animation) - if(src) qdel(src) + QDEL_IN(animation, 15) + QDEL_IN(src, 15) //This is the proc for turning a mob into ash. Mostly a copy of gib code (above). //Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here. @@ -45,10 +44,9 @@ new remains(loc) dead_mob_list -= src - spawn(15) - if(animation) qdel(animation) - if(src) qdel(src) + QDEL_IN(animation, 15) + QDEL_IN(src, 15) /mob/proc/death(gibbed,deathmessage="seizes up and falls limp...") @@ -95,8 +93,8 @@ updateicon() - if(ticker && ticker.mode) - ticker.mode.check_win() + if(SSticker.mode) + SSticker.mode.check_win() return 1 diff --git a/code/modules/mob/dview.dm b/code/modules/mob/dview.dm index febf05d34b8..d65aa461a57 100644 --- a/code/modules/mob/dview.dm +++ b/code/modules/mob/dview.dm @@ -20,3 +20,13 @@ var/mob/dview/dview_mob = new dead_mob_list -= src else living_mob_list -= src + +/mob/dview/Destroy(force = FALSE) + crash_with("Some fuck [force ? "force-" : ""]qdeleted the dview mob.") + if (!force) + return QDEL_HINT_LETMELIVE + + world.log << "Dview was force-qdeleted, this should never happen!" + + dview_mob = new + return QDEL_HINT_QUEUE diff --git a/code/modules/mob/freelook/ai/cameranet.dm b/code/modules/mob/freelook/ai/cameranet.dm index f29749b38c1..06a6c78bd46 100644 --- a/code/modules/mob/freelook/ai/cameranet.dm +++ b/code/modules/mob/freelook/ai/cameranet.dm @@ -10,7 +10,7 @@ /datum/visualnet/camera/proc/process_sort() if(cameras_unsorted) - cameras = dd_sortedObjectList(cameras) + sortTim(cameras, /proc/cmp_camera, FALSE) cameras_unsorted = 0 // Removes a camera from a chunk. diff --git a/code/modules/mob/freelook/ai/eye.dm b/code/modules/mob/freelook/ai/eye.dm index 59cd795f363..90c6b2dd455 100644 --- a/code/modules/mob/freelook/ai/eye.dm +++ b/code/modules/mob/freelook/ai/eye.dm @@ -42,7 +42,7 @@ /mob/living/silicon/ai/proc/create_eyeobj(var/newloc) if(eyeobj) destroy_eyeobj() if(!newloc) newloc = src.loc - eyeobj = getFromPool(/mob/eye/aiEye, newloc) + eyeobj = new /mob/eye/aiEye(newloc) eyeobj.owner = src eyeobj.name = "[src.name] (AI Eye)" // Give it a name if(client) client.eye = eyeobj @@ -58,7 +58,7 @@ /mob/living/silicon/ai/Destroy() destroy_eyeobj() - ..() + return ..() /atom/proc/move_camera_by_click() if(istype(usr, /mob/living/silicon/ai)) diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm index f4fea0aa58f..c150faddef1 100644 --- a/code/modules/mob/freelook/ai/update_triggers.dm +++ b/code/modules/mob/freelook/ai/update_triggers.dm @@ -18,19 +18,17 @@ cameranet.updatePortableCamera(src.camera) updating = 0 -/mob/living/silicon/AI/Move() +/mob/living/silicon/ai/Move() var/oldLoc = src.loc . = ..() if(.) if(provides_camera_vision()) - if(!updating) - updating = 1 - spawn(BORG_CAMERA_BUFFER) - if(oldLoc != src.loc) - cameranet.updateVisibility(oldLoc, 0) - cameranet.updateVisibility(loc, 0) - updating = 0 + addtimer(CALLBACK(src, .proc/camera_post_move, oldLoc), BORG_CAMERA_BUFFER, TIMER_UNIQUE) +/mob/living/silicon/ai/proc/camera_post_move(oldLoc) + if(oldLoc != src.loc) + cameranet.updateVisibility(oldLoc, 0) + cameranet.updateVisibility(loc, 0) #undef BORG_CAMERA_BUFFER // CAMERA @@ -46,10 +44,10 @@ src.set_light(0) cameranet.removeCamera(src) -/obj/machinery/camera/New() - ..() +/obj/machinery/camera/Initialize() + . = ..() //Camera must be added to global list of all cameras no matter what... - if(cameranet.cameras_unsorted || !ticker) + if(cameranet.cameras_unsorted) cameranet.cameras += src cameranet.cameras_unsorted = 1 else @@ -59,7 +57,7 @@ /obj/machinery/camera/Destroy() clear_all_networks() cameranet.cameras -= src - ..() + return ..() // Mobs /mob/living/silicon/ai/rejuvenate() diff --git a/code/modules/mob/freelook/chunk.dm b/code/modules/mob/freelook/chunk.dm index f5740603336..51b8379abbf 100644 --- a/code/modules/mob/freelook/chunk.dm +++ b/code/modules/mob/freelook/chunk.dm @@ -71,8 +71,7 @@ // The actual updating. /datum/chunk/proc/update() - - set background = 1 + set waitfor = FALSE var/list/newVisibleTurfs = new() acquireVisibleTurfs(newVisibleTurfs) @@ -128,7 +127,9 @@ src.y = y src.z = z - for(var/turf/t in range(10, locate(x + 8, y + 8, z))) + var/turf/center = locate(x + 8, y + 8, z) + + for(var/turf/t in RANGE_TURFS(10, center)) if(t.x >= x && t.y >= y && t.x < x + 16 && t.y < y + 16) turfs[t] = t diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm index 356b03e0f9b..e1accae65f7 100644 --- a/code/modules/mob/freelook/eye.dm +++ b/code/modules/mob/freelook/eye.dm @@ -32,14 +32,14 @@ updateallghostimages() ..() -mob/eye/Destroy() +/mob/eye/Destroy() if (ghostimage) ghost_darkness_images -= ghostimage ghost_sightless_images -= ghostimage qdel(ghostimage) ghostimage = null updateallghostimages() - ..() + return ..() /mob/eye/Move(n, direct) if(owner == src) diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm index 11423671640..1dd520e7f1d 100644 --- a/code/modules/mob/freelook/mask/update_triggers.dm +++ b/code/modules/mob/freelook/mask/update_triggers.dm @@ -25,7 +25,7 @@ /mob/living/Destroy() cultnet.updateVisibility(src, 0) - ..() + return ..() /mob/living/rejuvenate() var/was_dead = stat == DEAD diff --git a/code/modules/mob/freelook/update_triggers.dm b/code/modules/mob/freelook/update_triggers.dm index c04fdd26f15..3c22e0da148 100644 --- a/code/modules/mob/freelook/update_triggers.dm +++ b/code/modules/mob/freelook/update_triggers.dm @@ -3,9 +3,8 @@ // TURFS /proc/updateVisibility(atom/A, var/opacity_check = 1) - if(ticker) - for(var/datum/visualnet/VN in visual_nets) - VN.updateVisibility(A, opacity_check) + for(var/datum/visualnet/VN in visual_nets) + VN.updateVisibility(A, opacity_check) /turf var/list/image/obfuscations = new() @@ -17,8 +16,8 @@ updateVisibility(src) return ..() -/turf/simulated/New() - ..() +/turf/simulated/Initialize() + . = ..() updateVisibility(src) @@ -46,4 +45,4 @@ // Glass door glass = 1 // don't check then? if(!glass) - updateVisibility(src, 0) \ No newline at end of file + updateVisibility(src, 0) diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm index 38cb5bb3d2a..6d208834585 100644 --- a/code/modules/mob/freelook/visualnet.dm +++ b/code/modules/mob/freelook/visualnet.dm @@ -14,7 +14,7 @@ /datum/visualnet/Destroy() visual_nets -= src - ..() + return ..() // Checks if a chunk has been Generated in x, y, z. /datum/visualnet/proc/chunkGenerated(x, y, z) @@ -64,7 +64,7 @@ /datum/visualnet/proc/updateVisibility(atom/A, var/opacity_check = 1) - if(!ticker || (opacity_check && !A.opacity)) + if((opacity_check && !A.opacity)) return majorChunkChange(A, 2) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 9fefd3572d2..4138166144c 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -14,25 +14,38 @@ var/list/holder_mob_icon_cache = list() var/name_dead var/isalive - var/last_loc_general//This stores a general location of the object. Ie, a container or a mob - var/last_loc_specific//This stores specific extra information about the location, pocket, hand, worn on head, etc. Only relevant to mobs + var/static/list/unsafe_containers + + var/last_loc_general //This stores a general location of the object. Ie, a container or a mob + var/last_loc_specific //This stores specific extra information about the location, pocket, hand, worn on head, etc. Only relevant to mobs + +/obj/item/weapon/holder/proc/setup_unsafe_list() + unsafe_containers = typecacheof(list( + /obj/item/weapon/storage, + /obj/item/weapon/reagent_containers, + /obj/structure/closet/crate, + /obj/machinery/appliance, + /obj/machinery/microwave + )) + +/obj/item/weapon/holder/Initialize() + . = ..() + if (!unsafe_containers) + setup_unsafe_list() -/obj/item/weapon/holder/New() - tag = rand(0,9999) if (!item_state) item_state = icon_state flags_inv |= ALWAYSDRAW - ..() - processing_objects.Add(src) + START_PROCESSING(SSprocessing, src) /obj/item/weapon/holder/Destroy() reagents = null - processing_objects.Remove(src) + STOP_PROCESSING(SSprocessing, src) if (contained) release_mob() - ..() + return ..() /obj/item/weapon/holder/examine(mob/user) if (contained) @@ -66,7 +79,6 @@ var/list/holder_mob_icon_cache = list() release_mob() - return if (isalive && contained.stat == DEAD) held_death(1)//If we get here, it means the mob died sometime after we picked it up. We pass in 1 so that we can play its deathmessage @@ -74,22 +86,8 @@ var/list/holder_mob_icon_cache = list() //This function checks if the current location is safe to release inside //it returns 1 if the creature will bug out when released -/obj/item/weapon/holder/proc/is_unsafe_container(var/obj/place) - if (istype(place, /turf)) - return 0 - else if (istype(place, /obj/item/weapon/storage)) - return 1 - else if (istype(place, /obj/item/weapon/reagent_containers)) - return 1 - else if (istype(place, /obj/structure/closet/crate)) - return 1 - else if (istype(place, /obj/machinery/appliance)) - return 1 - else if (istype(place, /obj/machinery/microwave)) - return 1 - else - return 0 - +/obj/item/weapon/holder/proc/is_unsafe_container(atom/place) + return is_type_in_typecache(place, unsafe_containers) //Releases all mobs inside the holder, then deletes it. //is_unsafe_container should be checked before calling this @@ -103,7 +101,6 @@ var/list/holder_mob_icon_cache = list() M.reset_view() M.Released() - contained = null var/mob/L = get_holding_mob() if (L) @@ -111,7 +108,6 @@ var/list/holder_mob_icon_cache = list() qdel(src) - //Similar to above function, but will not deposit things in any container, only directly on a turf. //Can be called safely anywhere. Notably on holders held or worn on a mob /obj/item/weapon/holder/proc/release_to_floor() @@ -139,18 +135,18 @@ var/list/holder_mob_icon_cache = list() //once with it on the floor, and then once in the container //This conditional allows us to ignore that first one. Handling of mobs dropped on the floor is done in process if (istype(loc, /turf)) - spawn(3) - //Repeat this check - //If we're still on the turf a few frames later, then we have actually been dropped or thrown - //Release the mob accordingly - if (istype(loc, /turf)) - release_mob() - + //Repeat this check + //If we're still on the turf a few frames later, then we have actually been dropped or thrown + //Release the mob accordingly + addtimer(CALLBACK(src, .proc/post_drop), 3) return if (istype(loc, /obj/item/weapon/storage)) //The second drop reads the container its placed into as the location update_location() +/obj/item/weapon/holder/proc/post_drop() + if (isturf(loc)) + release_mob() /obj/item/weapon/holder/equipped(var/mob/user, var/slot) ..() @@ -163,10 +159,6 @@ var/list/holder_mob_icon_cache = list() report_onmob_location(1, slotnumber, contained) - - - - /obj/item/weapon/holder/attack_self(mob/M as mob) if (contained && !(contained.stat & DEAD)) @@ -174,11 +166,11 @@ var/list/holder_mob_icon_cache = list() var/mob/living/carbon/human/H = M switch(H.a_intent) if(I_HELP) - H.visible_message("\blue [H] pets [contained]") + H.visible_message("[H] pets [contained].") if(I_HURT) contained.adjustBruteLoss(3) - H.visible_message("\red [H] crushes [contained]") + H.visible_message("[H] crushes [contained].") else M << "[contained] is dead." @@ -209,7 +201,7 @@ var/list/holder_mob_icon_cache = list() //We have to play it as a visible message on the grabber, because the normal death message played on the dying mob won't show if it's being held var/mob/M = get_holding_mob() if (M) - M.visible_message("\The [contained.name] dies") + M.visible_message("[contained.name] dies.") //update_icon() @@ -399,6 +391,12 @@ var/list/holder_mob_icon_cache = list() item_state = "constructiondrone" w_class = 6//You're not fitting this thing in a backpack +/obj/item/weapon/holder/drone/mining + name = "mining drone" + desc = "It's a plucky mining drone." + icon_state = "mdrone" + item_state = "mdrone" + /obj/item/weapon/holder/cat name = "cat" desc = "It's a cat. Meow." @@ -501,7 +499,7 @@ var/list/holder_mob_icon_cache = list() /obj/item/weapon/holder/lizard name = "lizard" desc = "It's a hissy little lizard. Is it related to Unathi?" - desc_dead = "It doesn't hiss anymore" + desc_dead = "It doesn't hiss anymore." icon_state_dead = "lizard_dead" icon_state = "lizard" @@ -547,7 +545,7 @@ var/list/holder_mob_icon_cache = list() name = "walking mushroom" name_dead = "mushroom" desc = "It's a massive mushroom... with legs?" - desc_dead = "Shame, he was a really fun-guy." + desc_dead = "Shame, he was a really fun-guy." // HA icon_state = "mushroom" icon_state_dead = "mushroom_dead" slot_flags = SLOT_HEAD diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 221b6d0cec8..df3213d2013 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -30,6 +30,11 @@ access_scanner.req_access = req_access.Copy() access_scanner.req_one_access = req_one_access.Copy() +/mob/living/bot/Destroy() + QDEL_NULL(botcard) + QDEL_NULL(access_scanner) + return ..() + /mob/living/bot/Life() ..() if(health <= 0) diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index 1508c3056e5..ff15054a394 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -54,8 +54,8 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th janitorial_supplies |= src - if(radio_controller) - radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) + if(SSradio) + SSradio.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) /mob/living/bot/cleanbot/Destroy() . = ..() @@ -63,7 +63,8 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th patrol_path = null target = null ignorelist = null - janitorial_supplies -= src + QDEL_NULL(listener) + global.janitorial_supplies -= src /mob/living/bot/cleanbot/proc/handle_target() if(target.clean_marked && target.clean_marked != src) @@ -158,7 +159,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th if(!found_spot && !target) // No targets in range if(!patrol_path || !patrol_path.len) if(!signal_sent || signal_sent > world.time + 200) // Waited enough or didn't send yet - var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq) + var/datum/radio_frequency/frequency = SSradio.return_frequency(beacon_freq) if(!frequency) return @@ -354,6 +355,10 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th cleanbot.closest_dist = dist cleanbot.next_dest = signal.data["next_patrol"] +/obj/cleanbot_listener/Destroy() + cleanbot = null + return ..() + /* Assembly */ /obj/item/weapon/bucket_sensor diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index a5fb6255e47..7ca435ab943 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -27,12 +27,15 @@ var/atom/target var/frustration = 0 -/mob/living/bot/farmbot/New() - ..() - spawn(5) - tank = locate() in contents - if(!tank) - tank = new /obj/structure/reagent_dispensers/watertank(src) +/mob/living/bot/farmbot/Initialize() + . = ..() + tank = locate() in contents + if(!tank) + tank = new /obj/structure/reagent_dispensers/watertank(src) + +/mob/living/bot/farmbot/Destroy() + QDEL_NULL(tank) + return ..() /mob/living/bot/farmbot/attack_hand(var/mob/user as mob) . = ..() diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 0a061c1225a..48dff771d52 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -229,7 +229,7 @@ if(building == 1) I = new /obj/item/stack/tile/floor(src) else - I = getFromPool(/obj/item/stack/rods, src) + I = new /obj/item/stack/rods(src) A.attackby(I, src) target = null repairing = 0 diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index 37f724e1b15..59e455fb841 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -29,6 +29,11 @@ var/treatment_emag = "toxin" var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? + +/mob/living/bot/medbot/Destroy() + QDEL_NULL(reagent_glass) + return ..() + /mob/living/bot/medbot/Life() ..() @@ -111,9 +116,9 @@ update_icons() /mob/living/bot/medbot/update_icons() - overlays.Cut() + cut_overlays() if(skin) - overlays += image('icons/obj/aibots.dmi', "medskin_[skin]") + add_overlay("medskin_[skin]") if(currently_healing) icon_state = "medibots" else @@ -337,11 +342,10 @@ var/skin = null //Same as medbot, set to tox or ointment for the respective kits. w_class = 3.0 -/obj/item/weapon/firstaid_arm_assembly/New() - ..() - spawn(5) // Terrible. TODO: fix - if(skin) - overlays += image('icons/obj/aibots.dmi', "kit_skin_[src.skin]") +/obj/item/weapon/firstaid_arm_assembly/Initialize() + . = ..() + if(skin) + add_overlay("kit_skin_[skin]") /obj/item/weapon/firstaid_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -361,7 +365,7 @@ build_step++ user << "You add the health sensor to [src]." name = "First aid/robot arm/health analyzer assembly" - overlays += image('icons/obj/aibots.dmi', "na_scanner") + add_overlay("na_scanner") return 1 if(1) diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index f7f37c26c71..6500e57964b 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -48,15 +48,19 @@ desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey." auto_patrol = 1 -/mob/living/bot/secbot/New() - ..() +/mob/living/bot/secbot/Initialize() + . = ..() listener = new /obj/secbot_listener(src) listener.secbot = src - spawn(5) // Since beepsky is made on the start... this delay is necessary - if(radio_controller) - radio_controller.add_object(listener, control_freq, filter = RADIO_SECBOT) - radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) + if(SSradio) + SSradio.add_object(listener, control_freq, filter = RADIO_SECBOT) + SSradio.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) + +/mob/living/bot/secbot/Destroy() + QDEL_NULL(listener) + target = null + return ..() /mob/living/bot/secbot/turn_off() ..() @@ -315,7 +319,7 @@ var/obj/item/weapon/secbot_assembly/Sa = new /obj/item/weapon/secbot_assembly(Tsec) Sa.build_step = 1 - Sa.overlays += image('icons/obj/aibots.dmi', "hs_hole") + Sa.add_overlay("hs_hole") Sa.created_name = name new /obj/item/device/assembly/prox_sensor(Tsec) new /obj/item/weapon/melee/baton(Tsec) @@ -405,11 +409,15 @@ /obj/secbot_listener var/mob/living/bot/secbot/secbot = null +/obj/secbot_listener/Destroy() + secbot = null + return ..() + /obj/secbot_listener/proc/post_signal(var/freq, var/key, var/value) // send a radio signal with a single data key/value pair post_signal_multiple(freq, list("[key]" = value)) /obj/secbot_listener/proc/post_signal_multiple(var/freq, var/list/keyval) // send a radio signal with multiple data key/values - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) + var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) if(!frequency) return @@ -520,7 +528,7 @@ var/obj/item/weapon/weldingtool/WT = O if(WT.remove_fuel(0, user)) build_step = 1 - overlays += image('icons/obj/aibots.dmi', "hs_hole") + add_overlay("hs_hole") user << "You weld a hole in \the [src]." return 1 @@ -528,7 +536,7 @@ user.drop_item() build_step = 2 user << "You add \the [O] to [src]." - overlays += image('icons/obj/aibots.dmi', "hs_eye") + add_overlay("hs_eye") name = "helmet/signaler/prox sensor assembly" qdel(O) return 1 @@ -538,7 +546,7 @@ build_step = 3 user << "You add \the [O] to [src]." name = "helmet/signaler/prox sensor/robot arm assembly" - overlays += image('icons/obj/aibots.dmi', "hs_arm") + add_overlay("hs_arm") qdel(O) return 1 diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 6b96ce553e2..8b24eeadc41 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -1,8 +1,6 @@ // Alien larva are quite simple. /mob/living/carbon/alien/Life() - - set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (transforming) return if(!loc) return diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index e8967791905..e200bf39435 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -134,7 +134,7 @@ if(brainmob) qdel(brainmob) brainmob = null - ..() + return ..() /obj/item/device/mmi/radio_enabled name = "radio-enabled man-machine interface" diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index aaf947a13d4..149b4e1634a 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -20,7 +20,7 @@ if(stat!=DEAD) //If not dead. death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA ghostize() //Ghostize checks for key so nothing else is necessary. - ..() + return ..() say_understands(var/other)//Goddamn is this hackish, but this say code is so odd if (istype(other, /mob/living/silicon/ai)) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 6bf79bc5734..d30cb5d210e 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -43,7 +43,7 @@ if(brainmob) qdel(brainmob) brainmob = null - ..() + return ..() /obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H) name = "\the [H]'s [initial(src.name)]" diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm index d762bffe079..6af5ac9b7e6 100644 --- a/code/modules/mob/living/carbon/breathe.dm +++ b/code/modules/mob/living/carbon/breathe.dm @@ -2,7 +2,7 @@ //Start of a breath chain, calls breathe() /mob/living/carbon/handle_breathing() - if(air_master.current_cycle%4==2 || failed_last_breath || (health < config.health_threshold_crit)) //First, resolve location and get a breath + if(SSair.times_fired%4==2 || failed_last_breath || (health < config.health_threshold_crit)) //First, resolve location and get a breath breathe() /mob/living/carbon/proc/breathe() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f7857ed2899..e69dd9d730f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -18,7 +18,8 @@ /mob/living/carbon/Destroy() QDEL_NULL(touching) - // We don't qdel(bloodstr) because it's the same as qdel(reagents) + bloodstr = null + QDEL_NULL(dna) for(var/guts in internal_organs) qdel(guts) return ..() @@ -66,13 +67,13 @@ if(prob(src.getBruteLoss() - 50)) for(var/atom/movable/A in stomach_contents) A.loc = loc - stomach_contents.Remove(A) + LAZYREMOVE(stomach_contents, A) src.gib() /mob/living/carbon/gib() for(var/mob/M in src) if(M in src.stomach_contents) - src.stomach_contents.Remove(M) + LAZYREMOVE(src.stomach_contents, M) M.loc = src.loc for(var/mob/N in viewers(src, null)) if(N.client) diff --git a/code/modules/mob/living/carbon/diona_base.dm b/code/modules/mob/living/carbon/diona_base.dm index 11fd1775d32..08d213fb6a6 100644 --- a/code/modules/mob/living/carbon/diona_base.dm +++ b/code/modules/mob/living/carbon/diona_base.dm @@ -513,7 +513,7 @@ var/list/diona_banned_languages = list( /datum/dionastats/Destroy() light_organ = null//Nulling out these references to prevent GC errors nutrient_organ = null - ..() + return ..() #undef FLASHLIGHT_STRENGTH diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 75731569f93..732c690b117 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -60,9 +60,9 @@ if(!gibbed && species.death_sound) playsound(loc, species.death_sound, 80, 1, 1) - if(ticker && ticker.mode) + if(SSticker.mode) sql_report_death(src) - ticker.mode.check_win() + SSticker.mode.check_win() if(wearing_rig) wearing_rig.notify_ai("Warning: user death event. Mobility control passed to integrated intelligence system.") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 07dfd95a69a..235d7a31cd4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -88,6 +88,8 @@ bad_internal_organs = null bad_external_organs = null + QDEL_NULL(vessel) + QDEL_NULL(DS) // qdel and null out our equipment. QDEL_NULL(shoes) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 055de9788f7..f66487eba60 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -75,7 +75,7 @@ -/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0) +/mob/living/carbon/human/Allow_Spacemove(var/check_drift = 0) //Can we act? if(restrained()) return 0 @@ -89,9 +89,6 @@ for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules) thrust = module.jets break - else if(istype(back,/obj/item/weapon/storage/backpack/typec)) - inertia_dir = 0 - return 1 if(thrust) if(((!check_drift) || (check_drift && thrust.stabilization_on)) && (!lying) && (thrust.allow_thrust(0.01, src))) @@ -99,9 +96,7 @@ return 1 //If no working jetpack then use the other checks - if(..()) - return 1 - return 0 + . = ..() /mob/living/carbon/human/slip_chance(var/prob_slip = 5) diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 172927cc474..8fcd1af9d0b 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -39,7 +39,7 @@ return for(var/obj/item/organ/external/E in bad_external_organs) - if(!E) + if(QDELETED(E)) continue if(!E.need_process()) bad_external_organs -= E diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 978bfa6cd90..79f87923bc4 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -200,12 +200,12 @@ set desc = "Empties the contents of your stomach" set category = "Abilities" - if(stomach_contents.len) + if(LAZYLEN(stomach_contents)) for(var/mob/M in src) if(M in stomach_contents) - stomach_contents.Remove(M) - M.loc = loc - src.visible_message("\red [src] hurls out the contents of their stomach!") + LAZYREMOVE(stomach_contents, M) + M.forceMove(loc) + src.visible_message(span("danger", "\The [src] hurls out the contents of their stomach!")) return /mob/living/carbon/human/proc/psychic_whisper(mob/M as mob in oview()) diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index 93a7da1fbfa..66bbc924cf7 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -55,8 +55,8 @@ /mob/living/carbon/human/stok mob_size = 2.6//Roughly the same size as monkey -/mob/living/carbon/human/neaera/New(var/new_loc) - ..(new_loc, "Neaera") +/mob/living/carbon/human/stok/New(var/new_loc) + ..(new_loc, "Stok") /mob/living/carbon/human/bug mob_size = 2.6//Roughly the same size as monkey diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 08edfe79077..dde94e2a9b6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -35,7 +35,6 @@ var/global/list/overlays_cache = null /mob/living/carbon/human/Life() - set invisibility = 0 set background = BACKGROUND_ENABLED if (transforming) @@ -1265,23 +1264,6 @@ if(T.dynamic_lighting && T.get_lumcount() < 0.01) // give a little bit of tolerance for near-dark areas. playsound_local(src,pick(scarySounds),50, 1, -1) -/mob/living/carbon/human/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) - stomach_contents.Remove(M) - continue - if(iscarbon(M)|| isanimal(M)) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(air_master.current_cycle%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 - /mob/living/carbon/human/proc/handle_changeling() if(mind && mind.changeling) mind.changeling.regenerate() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index dd4c8932cd4..399fa6fe50a 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -146,6 +146,9 @@ Please contact me on #coderbus IRC. ~Carn x //UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING //Fixed by Nanako /mob/living/carbon/human/update_icons() + if (QDELING(src)) + return // No point. + //so we don't update overlays for lying/standing unless our stance changes again update_hud() //TODO: remove the need for this overlays.Cut() @@ -234,6 +237,9 @@ var/global/list/damage_icon_parts = list() //Passing in a value of 2 for update_icons will ignore any cached icon, and force a new one to be generated /mob/living/carbon/human/proc/update_body(var/update_icons=1) + if (QDELING(src)) + return + var/husk_color_mod = rgb(96,88,80) var/hulk_color_mod = rgb(48,224,40) @@ -355,6 +361,9 @@ var/global/list/damage_icon_parts = list() //HAIR OVERLAY /mob/living/carbon/human/proc/update_hair(var/update_icons=1) + if (QDELING(src)) + return + //Reset our hair overlays_standing[HAIR_LAYER] = null @@ -404,6 +413,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_mutations(var/update_icons=1) + if (QDELING(src)) + return + var/fat if(FAT in mutations) fat = "fat" @@ -449,6 +461,9 @@ var/global/list/damage_icon_parts = list() /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() + if (QDELING(src)) + return + ..() if(transforming) return @@ -483,6 +498,9 @@ var/global/list/damage_icon_parts = list() //vvvvvv UPDATE_INV PROCS vvvvvv /mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[UNIFORM_LAYER] = null if(check_draw_underclothing()) w_uniform.screen_loc = ui_iclothing @@ -543,6 +561,9 @@ var/global/list/damage_icon_parts = list() update_icons() /mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[ID_LAYER] = null if(wear_id) @@ -566,6 +587,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_inv_gloves(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[GLOVES_LAYER] = null if(check_draw_gloves()) @@ -607,6 +631,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_glasses(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[GLASSES_LAYER] = null if(check_draw_glasses()) if(glasses.contained_sprite) @@ -632,6 +659,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_inv_ears(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[L_EAR_LAYER] = null overlays_standing[R_EAR_LAYER] = null @@ -688,6 +718,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_inv_shoes(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[SHOES_LAYER] = null if(check_draw_shoes()) var/image/standing @@ -725,6 +758,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_inv_s_store(var/update_icons=1) + if (QDELING(src)) + return + if(s_store) //s_store.auto_adapt_species(src) var/t_state = s_store.item_state @@ -737,6 +773,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_head(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[HEAD_LAYER] = null if(head) head.screen_loc = ui_head //TODO @@ -789,6 +828,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_inv_belt(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[BELT_LAYER] = null if(belt) @@ -852,6 +894,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) + if (QDELING(src)) + return + if( wear_suit && istype(wear_suit, /obj/item/) ) @@ -904,12 +949,18 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_inv_pockets(var/update_icons=1) + if (QDELING(src)) + return + if(l_store) l_store.screen_loc = ui_storage1 //TODO if(r_store) r_store.screen_loc = ui_storage2 //TODO if(update_icons) update_icons() /mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[FACEMASK_LAYER] = null if(check_draw_mask()) wear_mask.screen_loc = ui_mask //TODO @@ -943,6 +994,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_back(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[BACK_LAYER] = null if(back) @@ -1007,6 +1061,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1) + if (QDELING(src)) + return + if(handcuffed) drop_r_hand() drop_l_hand() @@ -1026,6 +1083,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1) + if (QDELING(src)) + return + if(legcuffed) var/image/standing @@ -1048,6 +1108,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[R_HAND_LAYER] = null if(r_hand) r_hand.screen_loc = ui_rhand //TODO @@ -1090,6 +1153,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[L_HAND_LAYER] = null if(l_hand) l_hand.screen_loc = ui_lhand //TODO @@ -1131,6 +1197,9 @@ var/global/list/damage_icon_parts = list() if(update_icons) update_icons() /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[TAIL_LAYER] = null if(species.tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) @@ -1142,6 +1211,9 @@ var/global/list/damage_icon_parts = list() update_icons() /mob/living/carbon/human/proc/get_tail_icon() + if (QDELING(src)) + return + var/icon_key = "[species.race_key][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]" var/icon/tail_icon = tail_icon_cache[icon_key] if(!tail_icon) @@ -1182,12 +1254,12 @@ var/global/list/damage_icon_parts = list() tail_overlay = set_tail_state(t_state) if(tail_overlay) - spawn(20) - //check that the animation hasn't changed in the meantime - if(overlays_standing[TAIL_LAYER] == tail_overlay && tail_overlay.icon_state == t_state) - animate_tail_stop() - + addtimer(CALLBACK(src, .proc/end_animate_tail_once, tail_overlay), 20) +/mob/living/carbon/human/proc/end_animate_tail_once(image/tail_overlay) + //check that the animation hasn't changed in the meantime + if(overlays_standing[TAIL_LAYER] == tail_overlay && tail_overlay.icon_state == "[species.tail]_once") + animate_tail_stop() /mob/living/carbon/human/proc/animate_tail_start() set_tail_state("[species.tail]_slow[rand(0,9)]") @@ -1214,6 +1286,9 @@ var/global/list/damage_icon_parts = list() //Adds a collar overlay above the helmet layer if the suit has one // Suit needs an identically named sprite in icons/mob/collar.dmi /mob/living/carbon/human/proc/update_collar(var/update_icons=1) + if (QDELING(src)) + return + var/icon/C = new('icons/mob/collar.dmi') var/image/standing = null @@ -1227,6 +1302,9 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_fire(var/update_icons=1) + if (QDELING(src)) + return + overlays_standing[FIRE_LAYER] = null if(on_fire) overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"=FIRE_LAYER) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 2609ba01d35..a6a37b04293 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -142,19 +142,24 @@ watching -= eavesdropping //now mobs - var/speech_bubble_test = say_test(message) - var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") - spawn(30) qdel(speech_bubble) + + var/list/listening_clients = list() // The clients we're going to show the speech bubble to. for(var/mob/M in listening) - M << speech_bubble M.hear_say(message, verb, speaking, alt_name, italics, src) + if (M.client) + listening_clients += M.client if (eavesdropping.len) var/new_message = stars(message) //hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less. for(var/mob/M in eavesdropping) - M << speech_bubble M.hear_say(new_message, verb, speaking, alt_name, italics, src) + if (M.client) + listening_clients += M.client + + var/speech_bubble_test = say_test(message) + var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") + INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, speech_bubble, listening_clients, 30) if (watching.len) var/rendered = "[src.name] [not_heard]." diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index 7d364d2b8a6..e4f5dc0a84c 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -1,6 +1,5 @@ /mob/living/carbon/slime/Life() - set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (src.transforming) return diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 99ffce0eebb..2494f00f1e8 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -140,8 +140,8 @@ ..() -/mob/living/carbon/slime/Process_Spacemove() - return 2 +/mob/living/carbon/slime/Allow_Spacemove() + return 1 /mob/living/carbon/slime/Stat() ..() @@ -381,4 +381,4 @@ if(powerlevel > 10) powerlevel = 10 adjustToxLoss(-10) - nutrition = max(nutrition, get_max_nutrition()) \ No newline at end of file + nutrition = max(nutrition, get_max_nutrition()) diff --git a/code/modules/mob/living/carbon/metroid/update_icons.dm b/code/modules/mob/living/carbon/metroid/update_icons.dm index 847dcaeb181..0df92c2f467 100644 --- a/code/modules/mob/living/carbon/metroid/update_icons.dm +++ b/code/modules/mob/living/carbon/metroid/update_icons.dm @@ -3,7 +3,7 @@ icon_state = "[colour] baby slime dead" else icon_state = "[colour] [is_adult ? "adult" : "baby"] slime[Victim ? "" : " eat"]" - overlays.len = 0 + cut_overlays() if (mood) - overlays += image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]") - ..() \ No newline at end of file + add_overlay("aslime-[mood]") + ..() diff --git a/code/modules/mob/living/devour.dm b/code/modules/mob/living/devour.dm index 80b1795af66..6302b16d04e 100644 --- a/code/modules/mob/living/devour.dm +++ b/code/modules/mob/living/devour.dm @@ -18,11 +18,6 @@ #define PPM 9//Protein per meat, used for calculating the quantity of protein in an animal - - - - - /mob/living/var/swallowed_mob = 0 //This is set true if there are any mobs in this mob's contents. they will be slowly digested. //just used as a boolean to minimise extra processing @@ -85,26 +80,16 @@ else devour_gradual(victim,mouth_size) - - - - - - - - - - /mob/living/proc/swallow(var/mob/living/victim, var/mouth_size) //This function will move the victim inside the eater's contents.. There they will be digested over time var/swallow_time = max(3 + (victim.mob_size * victim.mob_size) - mouth_size, 3) - src.visible_message("[src] starts swallowing [victim]","You start swallowing [victim], this will take approximately [swallow_time] seconds") + src.visible_message("[src] starts swallowing \the [victim]!","You start swallowing \the [victim], this will take approximately [swallow_time] seconds.") var/turf/ourloc = src.loc var/turf/victimloc = victim.loc if (do_mob(src, victim, swallow_time*10)) - victim.loc = src - stomach_contents.Add(victim) + victim.forceMove(src) + LAZYADD(stomach_contents, victim) else if (victimloc != victim.loc) src << "[victim] moved away, you need to keep it still. Try grabbing, stunning or killing it first." else if (ourloc != src.loc) @@ -112,9 +97,6 @@ else src << "Swallowing failed!"//reason unknown, maybe the eater got stunned? - - - /mob/living/proc/devour_gradual(var/mob/living/victim, var/mouth_size) //This function will start consuming the victim by taking bites out of them. //Victim or attacker moving will interrupt it @@ -180,48 +162,43 @@ //This can also happen if you start devouring something else break - - //this function gradually digests things inside the mob's contents. //It is called from life.dm. Any creatures that don't want to digest their contents simply don't call it /mob/living/proc/handle_stomach() for(var/mob/living/M in stomach_contents) if(M.loc != src)//if something somehow escaped the stomach, then we remove it - stomach_contents.Remove(M) + LAZYREMOVE(stomach_contents, M) continue if(!M.composition_reagent_quantity) M.calculate_composition() var/digestion_power = (((mob_size * mob_size)/10) / (M.mob_size * M.mob_size)) - var/digestion_time = digestion_power * 60//Number of seconds it will take to digest in total - var/DPPP = 1 / (digestion_time / 2.1)//Digestion percentage per proc + var/digestion_time = digestion_power * 60 //Number of seconds it will take to digest in total + var/DPPP = 1 / (digestion_time / 2.1) //Digestion percentage per proc M.adjustCloneLoss(M.maxHealth*DPPP) //Digestion power is how much of the creature we can digest per minute. Calculated as a tenth of our mob size squared, divided by the victim's mob size squared //If the resulting value is >1, digestion will take under a minute. src.ingested.add_reagent(M.composition_reagent, M.composition_reagent_quantity*DPPP) - if ((M.stat != DEAD) && (M.cloneloss > (M.maxHealth*0.5)))//If we've consumed half of the victim, then it dies + if ((M.stat != DEAD) && (M.cloneloss > (M.maxHealth*0.5))) //If we've consumed half of the victim, then it dies M.death() M.stat = DEAD //Just in case the death function doesn't set it - src << "Your stomach feels a little more relaxed as [M] finally stops fighting" + src << "Your stomach feels a little more relaxed as \the [M] finally stops fighting." - if (M.cloneloss >= M.maxHealth)//If we've consumed all of it, then digestion is finished. - stomach_contents.Remove(M) - src << "Your stomach feels a little more empty as you finish digesting [M]" + if (M.cloneloss >= M.maxHealth) //If we've consumed all of it, then digestion is finished. + LAZYREMOVE(stomach_contents, M) + src << "Your stomach feels a little more empty as you finish digesting \the [M]." qdel(M) - - //Helpers /proc/bitemessage(var/mob/living/victim) - return pick("You take a bite out of [victim]", - "You rip a chunk off of [victim]", - "You consume a piece of [victim]", - "You feast upon your prey", - "You chow down on [victim]", - "You gobble [victim]'s flesh") - - + return pick( + "You take a bite out of \the [victim].", + "You rip a chunk off of \the [victim].", + "You consume a piece of \the [victim].", + "You feast upon your prey.", + "You chow down on \the [victim].", + "You gobble \the [victim]'s flesh.") /proc/handle_devour_mess(var/mob/user, var/mob/living/victim, var/datum/reagents/vessel, var/finish = 0) //The maximum number of blood placements is equal to the mob size of the victim @@ -286,10 +263,6 @@ B.fluorescent = 0 B.invisibility = 0 - - - - /proc/turf_hasblood(var/turf/test) for (var/obj/effect/decal/cleanable/blood/b in test) return 1 diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index cf0eb70d27e..88bcbe64136 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -1,7 +1,9 @@ /mob/living/Life() - set invisibility = 0 set background = BACKGROUND_ENABLED + if (QDELETED(src)) // If they're being deleted, why bother? + return + ..() if (transforming) @@ -127,7 +129,7 @@ //this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/proc/handle_regular_hud_updates() - if(!client) return 0 + if(!client || QDELETED(src)) return 0 handle_hud_icons() handle_vision() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 13a3be800fd..4c490e3803e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -712,8 +712,8 @@ default behaviour is: //check for nuke disks if(client && stat != DEAD) //if they are clientless and dead don't bother, the parent will treat them as any other container - if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear - var/datum/game_mode/nuclear/G = ticker.mode + if(istype(SSticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear + var/datum/game_mode/nuclear/G = SSticker.mode if(G.check_mob(src)) if(x <= TRANSITIONEDGE) inertia_dir = 4 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 05544a2ab8f..ad3c55627c6 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -47,7 +47,7 @@ var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. var/possession_candidate // Can be possessed by ghosts if unplayed. - var/list/stomach_contents = list()//This is moved here from carbon defines + var/list/stomach_contents //This is moved here from carbon defines var/composition_reagent var/composition_reagent_quantity var/mouth_size = 2//how large of a creature it can swallow at once, and how big of a bite it can take out of larger things @@ -69,4 +69,6 @@ var/move_delay_mod = 0//Added to move delay, used for calculating movement speeds. Provides a centralised value for modifiers to alter var/total_radiation // DON'T MODIFY THIS DIRECTLY. USE apply_radiation()! - var/cloaked = 0//Set to 1 by cloaking devices, optimises update_icons \ No newline at end of file + var/cloaked = 0//Set to 1 by cloaking devices, optimises update_icons + + var/tesla_ignore = 0 // If true, mob is not affected by tesla bolts. diff --git a/code/modules/mob/living/parasite/meme.dm b/code/modules/mob/living/parasite/meme.dm index 0da039acaaa..9313b994332 100644 --- a/code/modules/mob/living/parasite/meme.dm +++ b/code/modules/mob/living/parasite/meme.dm @@ -103,7 +103,7 @@ var/controlling if(host) src.loc = host.loc src.stat = 2 ..() - del src + qdel(src) // When a meme speaks, it speaks through its host /mob/living/parasite/meme/say(message as text) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 98858cef311..ccc84aaf1d3 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -243,13 +243,15 @@ proc/get_radio_key_from_channel(var/channel) get_mobs_and_objs_in_view_fast(T, message_range, listening, listening_obj) + var/list/hear_clients = list() + for(var/mob/M in listening) + M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol) + if (M.client) + hear_clients += M.client + var/speech_bubble_test = say_test(message) var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") - spawn(30) qdel(speech_bubble) - - for(var/mob/M in listening) - M << speech_bubble - M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol) + INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, speech_bubble, hear_clients, 30) for(var/obj/O in listening_obj) spawn(0) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ec38053e190..e672cca1a26 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -48,7 +48,7 @@ var/list/ai_verbs_default = list( anchored = 1 // -- TLE density = 1 status_flags = CANSTUN|CANPARALYSE|CANPUSH - shouldnt_see = list(/obj/effect/rune) + //shouldnt_see - set in New() var/list/network = list("Exodus") var/obj/machinery/camera/camera = null var/list/connected_robots = list() @@ -99,6 +99,7 @@ var/list/ai_verbs_default = list( src.verbs -= silicon_subsystems /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) + shouldnt_see = typecacheof(/obj/effect/rune) announcement = new() announcement.title = "A.I. Announcement" announcement.announcement_type = "A.I. Announcement" @@ -123,7 +124,7 @@ var/list/ai_verbs_default = list( holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1")) - proc_holder_list = new() + //proc_holder_list = new() // This ain't even used, why are we initializing it? if(L) if (istype(L, /datum/ai_laws)) @@ -168,8 +169,7 @@ var/list/ai_verbs_default = list( on_mob_init() - spawn(5) - new /obj/machinery/ai_powersupply(src) + addtimer(CALLBACK(src, .proc/create_powersupply), 5) hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") @@ -184,6 +184,9 @@ var/list/ai_verbs_default = list( ai_list += src ..() +/mob/living/silicon/ai/proc/init_powersupply() + new /obj/machinery/ai_powersupply(src) + /mob/living/silicon/ai/proc/on_mob_init() src << "You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras)." src << "To look at other parts of the station, click on yourself to get a camera menu." @@ -541,7 +544,7 @@ var/list/ai_verbs_default = list( for(var/i in tempnetwork) cameralist[i] = i - cameralist = sortAssoc(cameralist) + sortTim(cameralist, /proc/cmp_text_asc) return cameralist /mob/living/silicon/ai/proc/ai_network_change(var/network in get_camera_network_list()) diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index 1ad63b22ea6..9c0d1ff862b 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -1,7 +1,7 @@ var/global/list/empty_playable_ai_cores = list() /hook/roundstart/proc/spawn_empty_ai() - if("AI" in ticker.mode.disabled_jobs) + if("AI" in SSticker.mode.disabled_jobs) return 1 // Don't make empty AI's if you can't have them (also applies to Malf) for(var/obj/effect/landmark/start/S in landmarks_list) if(S.name != "AI") @@ -35,7 +35,7 @@ var/global/list/empty_playable_ai_cores = list() set category = "OOC" set desc = "Wipe your core. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." - if(ticker && ticker.mode && ticker.mode.name == "AI malfunction") + if(SSticker.mode && SSticker.mode.name == "AI malfunction") usr << "You cannot use this verb in malfunction. If you need to leave, please adminhelp." return diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm index 86ae4097cda..0aace05fcae 100644 --- a/code/modules/mob/living/silicon/decoy/decoy.dm +++ b/code/modules/mob/living/silicon/decoy/decoy.dm @@ -11,5 +11,5 @@ src.anchored = 1 src.canmove = 0 -/mob/living/silicon/decoy/initialize() - return +/mob/living/silicon/decoy/Initialize() + return INITIALIZE_HINT_NORMAL diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 8cd80ab1390..1dd44b3e769 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -16,26 +16,9 @@ var/list/pai_emotions = list( "Question Mark" = 15 ) - -var/global/list/pai_software_by_key = list() -var/global/list/default_pai_software = list() -/hook/startup/proc/populate_pai_software_list() - var/r = 1 // I would use ., but it'd sacrifice runtime detection - for(var/type in typesof(/datum/pai_software) - /datum/pai_software) - var/datum/pai_software/P = new type() - if(pai_software_by_key[P.id]) - var/datum/pai_software/O = pai_software_by_key[P.id] - world << "pAI software module [P.name] has the same key as [O.name]!" - r = 0 - continue - pai_software_by_key[P.id] = P - if(P.default) - default_pai_software[P.id] = P - return r - -/mob/living/silicon/pai/New() +/mob/living/silicon/pai/Initialize() ..() - software = default_pai_software.Copy() + software = SSpai.default_pai_software.Copy() /mob/living/silicon/pai/verb/paiInterface() set category = "pAI Commands" @@ -62,6 +45,8 @@ var/global/list/default_pai_software = list() var/bought_software[0] // Software we have not bought var/not_bought_software[0] + + var/list/pai_software_by_key = SSpai.pai_software_by_key for(var/key in pai_software_by_key) var/datum/pai_software/S = pai_software_by_key[key] @@ -118,7 +103,7 @@ var/global/list/default_pai_software = list() else if(href_list["purchase"]) var/soft = href_list["purchase"] - var/datum/pai_software/S = pai_software_by_key[soft] + var/datum/pai_software/S = SSpai.pai_software_by_key[soft] if(S && (ram >= S.ram_cost)) ram -= S.ram_cost software[S.id] = S diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 88a452fbb1e..db2418e4d45 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -55,6 +55,7 @@ var/list/mob_hat_cache = list() var/obj/item/hat var/hat_x_offset = 0 var/hat_y_offset = -13 + var/range_limit = 1 holder_type = /obj/item/weapon/holder/drone @@ -89,7 +90,7 @@ var/list/mob_hat_cache = list() /mob/living/silicon/robot/drone/Destroy() if(hat) hat.loc = get_turf(src) - ..() + return ..() /mob/living/silicon/robot/drone/construction icon_state = "constructiondrone" @@ -100,6 +101,7 @@ var/list/mob_hat_cache = list() can_pull_size = 5 can_pull_mobs = MOB_PULL_SAME holder_type = /obj/item/weapon/holder/drone/heavy + range_limit = 0 /mob/living/silicon/robot/drone/New() @@ -147,13 +149,11 @@ var/list/mob_hat_cache = list() /mob/living/silicon/robot/drone/updateicon() - overlays.Cut() + cut_overlays() if(stat == 0) - overlays += "eyes-[icon_state]" - else - overlays -= "eyes" + add_overlay("eyes-[icon_state]") if(hat) // Let the drones wear hats. - overlays |= get_hat_icon(hat, hat_x_offset, hat_y_offset) + add_overlay(get_hat_icon(hat, hat_x_offset, hat_y_offset)) /mob/living/silicon/robot/drone/choose_icon() return @@ -191,7 +191,7 @@ var/list/mob_hat_cache = list() if(stat == 2) - if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave. + if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave. user << "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one." return @@ -254,10 +254,10 @@ var/list/mob_hat_cache = list() //For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here. /mob/living/silicon/robot/drone/updatehealth() if(status_flags & GODMODE) - health = 35 + health = maxHealth stat = CONSCIOUS return - health = 35 - (getBruteLoss() + getFireLoss()) + health = maxHealth - (getBruteLoss() + getFireLoss()) return //Easiest to check this here, then check again in the robot proc. @@ -265,7 +265,8 @@ var/list/mob_hat_cache = list() //Drones killed by damage will gib. /mob/living/silicon/robot/drone/handle_regular_status_updates() var/turf/T = get_turf(src) - if((!T || health <= -35 || (master_fabricator && T.z != master_fabricator.z)) && src.stat != DEAD) + var/area/A = get_area(T) + if((!T || health <= -maxHealth || (range_limit && !(A in the_station_areas))) && src.stat != DEAD) timeofdeath = world.time death() //Possibly redundant, having trouble making death() cooperate. gib() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index e5aa936a086..295e0456e07 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -4,7 +4,7 @@ set desc = "Tag yourself for delivery through the disposals system." set category = "Robot Commands" - var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in tagger_locations + var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in SSdisposals.tagger_locations if(!new_tag) mail_destination = "" @@ -19,8 +19,6 @@ src << "\The [D] acknowledges your signal." D.flush_count = D.flush_every_ticks - return - /mob/living/silicon/robot/drone/MouseDrop(atom/over_object) var/mob/living/carbon/H = over_object if(!istype(H) || !Adjacent(H)) return ..() @@ -34,4 +32,4 @@ hat = null updateicon() else - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index f5ec4028e91..d3c7ec65118 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -59,7 +59,7 @@ if (href_list["setarea"]) //Probably should consider using another list, but this one will do. - var/t_area = input("Select the area to ping.", "Set Target Area", null) as null|anything in tagger_locations + var/t_area = input("Select the area to ping.", "Set Target Area", null) as null|anything in SSdisposals.tagger_locations if(!t_area) return @@ -120,4 +120,4 @@ dronefab.produce_drones = !dronefab.produce_drones usr << "You [dronefab.produce_drones ? "enable" : "disable"] drone production in the nearby fabricator." - src.updateUsrDialog() \ No newline at end of file + src.updateUsrDialog() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index 5fccf5d7bcd..f89cd77fcaf 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -29,9 +29,6 @@ fabricator_tag = "Derelict" drone_type = /mob/living/silicon/robot/drone/construction -/obj/machinery/drone_fabricator/New() - ..() - /obj/machinery/drone_fabricator/power_change() ..() if (stat & NOPOWER) @@ -39,7 +36,7 @@ /obj/machinery/drone_fabricator/process() - if(ticker.current_state < GAME_STATE_PLAYING) + if(!ROUND_IS_STARTED) return if(stat & NOPOWER || !produce_drones) @@ -78,8 +75,10 @@ flick("h_lathe_leave",src) time_last_drone = world.time - if(player.mob && player.mob.mind) player.mob.mind.reset() - var/mob/living/silicon/robot/drone/new_drone = getFromPool(drone_type, get_turf(src)) + if(player.mob && player.mob.mind) + player.mob.mind.reset() + + var/mob/living/silicon/robot/drone/new_drone = new drone_type(get_turf(src)) new_drone.transfer_personality(player) new_drone.master_fabricator = src @@ -93,7 +92,7 @@ /proc/try_drone_spawn(var/mob/user, var/obj/machinery/drone_fabricator/fabricator) - if(ticker.current_state < GAME_STATE_PLAYING) + if(!ROUND_IS_STARTED) user << "The game hasn't started yet!" return diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 7946ba604b1..d9148e4f2c7 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,6 +1,5 @@ /mob/living/silicon/robot/Life() - set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (src.transforming) return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index aafdaa59a49..81e4b537e13 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -72,6 +72,7 @@ var/opened = 0 var/emagged = 0 + var/fakeemagged = 0 //for dumb illegal weapons module var/wiresexposed = 0 var/locked = 1 var/has_power = 1 @@ -764,30 +765,28 @@ return 0 /mob/living/silicon/robot/updateicon() - overlays.Cut() + cut_overlays() if(stat == CONSCIOUS) - overlays += "eyes-[module_sprites[icontype]]" - + add_overlay("eyes-[module_sprites[icontype]]") if(opened) var/panelprefix = custom_sprite ? src.ckey : "ov" if(wiresexposed) - overlays += "[panelprefix]-openpanel +w" + add_overlay("[panelprefix]-openpanel +w") else if(cell) - overlays += "[panelprefix]-openpanel +c" + add_overlay("[panelprefix]-openpanel +c") else - overlays += "[panelprefix]-openpanel -c" + add_overlay("[panelprefix]-openpanel -c") if(module_active && istype(module_active,/obj/item/borg/combat/shield)) - overlays += "[module_sprites[icontype]]-shield" + add_overlay("[module_sprites[icontype]]-shield") if(modtype == "Combat") if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) icon_state = "[module_sprites[icontype]]-roll" else icon_state = module_sprites[icontype] - return /mob/living/silicon/robot/proc/installed_modules() if(weapon_lock) @@ -1122,7 +1121,7 @@ return if(opened)//Cover is open - if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice + if(emagged && !fakeemagged) return//Prevents the X has hit Y with Z message also you cant emag them twice if(wiresexposed) user << "You must close the panel first" return @@ -1130,6 +1129,8 @@ sleep(6) if(prob(50)) emagged = 1 + if(fakeemagged) + fakeemagged = 0 lawupdate = 0 disconnect_from_ai() user << "You emag [src]'s interface." diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index b362e2e882c..3eeb1f30bbd 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -359,7 +359,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/crowbar(src) - src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/weapon/weldingtool/experimental(src) src.modules += new /obj/item/device/pipe_painter(src) src.modules += new /obj/item/weapon/gripper/no_use/loader(src) src.modules += new /obj/item/weapon/gripper(src) @@ -646,7 +646,9 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) src.modules += new /obj/item/weapon/mining_scanner(src) - src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) + ..() /obj/item/weapon/robot_module/research name = "research module" @@ -739,7 +741,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) - src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) src.modules += new /obj/item/borg/combat/shield(src) src.modules += new /obj/item/borg/combat/mobility(src) src.modules += new /obj/item/weapon/crowbar(src) @@ -769,7 +771,7 @@ var/global/list/robot_modules = list( robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += robot.internals - src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) + src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) src.emag.name = "Plasma Cutter" var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000) @@ -840,3 +842,61 @@ var/global/list/robot_modules = list( LR.Charge(R, amount) ..() return + +/obj/item/weapon/robot_module/mining_drone + name = "mining drone module" + no_slip = 1 + networks = list(NETWORK_MINE) + +/obj/item/weapon/robot_module/mining_drone/basic/New(var/mob/living/silicon/robot/robot) + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/material(src) + src.modules += new /obj/item/weapon/storage/bag/ore(src) + src.modules += new /obj/item/weapon/pickaxe/drill(src) + src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/mining_scanner(src) + + src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src) + src.emag.name = "Mounted Thermal Drill" + ..() + +/obj/item/weapon/robot_module/mining_drone/drill/New(var/mob/living/silicon/robot/robot) + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/material(src) + src.modules += new /obj/item/weapon/storage/bag/ore(src) + src.modules += new /obj/item/weapon/pickaxe/jackhammer(src) + src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/mining_scanner(src) + + src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src) + src.emag.name = "Mounted Thermal Drill" + ..() + +/obj/item/weapon/robot_module/mining_drone/plasmacutter/New(var/mob/living/silicon/robot/robot) + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/material(src) + src.modules += new /obj/item/weapon/storage/bag/ore(src) + src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) + src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/mining_scanner(src) + + src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src) + src.emag.name = "Mounted Thermal Drill" + ..() + +/obj/item/weapon/robot_module/mining_drone/drillandplasmacutter/New(var/mob/living/silicon/robot/robot) + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/material(src) + src.modules += new /obj/item/weapon/storage/bag/ore(src) + src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) + src.modules += new /obj/item/weapon/pickaxe/jackhammer(src) + src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/mining_scanner(src) + + src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src) + src.emag.name = "Mounted Thermal Drill" + ..() diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index 5897fc6624f..b4c1414f7d9 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -3,23 +3,12 @@ return 0 ..(prob_slip) -/mob/living/silicon/robot/Process_Spacemove(var/check_drift = 0)//Cleaned up, fixed and simplified this function - //If checkdrift is 0, we're checking to see if we can manually move, return true if jetpack is on - //if checkdrift is 1, we're checking to see if we drift. Return true if jetpack AND stabilisers are on - if(jetpack) - //var/obj/item/weapon/tank/jetpack/J = internals - - if (check_drift) - if (jetpack.stabilization_on && jetpack.allow_thrust(0.01)) - inertia_dir = 0 +/mob/living/silicon/robot/Allow_Spacemove() + if(module) + for(var/obj/item/weapon/tank/jetpack/J in module.modules) + if(J && J.allow_thrust(0.01)) return 1 - - else if(jetpack.allow_thrust(0.01)) - inertia_dir = 0 - return 1 - if(..())//The parent function checks for nearby objects to hold onto - return 1 - return 0 + . = ..() //No longer needed, but I'll leave it here incase we plan to re-use it. /mob/living/silicon/robot/movement_delay() @@ -42,4 +31,4 @@ return 0 if (cell_use_power(actuatorComponent.active_usage)) - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/silicon/robot/syndicate_robot.dm b/code/modules/mob/living/silicon/robot/syndicate_robot.dm index 0ecedfa9a59..6f835b1e28f 100644 --- a/code/modules/mob/living/silicon/robot/syndicate_robot.dm +++ b/code/modules/mob/living/silicon/robot/syndicate_robot.dm @@ -28,28 +28,27 @@ verbs += /mob/living/silicon/robot/proc/choose_icon /mob/living/silicon/robot/syndicate/updateicon() //because this was the only way I found out how to make their eyes and etc works - overlays.Cut() + cut_overlays() if(stat == 0) - overlays += "eyes-[icon_state]" + add_overlay("eyes-[icon_state]") if(opened) var/panelprefix = custom_sprite ? src.ckey : "ov" if(wiresexposed) - overlays += "[panelprefix]-openpanel +w" + add_overlay("[panelprefix]-openpanel +w") else if(cell) - overlays += "[panelprefix]-openpanel +c" + add_overlay("[panelprefix]-openpanel +c") else - overlays += "[panelprefix]-openpanel -c" + add_overlay("[panelprefix]-openpanel -c") if(module_active && istype(module_active,/obj/item/borg/combat/shield)) - overlays += "[icon_state]-shield" + add_overlay("[icon_state]-shield") if(modtype == "Combat") if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) icon_state = "[icon_state]-roll" else icon_state = module_sprites[icontype] - return /mob/living/silicon/robot/syndicate/death() ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 97e764b9457..0d88f8d83b7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -45,9 +45,9 @@ /mob/living/silicon/Destroy() silicon_mob_list -= src - for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) + for(var/datum/alarm_handler/AH in SSalarm.all_handlers) AH.unregister_alarm(src) - ..() + return ..() /mob/living/silicon/proc/init_id() if(idcard) diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm index 8f0f77a0984..2acc76610f1 100644 --- a/code/modules/mob/living/silicon/subystems.dm +++ b/code/modules/mob/living/silicon/subystems.dm @@ -69,7 +69,7 @@ if(!register_alarms) return - for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) + for(var/datum/alarm_handler/AH in SSalarm.all_handlers) AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm) queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm index dbcfcce3d79..e9f26bc4eba 100644 --- a/code/modules/mob/living/simple_animal/bees.dm +++ b/code/modules/mob/living/simple_animal/bees.dm @@ -28,7 +28,11 @@ /mob/living/simple_animal/bee/Destroy() if(parent) parent.owned_bee_swarms.Remove(src) - ..() + my_hydrotray = null + parent = null + target_turf = null + target_mob = null + return ..() //Special death behaviour. When bees accumulate enough damage to 'die', they don't outright die. Thus no call to parent @@ -36,7 +40,7 @@ //Repeat until strength hits zero. only THEN do they die, and they qdel and leave no corpse in doing so //Because we don't have sprites for a carpet made of bee corpses. /mob/living/simple_animal/bee/death() - if (!gcDestroyed) + if (!QDELING(src)) strength -= 1 if (strength <= 0) if (prob(35))//probability to reduce spam @@ -261,4 +265,4 @@ /mob/living/simple_animal/bee/beegun maxHealth = 30 strength = 5 - feral = 30 \ No newline at end of file + feral = 30 diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 93b79423ce2..617ebae37c9 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -27,7 +27,7 @@ var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID -/obj/effect/landmark/mobcorpse/New() +/obj/effect/landmark/mobcorpse/Initialize() createCorpse() /obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. @@ -154,4 +154,4 @@ corpsehelmet = /obj/item/clothing/head/bearpelt /obj/effect/landmark/mobcorpse/russian/ranged - corpsehelmet = /obj/item/clothing/head/ushanka \ No newline at end of file + corpsehelmet = /obj/item/clothing/head/ushanka diff --git a/code/modules/mob/living/simple_animal/familiars/familiars.dm b/code/modules/mob/living/simple_animal/familiars/familiars.dm index 613a9224fee..fbe9f9949e1 100644 --- a/code/modules/mob/living/simple_animal/familiars/familiars.dm +++ b/code/modules/mob/living/simple_animal/familiars/familiars.dm @@ -71,7 +71,7 @@ wizardy_spells = list(/spell/aoe_turf/conjure/forcewall) -/mob/living/simple_animal/familiar/pike/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/familiar/pike/Allow_Spacemove(var/check_drift = 0) return 1 /mob/living/simple_animal/familiar/horror diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 9aa47ccbe26..e99b8b30f8c 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -63,8 +63,7 @@ if (!movement_target) walk_to(src,0) - spawn(2) - attack_mice() + addtimer(CALLBACK(src, .proc/attack_mice), 2) if(prob(2)) //spooky var/mob/dead/observer/spook = locate() in range(src,5) @@ -110,8 +109,7 @@ /mob/living/simple_animal/cat/Released() //A thrown cat will immediately attack mice near where it lands handle_movement_target() - spawn(3) - attack_mice() + addtimer(CALLBACK(src, .proc/attack_mice), 3) ..() /mob/living/simple_animal/cat/death() @@ -164,7 +162,7 @@ var/befriend_job = null /mob/living/simple_animal/cat/fluff/handle_movement_target() - if (friend) + if (!QDELETED(friend)) var/follow_dist = 5 if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit) //danger follow_dist = 1 @@ -197,7 +195,7 @@ /mob/living/simple_animal/cat/fluff/Life() ..() - if (stat || !friend) + if (stat || QDELETED(friend)) return if (get_dist(src, friend) <= 1) if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit) 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 cabbfd25957..45734cb006d 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -200,9 +200,6 @@ ..() desc = "How could you do this? You monster!" -var/const/MAX_CHICKENS = 50 -var/global/chicken_count = 0 - /mob/living/simple_animal/chicken name = "\improper chicken" desc = "Hopefully the eggs are good this season." @@ -230,6 +227,8 @@ var/global/chicken_count = 0 mob_size = 2 hunger_enabled = FALSE + var/static/chicken_count = 0 + /mob/living/simple_animal/chicken/New() ..() if(!body_color) @@ -283,16 +282,19 @@ var/global/chicken_count = 0 E.pixel_x = rand(-6,6) E.pixel_y = rand(-6,6) if(chicken_count < MAX_CHICKENS && prob(10)) - processing_objects.Add(E) + START_PROCESSING(SSprocessing, E) + +/obj/item/weapon/reagent_containers/food/snacks/egg + var/amount_grown = 0 -/obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0 /obj/item/weapon/reagent_containers/food/snacks/egg/process() if(isturf(loc)) amount_grown += rand(1,2) if(amount_grown >= 100) visible_message("[src] hatches with a quiet cracking sound.") new /mob/living/simple_animal/chick(get_turf(src)) - processing_objects.Remove(src) + STOP_PROCESSING(SSprocessing, src) qdel(src) else + STOP_PROCESSING(SSprocessing, src) processing_objects.Remove(src) diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index 2aa9f5c6499..1c18bd42f24 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -40,7 +40,7 @@ /mob/living/simple_animal/adultslime/New() ..() - overlays += "aslime-:33" + add_overlay("aslime-:33") /mob/living/simple_animal/slime/adult/death() @@ -54,4 +54,4 @@ S2.icon_living = "[src.colour] baby slime" S2.icon_dead = "[src.colour] baby slime dead" S2.colour = "[src.colour]" - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 55b7c66e4c5..7ea85019cb3 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -156,7 +156,7 @@ eject_brain() death() -/mob/living/simple_animal/spiderbot/proc/update_icon() +/mob/living/simple_animal/spiderbot/update_icon() if(mmi) if(positronic) icon_state = "spiderbot-chassis-posi" @@ -183,7 +183,7 @@ /mob/living/simple_animal/spiderbot/Destroy() eject_brain() - ..() + return ..() /mob/living/simple_animal/spiderbot/New() diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 6beb094c944..f879256a336 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -44,9 +44,13 @@ if(istype(L)) owner = L -/mob/living/simple_animal/hostile/scarybat/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/hostile/scarybat/Allow_Spacemove(var/check_drift = 0) return ..() //No drifting in space for space carp! //original comments do not steal +/mob/living/simple_animal/hostile/scarybat/Destroy() + owner = null + return ..() + /mob/living/simple_animal/hostile/scarybat/FindTarget() . = ..() if(.) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index aac5e123f6b..2ffd9112c0d 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -304,7 +304,7 @@ instant_aggro() -/mob/living/simple_animal/hostile/bear/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/hostile/bear/Allow_Spacemove(var/check_drift = 0) inertia_dir = 0 return 1 //No drifting in space for space bears! //Fixed this, it wasnt working diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index a3e2724e13c..cca64d099d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -39,7 +39,7 @@ faction = "carp" -/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/hostile/carp/Allow_Spacemove(var/check_drift = 0) return 1 //No drifting in space for space carp! //original comments do not steal /mob/living/simple_animal/hostile/carp/FindTarget() @@ -68,4 +68,4 @@ /mob/living/simple_animal/hostile/carp/russian/FindTarget() . = ..() if(.) - custom_emote(1,"spots a filthy capitalist!") \ No newline at end of file + custom_emote(1,"spots a filthy capitalist!") diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 99f213ed4ed..f5cc38394f3 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -33,7 +33,7 @@ faction = "faithless" -/mob/living/simple_animal/hostile/faithless/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/hostile/faithless/Allow_Spacemove(var/check_drift = 0) return 1 /mob/living/simple_animal/hostile/faithless/FindTarget() 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 d0863a4b278..45f2a183d89 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -151,7 +151,7 @@ if(busy == LAYING_EGGS) E = locate() in get_turf(src) if(!E) - getFromPool(/obj/effect/spider/eggcluster, loc, src) + new /obj/effect/spider/eggcluster(loc, src) fed-- busy = 0 stop_automated_movement = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 50238da116b..69f1d56b38a 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -19,6 +19,11 @@ var/shuttletarget = null var/enroute = 0 +/mob/living/simple_animal/hostile/Destroy() + friends = null + target_mob = null + return ..() + /mob/living/simple_animal/hostile/proc/FindTarget() var/atom/T = null @@ -35,7 +40,7 @@ if(isliving(A)) var/mob/living/L = A - if(L.faction == src.faction && !attack_same) + if((L.faction == src.faction) && !attack_same) continue else if(L in friends) continue @@ -74,7 +79,7 @@ /mob/living/simple_animal/hostile/proc/MoveToTarget() stop_automated_movement = 1 - if(!target_mob || SA_attackable(target_mob)) + if(QDELETED(target_mob) || SA_attackable(target_mob)) LoseTarget() if(target_mob in ListTargets(10)) if(ranged) @@ -89,7 +94,7 @@ /mob/living/simple_animal/hostile/proc/AttackTarget() stop_automated_movement = 1 - if(!target_mob || SA_attackable(target_mob)) + if(QDELETED(target_mob) || SA_attackable(target_mob)) LoseTarget() return 0 if(!(target_mob in ListTargets(10))) @@ -129,7 +134,7 @@ /mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7) - var/list/L = hearers(src, dist) + var/list/L = view(src, dist) for (var/obj/mecha/M in mechas_list) if (M.z == src.z && get_dist(src, M) <= dist) @@ -170,18 +175,11 @@ visible_message("\red [src] fires at [target]!", 1) if(rapid) - spawn(1) - Shoot(target, src.loc, src) - if(casingtype) - new casingtype(get_turf(src)) - spawn(4) - Shoot(target, src.loc, src) - if(casingtype) - new casingtype(get_turf(src)) - spawn(6) - Shoot(target, src.loc, src) - if(casingtype) - new casingtype(get_turf(src)) + var/datum/callback/shoot_cb = CALLBACK(src, .proc/shoot_wrapper, target, loc, src) + addtimer(shoot_cb, 1) + addtimer(shoot_cb, 4) + addtimer(shoot_cb, 6) + else Shoot(target, src.loc, src) if(casingtype) @@ -191,6 +189,10 @@ target_mob = null return +/mob/living/simple_animal/hostile/proc/shoot_wrapper(target, location, user) + Shoot(target, location, user) + if (casingtype) + new casingtype(loc) /mob/living/simple_animal/hostile/proc/Shoot(var/target, var/start, var/user, var/bullet = 0) if(target == start) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 0a5cf895545..d7125670179 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -60,8 +60,8 @@ var/attempt_open = 0 // Pickup loot -/mob/living/simple_animal/hostile/mimic/crate/initialize() - ..() +/mob/living/simple_animal/hostile/mimic/crate/Initialize() + . = ..() for(var/obj/item/I in loc) I.loc = src diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm new file mode 100644 index 00000000000..d6af4f165c9 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm @@ -0,0 +1,57 @@ +//asteroid cavern creatures +/mob/living/simple_animal/hostile/retaliate/cavern_dweller + name = "cavern dweller" + desc = "An alien creature that dwells in the tunnels of the asteroid, commonly found in the Romanovich Cloud." + icon = 'icons/mob/cavern.dmi' + icon_state = "dweller" + icon_living = "dweller" + icon_dead = "dweller_dead" + ranged = 1 + turns_per_move = 3 + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "hits" + a_intent = I_HURT + stop_automated_movement_when_pulled = 0 + health = 60 + maxHealth = 60 + melee_damage_lower = 10 + melee_damage_upper = 10 + attacktext = "chomped" + attack_sound = 'sound/weapons/bite.ogg' + speed = 4 + projectiletype = /obj/item/projectile/beam/cavern + projectilesound = 'sound/magic/lightningbolt.ogg' + destroy_surroundings = 1 + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + + faction = "cavern" + +/mob/living/simple_animal/hostile/retaliate/cavern_dweller/Allow_Spacemove(var/check_drift = 0) + return 1 + +/obj/item/projectile/beam/cavern + name = "electrical discharge" + icon_state = "stun" + damage_type = BURN + check_armour = "energy" + damage = 5 + + muzzle_type = /obj/effect/projectile/stun/muzzle + tracer_type = /obj/effect/projectile/stun/tracer + impact_type = /obj/effect/projectile/stun/impact + +/obj/item/projectile/beam/cavern/on_hit(var/atom/target, var/blocked = 0) + if(ishuman(target)) + var/mob/living/carbon/human/M = target + var/shock_damage = rand(10,20) + M.electrocute_act(shock_damage, ran_zone()) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 668e3746c3d..cdb020b6e5f 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -58,7 +58,7 @@ ion_trail.set_up(src) ion_trail.start() -/mob/living/simple_animal/hostile/retaliate/malf_drone/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/hostile/retaliate/malf_drone/Allow_Spacemove(var/check_drift = 0) return 1 /mob/living/simple_animal/hostile/retaliate/malf_drone/ListTargets() @@ -157,6 +157,7 @@ qdel(src) /mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() + QDEL_NULL(ion_trail) //some random debris left behind if(has_loot) spark(src, 3, alldirs) @@ -176,16 +177,16 @@ step_to(O, get_turf(pick(view(7, src)))) //rods - O = getFromPool(/obj/item/stack/rods, src.loc) + O = new /obj/item/stack/rods(src.loc) step_to(O, get_turf(pick(view(7, src)))) if(prob(75)) - O = getFromPool(/obj/item/stack/rods, src.loc) + O = new /obj/item/stack/rods(src.loc) step_to(O, get_turf(pick(view(7, src)))) if(prob(50)) - O = getFromPool(/obj/item/stack/rods, src.loc) + O = new /obj/item/stack/rods(src.loc) step_to(O, get_turf(pick(view(7, src)))) if(prob(25)) - O = getFromPool(/obj/item/stack/rods, src.loc) + O = new /obj/item/stack/rods(src.loc) step_to(O, get_turf(pick(view(7, src)))) //plasteel @@ -263,7 +264,7 @@ C.name = "Corrupted drone morality core" C.origin_tech = list(TECH_ILLEGAL = rand(3,6)) - ..() + return ..() /obj/item/projectile/beam/drone damage = 15 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 49a30558594..79b867019c7 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -1,6 +1,10 @@ /mob/living/simple_animal/hostile/retaliate var/list/enemies = list() +/mob/living/simple_animal/hostile/retaliate/Destroy() + enemies = null + return ..() + /mob/living/simple_animal/hostile/retaliate/Found(var/atom/A) if(isliving(A)) var/mob/living/L = A diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 86e5b660315..dd02f511391 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -99,7 +99,7 @@ corpse = /obj/effect/landmark/mobcorpse/syndicatecommando speed = 0 -/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/hostile/syndicate/melee/space/Allow_Spacemove(var/check_drift = 0) return /mob/living/simple_animal/hostile/syndicate/ranged @@ -129,7 +129,7 @@ corpse = /obj/effect/landmark/mobcorpse/syndicatecommando speed = 0 -/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/hostile/syndicate/ranged/space/Allow_Spacemove(var/check_drift = 0) return diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 8c1e9895138..ed20360d62c 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -100,6 +100,11 @@ /mob/living/simple_animal/parrot/verb/drop_held_item_player, \ /mob/living/simple_animal/parrot/proc/perch_player) +/mob/living/simple_animal/parrot/Destroy() + QDEL_NULL(ears) + parrot_interest = null + parrot_perch = null + return ..() /mob/living/simple_animal/parrot/death() if(held_item) @@ -751,4 +756,4 @@ parrot_interest = user parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless icon_state = "parrot_fly" - return success \ No newline at end of file + return success diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm index 9775a68c9c9..6d800543182 100644 --- a/code/modules/mob/living/simple_animal/worm.dm +++ b/code/modules/mob/living/simple_animal/worm.dm @@ -101,7 +101,7 @@ Destroy() //if a chunk a destroyed, make a new worm out of the split halves if(previous) previous.Detach() - ..() + return ..() Move() var/attachementNextPosition = loc @@ -123,7 +123,7 @@ return - proc/update_icon() //only for the sake of consistency with the other update icon procs + update_icon() //only for the sake of consistency with the other update icon procs if(stat == CONSCIOUS || stat == UNCONSCIOUS) if(previous) //midsection icon_state = "spaceworm[get_dir(src,previous) | get_dir(src,next)]" //see 3 lines below diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 38ec58506b9..decbf4c7c3d 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -3,7 +3,7 @@ player_list -= src log_access("Logout: [key_name(src)]",ckey=key_name(src)) if(admin_datums[src.ckey]) - if (ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. + if (SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. var/admins_number = 0 var/admins_number_afk = 0 for (var/client/C) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ff44620e461..3fd48e0ebb0 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -3,7 +3,7 @@ dead_mob_list -= src living_mob_list -= src unset_machine() - qdel(hud_used) + QDEL_NULL(hud_used) if(client) for(var/obj/screen/movable/spell_master/spell_master in spell_masters) qdel(spell_master) @@ -15,8 +15,7 @@ spellremove(src) for(var/infection in viruses) qdel(infection) - - + viruses.Cut() //Added this to prevent nonliving mobs from ghostising //The only non 'living' mobs are: @@ -28,7 +27,9 @@ //Ghosts are the only ones that even technically 'exist' and aren't just an abstraction using mob code for convenience if (istype(src, /mob/living)) ghostize() - ..() + + return ..() + /mob/proc/remove_screen_obj_references() flash = null @@ -103,6 +104,10 @@ for(var/A in player_list) var/mob/M = A + if (QDELETED(M)) + warning("Null or QDELETED object [DEBUG_REF(M)] found in player list! Removing.") + player_list -= M + continue if (!M.client || istype(M, /mob/new_player)) continue if(get_turf(M) in messageturfs) @@ -174,7 +179,6 @@ M.show_message(message,2,deaf_message,1) - for(var/o in objs) var/obj/O = o O.show_message(message,2,deaf_message,1) @@ -302,15 +306,13 @@ pointing_effect = new /obj/effect/decal/point(tile) pointing_effect.invisibility = invisibility - spawn (20) - if(pointing_effect) - qdel(pointing_effect) // qdel - pointing_effect = null + addtimer(CALLBACK(src, .proc/clear_point), 20) face_atom(A) return 1 - +/mob/proc/clear_point() + QDEL_NULL(pointing_effect) /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) @@ -448,10 +450,10 @@ if (!( config.abandon_allowed )) usr << "Respawn is disabled." return - if ((stat != DEAD || !( ticker ))) + if (stat != DEAD) usr << "You must be dead to use this!" return - if (ticker.mode.deny_respawn) //BS12 EDIT + if (SSticker.mode && SSticker.mode.deny_respawn) //BS12 EDIT usr << "Respawn is disabled for this roundtype." return else if(!MayRespawn(1, CREW)) @@ -487,26 +489,8 @@ /client/verb/changes() set name = "Changelog" set category = "OOC" - getFiles( - 'html/88x31.png', - 'html/bug-minus.png', - 'html/cross-circle.png', - 'html/hard-hat-exclamation.png', - 'html/image-minus.png', - 'html/image-plus.png', - 'html/map-pencil.png', - 'html/music-minus.png', - 'html/music-plus.png', - 'html/tick-circle.png', - 'html/wrench-screwdriver.png', - 'html/spell-check.png', - 'html/burn-exclamation.png', - 'html/chevron.png', - 'html/chevron-expand.png', - 'html/changelog.css', - 'html/changelog.js', - 'html/changelog.html' - ) + var/datum/asset/changelog = get_asset_datum(/datum/asset/simple/changelog) + changelog.send(src) src << browse('html/changelog.html', "window=changes;size=675x650") if(prefs.lastchangelog != changelog_hash) prefs.lastchangelog = changelog_hash @@ -746,7 +730,7 @@ . = (is_client_active(10 MINUTES)) if(.) - if(statpanel("Status") && ticker && ticker.current_state != GAME_STATE_PREGAME) + if(statpanel("Status") && SSticker.current_state != GAME_STATE_PREGAME) stat("Game ID", game_id) stat("Station Time", worldtime2text()) stat("Round Duration", round_duration()) @@ -755,24 +739,45 @@ if(client.holder) if(statpanel("Status")) stat("Location:", "([x], [y], [z]) [loc]") - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - if(statpanel("Processes")) - if(processScheduler) - processScheduler.statProcesses() + if (LAZYLEN(client.holder.watched_processes)) + for (var/datum/controller/ctrl in client.holder.watched_processes) + if (!ctrl) + LAZYREMOVE(client.holder.watched_processes, ctrl) + else + ctrl.stat_entry() + + if(statpanel("MC")) + stat("CPU:", world.cpu) + stat("Tick Usage:", world.tick_usage) + stat("Instances:", world.contents.len) + if(Master) + Master.stat_entry() + else + stat("Master Controller:", "ERROR") + if(Failsafe) + Failsafe.stat_entry() + else + stat("Failsafe Controller:", "ERROR") + if (Master) + stat(null, "- Subsystems -") + for(var/datum/controller/subsystem/SS in Master.subsystems) + if (!Master.initializing && SS.flags & SS_NO_DISPLAY) + continue + + SS.stat_entry() if(listed_turf && client) if(!TurfAdjacent(listed_turf)) listed_turf = null else if(statpanel("Turf")) - stat("\icon[listed_turf]", listed_turf.name) + stat("Turf:", listed_turf) for(var/atom/A in listed_turf) if(!A.mouse_opacity) continue if(A.invisibility > see_invisible) continue - if(is_type_in_list(A, shouldnt_see)) + if(is_type_in_typecache(A, shouldnt_see)) continue stat(A) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 24d100b9c67..8df5ca53d33 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -150,6 +150,7 @@ var/music_lastplayed = "null" var/job = null//Living + var/megavend = 0 //determines if this ID has claimed their megavend stache var/const/blindness = 1//Carbon var/const/deafness = 2//Carbon @@ -169,7 +170,7 @@ var/captured = 0 //Functionally, should give the same effect as being buckled into a chair when true. //Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed. - var/proc_holder_list[] = list()//Right now unused. + //var/proc_holder_list[] = list()//Right now unused. //Also unlike the spell list, this would only store the object in contents, not an object in itself. /* Add this line to whatever stat module you need in order to use the proc holder list. @@ -185,7 +186,7 @@ var/mob/living/carbon/LAssailant = null //Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button - var/spell/list/spell_list = list() + var/spell/list/spell_list //Changlings, but can be used in other modes // var/obj/effect/proc_holder/changpower/list/power_list = list() @@ -225,7 +226,7 @@ var/mob/teleop = null var/turf/listed_turf = null //the current turf being examined in the stat panel - var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes + var/list/shouldnt_see = list() //typecache of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes var/list/active_genes=list() var/mob_size = MOB_MEDIUM diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 9d3800ece46..59e05b135dc 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -90,7 +90,7 @@ hud.screen_loc = ui_lhand /obj/item/weapon/grab/process() - if(gcDestroyed) // GC is trying to delete us, we'll kill our processing so we can cleanly GC + if(QDELING(src)) // GC is trying to delete us, we'll kill our processing so we can cleanly GC return PROCESS_KILL confirm() @@ -361,4 +361,4 @@ qdel(hud) hud = null destroying = 1 // stops us calling qdel(src) on dropped() - ..() + return ..() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index c3ebd74b882..bb6f46b82a6 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -184,34 +184,26 @@ if(!mob) return // Moved here to avoid nullrefs below - if(mob.control_object) Move_object(direct) + if(mob.control_object) + Move_object(direct) if(mob.incorporeal_move && isobserver(mob)) Process_Incorpmove(direct) return - if(moving) return 0 + if(moving || world.time < move_delay) + return 0 - if(world.time < move_delay) - return - - -//This compensates for the inaccuracy of move ticks -//Whenever world.time overshoots the movedelay, due to it only ticking once per decisecond -//The overshoot value is subtracted from our next delay, farther down where move delay is set. -//This doesn't entirely remove the problem, but it keeps travel times accurate to within 0.1 seconds -//Over an infinite distance, and prevents the inaccuracy from compounding. Thus making it basically a non-issue + //This compensates for the inaccuracy of move ticks + //Whenever world.time overshoots the movedelay, due to it only ticking once per decisecond + //The overshoot value is subtracted from our next delay, farther down where move delay is set. + //This doesn't entirely remove the problem, but it keeps travel times accurate to within 0.1 seconds + //Over an infinite distance, and prevents the inaccuracy from compounding. Thus making it basically a non-issue var/leftover = world.time - move_delay if (leftover > 1) leftover = 0 - - if(locate(/obj/effect/stop/, mob.loc)) - for(var/obj/effect/stop/S in mob.loc) - if(S.victim == mob) - return - - if(mob.stat==DEAD && isliving(mob)) + if(mob.stat == DEAD && isliving(mob)) mob.ghostize() return @@ -219,21 +211,24 @@ if(mob.eyeobj) return mob.EyeMove(n,direct) - if(mob.transforming) return//This is sota the goto stop mobs from moving var + if(mob.transforming) + return //This is sota the goto stop mobs from moving var if(isliving(mob)) var/mob/living/L = mob if(L.incorporeal_move)//Move though walls Process_Incorpmove(direct) return - if(mob.client) - if(mob.client.view != world.view) // If mob moves while zoomed in with device, unzoom them. - for(var/obj/item/item in mob.contents) - if(item.zoom) - item.zoom(mob) - break - if(Process_Grab()) return + if(mob.client && mob.client.view != world.view) // If mob moves while zoomed in with device, unzoom them. + for(var/obj/item/item in mob) + if(item.zoom) + item.zoom(mob) + break + + // Only meaningful for living mobs. + if(Process_Grab()) + return if(!mob.canmove) return @@ -244,16 +239,18 @@ if(!mob.lastarea) mob.lastarea = get_area(mob.loc) - if((istype(mob.loc, /turf/space)) || (mob.lastarea.has_gravity == 0)) - if(!mob.Process_Spacemove(0)) return 0 - - if(isobj(mob.loc) || ismob(mob.loc))//Inside an object, tell it we moved - var/atom/O = mob.loc - return O.relaymove(mob, direct) - if(isturf(mob.loc)) + if(!mob.check_solid_ground()) + var/allowmove = mob.Allow_Spacemove(0) + if(!allowmove) + return 0 + else if(allowmove == -1 && mob.handle_spaceslipping()) //Check to see if we slipped + return 0 + else + mob.inertia_dir = 0 //If not then we can reset inertia and move - if(mob.restrained())//Why being pulled while cuffed prevents you from moving + + if(mob.restrained()) //Why being pulled while cuffed prevents you from moving for(var/mob/M in range(mob, 1)) if(M.pulling == mob) if(!M.restrained() && M.stat == 0 && M.canmove && mob.Adjacent(M)) @@ -278,9 +275,6 @@ direct = pick(cardinal) return mob.buckled.relaymove(mob,direct) - if(istype(mob.loc, /turf/space)) // Wheelchair driving! - return // No wheelchair driving in space - //TODO: Fuck wheelchairs. //Toss away all this snowflake code here, and rewrite wheelchairs as a vehicle. else if(istype(mob.buckled, /obj/structure/bed/chair/wheelchair)) @@ -300,8 +294,9 @@ var/tally = mob.movement_delay() + config.walk_speed - // Apply huuman specific modifiers. - if (ishuman(mob)) + // Apply human specific modifiers. + var/mob_is_human = ishuman(mob) // Only check this once and just reuse the value. + if (mob_is_human) var/mob/living/carbon/human/H = mob //If we're sprinting and able to continue sprinting, then apply the sprint bonus ontop of this if (H.m_intent == "run" && H.species.handle_sprint_cost(H, tally)) //This will return false if we collapse from exhaustion @@ -313,7 +308,6 @@ move_delay += tally - var/tickcomp = 0 //moved this out here so we can use it for vehicles if(config.Tickcomp) // move_delay -= 1.3 //~added to the tickcomp calculation below @@ -330,12 +324,10 @@ move_delay += 1 return mob.pulledby.relaymove(mob, direct) - - //We are now going to move moving = 1 //Something with pulling things - if(locate(/obj/item/weapon/grab, mob)) + if (mob_is_human && (istype(mob:l_hand, /obj/item/weapon/grab) || istype(mob:r_hand, /obj/item/weapon/grab))) move_delay = max(move_delay, world.time + 7) var/list/L = mob.ret_grab() if(istype(L, /list)) @@ -372,28 +364,28 @@ else . = mob.SelfMove(n, direct) - for (var/obj/item/weapon/grab/G in mob) + for (var/obj/item/weapon/grab/G in list(mob:l_hand, mob:r_hand)) if (G.state == GRAB_NECK) mob.set_dir(reverse_dir[direct]) G.adjust_position() + for (var/obj/item/weapon/grab/G in mob.grabbed_by) G.adjust_position() moving = 0 - return . - return + if(isobj(mob.loc) || ismob(mob.loc)) //Inside an object, tell it we moved + var/atom/O = mob.loc + return O.relaymove(mob, direct) /mob/proc/SelfMove(turf/n, direct) return Move(n, direct) - ///Process_Incorpmove ///Called by client/Move() ///Allows mobs to run though walls /client/proc/Process_Incorpmove(direct) var/turf/mobloc = get_turf(mob) - switch(mob.incorporeal_move) if(1) var/turf/T = get_step(mob, direct) @@ -404,44 +396,8 @@ mob.forceMove(get_step(mob, direct)) mob.dir = direct if(2) - if(prob(50)) - var/locx - var/locy - switch(direct) - if(NORTH) - locx = mobloc.x - locy = (mobloc.y+2) - if(locy>world.maxy) - return - if(SOUTH) - locx = mobloc.x - locy = (mobloc.y-2) - if(locy<1) - return - if(EAST) - locy = mobloc.y - locx = (mobloc.x+2) - if(locx>world.maxx) - return - if(WEST) - locy = mobloc.y - locx = (mobloc.x-2) - if(locx<1) - return - else - return - mob.forceMove(locate(locx,locy,mobloc.z)) - spawn(0) - var/limit = 2//For only two trailing shadows. - for(var/turf/T in getline(mobloc, mob.loc)) - spawn(0) - anim(T,mob,'icons/mob/mob.dmi',,"shadow",,mob.dir) - limit-- - if(limit<=0) break - else - spawn(0) - anim(mobloc,mob,'icons/mob/mob.dmi',,"shadow",,mob.dir) - mob.forceMove(get_step(mob, direct)) + anim(mobloc,mob,'icons/mob/mob.dmi',,"shadow",,mob.dir) + mob.forceMove(get_step(mob, direct)) mob.dir = direct // Crossed is always a bit iffy for(var/obj/S in mob.loc) @@ -460,31 +416,33 @@ /mob/proc/Post_Incorpmove() return -///Process_Spacemove -///Called by /client/Move() -///For moving in space -///Return 1 for movement 0 for none -/mob/proc/Process_Spacemove(var/check_drift = 0) - +// Checks whether this mob is allowed to move in space +// Return 1 for movement, 0 for none, +// -1 to allow movement but with a chance of slipping +/mob/proc/Allow_Spacemove(var/check_drift = 0) if(!Check_Dense_Object()) //Nothing to push off of so end here - update_floating(0) return 0 - update_floating(1) - if(restrained()) //Check to see if we can do things return 0 - //Check to see if we slipped - if(prob(slip_chance(5)) && !buckled) - src << "You slipped!" - src.inertia_dir = src.last_move - step(src, src.inertia_dir) + return -1 + +//Checks if a mob has solid ground to stand on +//If there's no gravity then there's no up or down so naturally you can't stand on anything. +//For the same reason lattices in space don't count - those are things you grip, presumably. +/mob/proc/check_solid_ground() + if(istype(loc, /turf/space)) return 0 - //If not then we can reset inertia and move - inertia_dir = 0 + + if(!lastarea) + lastarea = get_area(loc) + if(!lastarea.has_gravity) + return 0 + return 1 + /mob/proc/Check_Dense_Object() //checks for anything to push off in the vicinity. also handles magboots on gravity-less floors tiles var/shoegrip = Check_Shoegrip() @@ -515,6 +473,15 @@ return 0 return prob_slip +//return 1 if slipped, 0 otherwise +/mob/proc/handle_spaceslipping() + if(prob(slip_chance(5)) && !buckled) + to_chat(src, "You slipped!") + src.inertia_dir = src.last_move + step(src, src.inertia_dir) + return 1 + return 0 + // /tg/ movement procs //The byond version of these verbs wait for the next tick before acting. diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index 6764042dfcd..db179a3b3e4 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -1,4 +1,4 @@ -/var/obj/effect/lobby_image = new/obj/effect/lobby_image() +/var/obj/effect/lobby_image /obj/effect/lobby_image name = "Aurorastation" @@ -6,7 +6,8 @@ icon = 'icons/misc/title.dmi' screen_loc = "WEST,SOUTH" -/obj/effect/lobby_image/initialize() +/obj/effect/lobby_image/New() + ..() var/list/known_icon_states = icon_states(icon) for(var/lobby_screen in config.lobby_screens) if(!(lobby_screen in known_icon_states)) @@ -32,7 +33,8 @@ mind.current = src loc = null - client.screen += lobby_image + show_title() + my_client = client sight |= SEE_TURFS player_list |= src @@ -42,3 +44,12 @@ if(client) handle_privacy_poll() client.playtitlemusic() + +/mob/new_player/proc/show_title() + set waitfor = FALSE + if (lobby_image) + client.screen += lobby_image + return + + sleep(5) + .() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 18e85259a1e..a714a6648cf 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -18,6 +18,10 @@ New() mob_list += src + Destroy() + mob_list -= src + return ..() + verb/new_player_panel() set src = usr new_player_panel_proc() @@ -28,7 +32,7 @@ output +="
" output += "

Setup Character

" - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) + if(!ROUND_IS_STARTED) if(ready) output += "

\[ Ready | Not Ready \]

" else @@ -67,24 +71,28 @@ Stat() ..() - if(statpanel("Lobby") && ticker) + if(statpanel("Lobby")) stat("Game ID:", game_id) - if(ticker.hide_mode) + if(SSticker.hide_mode) stat("Game Mode:", "Secret") else - if(ticker.hide_mode == 0) + if(SSticker.hide_mode == 0) stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode - if(ticker.current_state == GAME_STATE_PREGAME) - stat("Time To Start:", "[ticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]") + if(SSticker.current_state == GAME_STATE_PREGAME) + if (SSticker.lobby_ready) + stat("Time To Start:", "[SSticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]") + else + stat("Time To Start:", "Waiting for Server") stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]") totalPlayers = 0 totalPlayersReady = 0 for(var/mob/new_player/player in player_list) stat("[player.key]", (player.ready)?("(Playing)"):(null)) totalPlayers++ - if(player.ready)totalPlayersReady++ + if(player.ready) + totalPlayersReady++ Topic(href, href_list[]) if(!client) return 0 @@ -94,7 +102,7 @@ return 1 if(href_list["ready"]) - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started + if(SSticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started // Cannot join without a saved character, if we're on SQL saves. if (config.sql_saves && !client.prefs.current_character) alert(src, "You have not saved your character yet. Please do so before readying up.") @@ -109,6 +117,11 @@ new_player_panel_proc() if(href_list["observe"]) + if (SSatoms.initialized < INITIALIZATION_INNEW_REGULAR) + // Don't allow players to observe until initialization is more or less complete. + // Letting them join too early breaks things, they can wait. + src << span("alert", "The server is still initializing, try observing again in a minute or so.") + return if(alert(src,"Are you sure you wish to observe? You will have to wait 30 minutes before being able to respawn!","Player Setup","Yes","No") == "Yes") if(!client) return 1 @@ -144,7 +157,7 @@ if(href_list["late_join"]) - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(SSticker.current_state != GAME_STATE_PLAYING) usr << "\red The round is either not ready, or has already finished..." return @@ -173,7 +186,7 @@ if(!config.enter_allowed) usr << "There is an administrative lock on entering the game!" return - else if(ticker && ticker.mode && ticker.mode.explosion_in_progress) + else if(SSticker.mode && SSticker.mode.explosion_in_progress) usr << "The station is currently exploding. Joining would go poorly." return @@ -300,7 +313,7 @@ proc/AttemptLateSpawn(rank,var/spawning_at) if(src != usr) return 0 - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(SSticker.current_state != GAME_STATE_PLAYING) usr << "\red The round is either not ready, or has already finished..." return 0 if(!config.enter_allowed) @@ -319,8 +332,11 @@ job_master.AssignRole(src, rank, 1) var/mob/living/character = create_character() //creates the human and transfers vars and mind - character = job_master.EquipRank(character, rank, 1) //equips the human + + character = job_master.EquipPersonal(character, rank, 1,spawning_at) //equips the human + UpdateFactionList(character) + equip_custom_items(character) // AIs don't need a spawnpoint, they must spawn at an empty core @@ -335,7 +351,7 @@ character.loc = C.loc AnnounceCyborg(character, rank, "has been downloaded to the empty core in \the [character.loc.loc]") - ticker.mode.handle_latejoin(character) + SSticker.mode.handle_latejoin(character) qdel(C) qdel(src) @@ -350,11 +366,11 @@ character.buckled.loc = character.loc character.buckled.set_dir(character.dir) - ticker.mode.handle_latejoin(character) + SSticker.mode.handle_latejoin(character) if(character.mind.assigned_role != "Cyborg") data_core.manifest_inject(character) - ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn + SSticker.minds += character.mind //Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn //Grab some data from the character prefs for use in random news procs. @@ -365,7 +381,7 @@ qdel(src) proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message) - if (ticker.current_state == GAME_STATE_PLAYING) + if (SSticker.current_state == GAME_STATE_PLAYING) if(character.mind.role_alt_title) rank = character.mind.role_alt_title // can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc. @@ -430,7 +446,7 @@ || (new_character.species && (chosen_language.name in new_character.species.secondary_langs))) new_character.add_language(lang) - if(ticker.random_players) + if(SSticker.random_players) new_character.gender = pick(MALE, FEMALE) client.prefs.real_name = random_name(new_character.gender) client.prefs.randomize_appearance_for(new_character) diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm index 15ab1a8e9cc..879a5c71673 100644 --- a/code/modules/modular_computers/NTNet/NTNet_relay.dm +++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm @@ -1,8 +1,3 @@ -#define NTR_NORMAL 0 -#define NTR_OVERLOAD 1 -#define NTR_DISABLE 2 -#define NTR_POWERLOSS 3 - // Relays don't handle any actual communication. Global NTNet datum does that, relays only tell the datum if it should or shouldn't work. /obj/machinery/ntnet_relay name = "NTNet Quantum Relay" @@ -24,8 +19,6 @@ var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay var/dos_dissipate = 1 // Amount of DoS "packets" dissipated over time. - var/overlay_cache = list() - // TODO: Implement more logic here. For now it's only a placeholder. /obj/machinery/ntnet_relay/operable() if(!..(EMPED)) @@ -36,44 +29,25 @@ return 0 return 1 -/obj/machinery/ntnet_relay/proc/get_state() - if (!enabled) - return NTR_DISABLE - if (dos_failure) - return NTR_OVERLOAD - if (!operable()) - return NTR_POWERLOSS - - return NTR_NORMAL - /obj/machinery/ntnet_relay/update_icon() - var/state = get_state() icon_state = initial(icon_state) + cut_overlays() + if (panel_open) icon_state += "_o" - switch (state) - if (NTR_NORMAL) - overlays += overlay_cache["ok"] - overlays -= overlay_cache["problem"] - overlays -= overlay_cache["error"] + if (!operable()) + icon_state += "_off" - if (NTR_OVERLOAD) - overlays -= overlay_cache["ok"] - overlays += overlay_cache["problem"] - overlays -= overlay_cache["error"] - - if (NTR_DISABLE) - overlays -= overlay_cache["ok"] - overlays -= overlay_cache["problem"] - overlays += overlay_cache["error"] + else if (dos_failure) + add_overlay("ntnet_o_problem") + + else if (!enabled) + add_overlay("ntnet_o_error") - if (NTR_POWERLOSS) - overlays -= overlay_cache["ok"] - overlays -= overlay_cache["problem"] - overlays -= overlay_cache["error"] - icon_state += "_off" + else + add_overlay("ntnet_o_ok") /obj/machinery/ntnet_relay/process() if(operable()) @@ -133,11 +107,6 @@ component_parts += new /obj/item/stack/cable_coil(src,15) component_parts += new /obj/item/weapon/circuitboard/ntnet_relay(src) - overlay_cache = list() - overlay_cache["ok"] = image('icons/obj/machines/telecomms.dmi', "ntnet_o_ok") - overlay_cache["problem"] = image('icons/obj/machines/telecomms.dmi', "ntnet_o_problem") - overlay_cache["error"] = image('icons/obj/machines/telecomms.dmi', "ntnet_o_error") - update_icon() if(ntnet_global) @@ -154,7 +123,7 @@ for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) D.target = null D.error = "Connection to quantum relay severed" - ..() + return ..() /obj/machinery/ntnet_relay/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if(istype(W, /obj/item/weapon/screwdriver)) @@ -175,7 +144,3 @@ qdel(src) return ..() - -#undef NTR_NORMAL -#undef NTR_OVERLOAD -#undef NTR_DISABLE \ No newline at end of file diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index 5ecc044b71a..4c9e9454c03 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -50,24 +50,25 @@ for (var/datum/computer_file/program/prog in programs) hard_drive.store_file(prog) -/obj/item/modular_computer/New() - processing_objects.Add(src) +/obj/item/modular_computer/Initialize() + . = ..() + START_PROCESSING(SSprocessing, src) install_default_hardware() if(hard_drive) install_default_programs() update_icon() - ..() /obj/item/modular_computer/Destroy() kill_program(1) for(var/obj/item/weapon/computer_hardware/CH in src.get_all_components()) uninstall_component(null, CH) qdel(CH) + STOP_PROCESSING(SSprocessing, src) return ..() /obj/item/modular_computer/emag_act(var/remaining_charges, var/mob/user) if(computer_emagged) - to_chat(user, "\The [src] was already emagged.") + to_chat(user, "\The [src] has already been emagged.") return NO_EMAG_ACT else computer_emagged = 1 @@ -77,14 +78,14 @@ /obj/item/modular_computer/update_icon() icon_state = icon_state_unpowered - overlays.Cut() + cut_overlays() if(!enabled) var/probably_working = hard_drive && processor_unit && damage < broken_damage && (apc_power(0) || battery_power(0)) if(icon_state_screensaver && probably_working) if (is_holographic) holographic_overlay(src, src.icon, icon_state_screensaver) else - overlays += image(icon_state_screensaver) + add_overlay(icon_state_screensaver) if (screensaver_light_range && probably_working) set_light(screensaver_light_range, 1, screensaver_light_color ? screensaver_light_color : "#FFFFFF") @@ -96,13 +97,13 @@ if (is_holographic) holographic_overlay(src, src.icon, state) else - overlays += image(state) + add_overlay(state) set_light(light_strength, l_color = active_program.color) else if (is_holographic) holographic_overlay(src, src.icon, icon_state_menu) else - overlays += image(icon_state_menu) + add_overlay(icon_state_menu) set_light(light_strength, l_color = menu_light_color) /obj/item/modular_computer/proc/turn_on(var/mob/user) diff --git a/code/modules/modular_computers/computers/modular_computer/damage.dm b/code/modules/modular_computers/computers/modular_computer/damage.dm index 99cac0c0604..fc26946eaa2 100644 --- a/code/modules/modular_computers/computers/modular_computer/damage.dm +++ b/code/modules/modular_computers/computers/modular_computer/damage.dm @@ -14,8 +14,8 @@ H.forceMove(newloc) if(prob(25)) H.take_damage(rand(10,30)) - //relay_qdel() - qdel() + + qdel(src) /obj/item/modular_computer/proc/take_damage(var/amount, var/component_probability, var/damage_casing = 1, var/randomize = 1) if(randomize) diff --git a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm index cd346cc444e..3bf90b564ac 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm @@ -29,5 +29,5 @@ if(anchored) ..() else - overlays.Cut() + cut_overlays() icon_state = icon_state_closed diff --git a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm index a17087f85a9..2a3162ce840 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm @@ -8,3 +8,7 @@ /obj/item/modular_computer/telescreen/preset/generic/ _app_preset_name = "wallgeneric" enrolled = 1 + +/obj/item/modular_computer/telescreen/preset/trashcompactor/ + _app_preset_name = "trashcompactor" + enrolled = 1 diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index c5c1d9e86e5..7603219cb46 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -23,7 +23,7 @@ var/global/file_uid = 0 if(holder.holder2 && holder.holder2.active_program == src) holder.holder2.kill_program(1) holder = null - ..() + return ..() // Returns independent copy of this file. /datum/computer_file/proc/clone(var/rename = 0) @@ -36,4 +36,4 @@ var/global/file_uid = 0 else temp.filename = filename temp.filetype = filetype - return temp \ No newline at end of file + return temp diff --git a/code/modules/modular_computers/file_system/programs/app_presets.dm b/code/modules/modular_computers/file_system/programs/app_presets.dm index 56d6d21c815..47c4829b7b8 100644 --- a/code/modules/modular_computers/file_system/programs/app_presets.dm +++ b/code/modules/modular_computers/file_system/programs/app_presets.dm @@ -144,3 +144,14 @@ new/datum/computer_file/program/aidiag() ) return _prg_list + +/datum/modular_computer_app_presets/trashcompactor + name = "trashcompactor" + display_name = "Trash Compactor" + description = "A preset for the Trash Compactor Wall Console" + available = 0 +/datum/modular_computer_app_presets/trashcompactor/return_install_programs() + var/list/_prg_list = list( + new/datum/computer_file/program/crushercontrol() + ) + return _prg_list diff --git a/code/modules/modular_computers/file_system/programs/civilian/crusher_control.dm b/code/modules/modular_computers/file_system/programs/civilian/crusher_control.dm new file mode 100644 index 00000000000..0c6c98c4901 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/civilian/crusher_control.dm @@ -0,0 +1,114 @@ +/datum/computer_file/program/crushercontrol + filename = "crushercontrol" + filedesc = "Crusher Control" + extended_desc = "Application to Control the Crusher" + size = 8 + requires_ntnet = 0 + available_on_ntnet = 0 + required_access_download = access_hop + required_access_run = access_janitor + usage_flags = PROGRAM_TELESCREEN + nanomodule_path = /datum/nano_module/program/crushercontrol/ + +/datum/nano_module/program/crushercontrol/ + name = "Crusher Control" + var/message = "" // Message to return to the user + var/extending = 0 //If atleast one of the pistons is extending + var/list/pistons = list() //List of pistons linked to the program + var/list/airlocks = list() //List of airlocks linked to the program + var/list/status_airlocks = list() //Status of the airlocks + var/list/status_pistons = list() //Status of the pistons + +/datum/nano_module/program/crushercontrol/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + var/list/data = host.initial_data() + + status_pistons = list() + extending = 0 + + //Cycle through the pistons and get their status + var/i = 1 + for(var/obj/machinery/crusher_base/pstn in pistons) + var/num_progress = pstn.get_num_progress() + var/is_blocked = pstn.is_blocked() + var/action = pstn.get_action() + if(action == "extend") + extending = 1 + status_pistons.Add(list(list( + "progress"=num_progress, + "blocked"=is_blocked, + "action"=action, + "piston"=i + ))) + i++ + + data["message"] = message + data["airlock_count"] = airlocks.len + data["piston_count"] = pistons.len + data["status_airlocks"] = status_airlocks + data["status_pistons"] = status_pistons + data["extending"] = extending + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "crushercontrol.tmpl", name, 500, 350, state = state) + ui.auto_update_layout = 1 + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/program/crushercontrol/Topic(href, href_list) + if(..()) + return 1 + + if(href_list["initialize"]) + pistons = list() + for(var/obj/machinery/crusher_base/pstn in orange(10,src.host)) + pistons += pstn + + airlocks = list() + for(var/obj/machinery/door/airlock/arlk in orange(10,src.host)) + if( arlk.id_tag != "crusher") + continue + airlocks += arlk + + airlock_open() + + if(href_list["hatch_open"]) + message = "Opening the Hatch" + airlock_open() + + if(href_list["hatch_close"]) + message = "Closing the Hatch" + airlock_close() + + if(href_list["crush"]) + message = "Crushing" + airlock_close() + crush_start() + + if(href_list["abort"]) + message = "Aborting" + crush_stop() + + if(href_list["close"]) + message = null + + +/datum/nano_module/program/crushercontrol/proc/airlock_open() + for(var/obj/machinery/door/airlock/arlk in airlocks) + arlk.unlock() + arlk.open() + arlk.lock() + +/datum/nano_module/program/crushercontrol/proc/airlock_close() + for(var/obj/machinery/door/airlock/arlk in airlocks) + arlk.unlock() + arlk.close() + arlk.lock() + +/datum/nano_module/program/crushercontrol/proc/crush_start() + for(var/obj/machinery/crusher_base/pstn in pistons) + pstn.crush_start() + +/datum/nano_module/program/crushercontrol/proc/crush_stop() + for(var/obj/machinery/crusher_base/pstn in pistons) + pstn.crush_abort() diff --git a/code/modules/modular_computers/file_system/programs/command/comm.dm b/code/modules/modular_computers/file_system/programs/command/comm.dm index e8d18396614..393a5465fea 100644 --- a/code/modules/modular_computers/file_system/programs/command/comm.dm +++ b/code/modules/modular_computers/file_system/programs/command/comm.dm @@ -243,7 +243,7 @@ /datum/nano_module/program/comm/proc/post_status(var/command, var/data1, var/data2) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) if(!frequency) return diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm index d19312a320e..b995d36b8ce 100644 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ b/code/modules/modular_computers/hardware/ai_slot.dm @@ -40,4 +40,4 @@ if(stored_card) stored_card.forceMove(get_turf(holder2)) holder2 = null - ..() \ No newline at end of file + return ..() diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index 35eddbd5ec9..069dba3d600 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -15,4 +15,4 @@ if(stored_card) stored_card.forceMove(get_turf(holder2)) holder2 = null - ..() \ No newline at end of file + return ..() diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index ff97edb81d1..e5b2987a045 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -162,7 +162,7 @@ if(holder2 && (holder2.hard_drive == src)) holder2.hard_drive = null stored_files = null - ..() + return ..() /obj/item/weapon/computer_hardware/hard_drive/New() install_default_programs() diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm index 87c69d55075..b92f2dc05f0 100644 --- a/code/modules/modular_computers/hardware/nano_printer.dm +++ b/code/modules/modular_computers/hardware/nano_printer.dm @@ -43,4 +43,4 @@ if(holder2 && (holder2.nano_printer == src)) holder2.nano_printer = null holder2 = null - ..() \ No newline at end of file + return ..() diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 0ef1c6af108..97efe50f3ae 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -52,7 +52,7 @@ var/global/ntnet_card_uid = 1 if(holder2 && (holder2.network_card == src)) holder2.network_card = null holder2 = null - ..() + return ..() // Returns a string identifier of this network card /obj/item/weapon/computer_hardware/network_card/proc/get_network_tag() @@ -92,4 +92,4 @@ var/global/ntnet_card_uid = 1 /obj/item/weapon/computer_hardware/network_card/Destroy() if(holder2 && (holder2.network_card == src)) holder2.network_card = null - ..() + return ..() diff --git a/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm b/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm index 0648f968b5c..b0b9378b7da 100644 --- a/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm +++ b/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm @@ -42,7 +42,8 @@ desc = "A crate containing a backup of all the NT Software available" name = "Backup Software Crate" -/obj/structure/closet/crate/software_backup/initialize() +/obj/structure/closet/crate/software_backup/Initialize() + . = ..() for(var/F in typesof(/datum/computer_file/program)) var/datum/computer_file/program/prog = new F // Invalid type (shouldn't be possible but just in case), invalid filetype (not executable program) or invalid filename (unset program) diff --git a/code/modules/modular_computers/hardware/tesla_link.dm b/code/modules/modular_computers/hardware/tesla_link.dm index d8ee0e0936d..b4588bd8740 100644 --- a/code/modules/modular_computers/hardware/tesla_link.dm +++ b/code/modules/modular_computers/hardware/tesla_link.dm @@ -12,4 +12,4 @@ /obj/item/weapon/computer_hardware/tesla_link/Destroy() if(holder2 && (holder2.tesla_link == src)) holder2.tesla_link = null - ..() + return ..() diff --git a/code/modules/multiz/basic.dm b/code/modules/multiz/basic.dm index e76c6516aa7..0ed4e5364a5 100644 --- a/code/modules/multiz/basic.dm +++ b/code/modules/multiz/basic.dm @@ -11,25 +11,43 @@ var/z_levels = 0 // Each bit represents a connection between adjacent levels. S qdel(src) // The storage of connections between adjacent levels means some bitwise magic is needed. -proc/HasAbove(var/z) +/proc/HasAbove(var/z) if(z >= world.maxz || z > 16 || z < 1) return 0 return z_levels & (1 << (z - 1)) -proc/HasBelow(var/z) +/proc/HasBelow(var/z) if(z > world.maxz || z > 17 || z < 2) return 0 return z_levels & (1 << (z - 2)) // Thankfully, no bitwise magic is needed here. -proc/GetAbove(var/atom/atom) +/proc/GetAbove(var/atom/atom) var/turf/turf = get_turf(atom) if(!turf) return null return HasAbove(turf.z) ? get_step(turf, UP) : null -proc/GetBelow(var/atom/atom) +/proc/GetBelow(var/atom/atom) var/turf/turf = get_turf(atom) if(!turf) return null return HasBelow(turf.z) ? get_step(turf, DOWN) : null + +/proc/GetConnectedZlevels(z) + . = list(z) + for(var/level = z, HasBelow(level), level--) + . |= level-1 + for(var/level = z, HasAbove(level), level++) + . |= level+1 + +proc/AreConnectedZLevels(var/zA, var/zB) + return zA == zB || (zB in GetConnectedZlevels(zA)) + +/proc/get_zstep(ref, dir) + if(dir == UP) + . = GetAbove(ref) + else if (dir == DOWN) + . = GetBelow(ref) + else + . = get_step(ref, dir) \ No newline at end of file diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index dd0a93fec11..bd0652e4e13 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -1,51 +1,196 @@ -/obj/item/weapon/tank/jetpack/verb/moveup() +/mob/verb/up() set name = "Move Upwards" - set category = "Object" + set category = "IC" - . = 1 - if(!allow_thrust(0.01, usr)) - usr << "\The [src] is disabled." + if(zMove(UP)) + to_chat(usr, "You move upwards.") + +/mob/verb/down() + set name = "Move Down" + set category = "IC" + + if(zMove(DOWN)) + to_chat(usr, "You move down.") + +/mob/proc/zMove(direction) + if(eyeobj) + return eyeobj.zMove(direction) + if(!can_ztravel()) + to_chat(usr, "You lack means of travel in that direction.") return - var/turf/above = GetAbove(src) - if(!istype(above)) - usr << "There is nothing of interest in this direction." - return + var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) - if(!istype(above, /turf/space) && !istype(above, /turf/simulated/open)) - usr << "You bump against \the [above]." - return + if(!destination) + to_chat(usr, "There is nothing of interest in this direction.") + return 0 - for(var/atom/A in above) - if(A.density) - usr << "\The [A] blocks you." - return + var/turf/start = get_turf(src) + if(!start.CanZPass(src, direction)) + to_chat(usr, "\The [start] is in the way.") + return 0 + if(!destination.CanZPass(src, direction)) + to_chat(usr, "You bump against \the [destination].") + return 0 - usr.Move(above) - usr << "You move upwards." + var/area/area = get_area(src) + if(direction == UP && area.has_gravity) + to_chat(usr, "Gravity stops you from moving upward.") + return 0 -/obj/item/weapon/tank/jetpack/verb/movedown() - set name = "Move Downwards" - set category = "Object" + for(var/atom/A in destination) + if(!A.CanPass(src, start, 1.5, 0)) + to_chat(usr, "\The [A] blocks you.") + return 0 + Move(destination) + return 1 - . = 1 - if(!allow_thrust(0.01, usr)) - usr << "\The [src] is disabled." +/mob/eye/zMove(direction) + var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) + if(destination) + setLoc(destination) + else + to_chat(usr, "There is nothing of interest in this direction.") + +/mob/dead/observer/zMove(direction) + var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) + if(destination) + forceMove(destination) + else + to_chat(usr, "There is nothing of interest in this direction.") + +/mob/living/carbon/human/bst/zMove(direction) + var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) + if(destination) + forceMove(destination) + else + to_chat(usr, "There is nothing of interest in this direction.") + +/mob/proc/can_ztravel() + return 0 + +/mob/dead/observer/can_ztravel() + return 1 + +/mob/living/carbon/human/can_ztravel() + if(incapacitated()) + return 0 + + if(Allow_Spacemove()) + return 1 + + if(Check_Shoegrip()) //scaling hull with magboots + for(var/turf/simulated/T in trange(1,src)) + if(T.density) + return 1 + +/mob/living/silicon/robot/can_ztravel() + if(incapacitated() || is_dead()) + return 0 + + if(Allow_Spacemove()) //Checks for active jetpack + return 1 + + for(var/turf/simulated/T in trange(1,src)) //Robots get "magboots" + if(T.density) + return 1 + +//FALLING STUFF + +//Holds fall checks that should not be overriden by children +/atom/movable/proc/fall() + if(!isturf(loc)) return var/turf/below = GetBelow(src) - if(!istype(below)) - usr << "There is nothing of interest in this direction." + if(!below) return - if(below.density) - usr << "You bump against \the [below]." + var/turf/T = loc + if(!T.CanZPass(src, DOWN) || !below.CanZPass(src, DOWN)) return + // No gravity in space, apparently. + var/area/area = get_area(src) + if(!area.has_gravity()) + return + + if(throwing) + return + + if(can_fall()) + handle_fall(below) + +//For children to override +/atom/movable/proc/can_fall() + if(anchored) + return FALSE + + if(locate(/obj/structure/lattice, loc)) + return FALSE + + // See if something prevents us from falling. + var/turf/below = GetBelow(src) for(var/atom/A in below) - if(A.density) - usr << "\The [A] blocks you." + if(!A.CanPass(src, src.loc)) + return FALSE + + return TRUE + +/obj/effect/can_fall() + return FALSE + +/obj/effect/decal/cleanable/can_fall() + return TRUE + +/obj/item/pipe/can_fall() + var/turf/simulated/open/below = loc + below = below.below + + . = ..() + + if(anchored) + return FALSE + + if((locate(/obj/structure/disposalpipe/up) in below) || locate(/obj/machinery/atmospherics/pipe/zpipe/up in below)) + return FALSE + +/atom/movable/proc/handle_fall(var/turf/landing) + Move(landing) + if(locate(/obj/structure/stairs) in landing) + return 1 + + if(istype(landing, /turf/simulated/open)) + visible_message("\The [src] falls from the level above through \the [landing]!", "You hear a whoosh of displaced air.") + else if(!istype(landing, /turf/space)) + visible_message("\The [src] falls from the level above and slams onto \the [landing]!", "You hear something slam onto the floor.") + +/mob/living/carbon/human/handle_fall(var/turf/landing) + if(..()) + return + + var/area/area1 = get_area(landing) + if(!area1.has_gravity()) + return + + if(istype(landing, /turf/simulated/open)) + var/turf/simulated/open/open = landing + var/area/area2 = get_area(open.below) + if(!area2.has_gravity()) return - usr.Move(below) - usr << "You move downwards." + var/damage = 20 + apply_damage(rand(0, damage), BRUTE, "head") + apply_damage(rand(0, damage), BRUTE, "chest") + apply_damage(10 + rand(10, damage), BRUTE, "l_leg") + apply_damage(10 + rand(10, damage), BRUTE, "r_leg") + apply_damage(rand(0, damage), BRUTE, "l_arm") + apply_damage(rand(0, damage), BRUTE, "r_arm") + Weaken(2) + updatehealth() + +/mob/living/carbon/human/bst/can_fall() + return FALSE + +/mob/living/carbon/human/bst/handle_fall(turf/landing) + return diff --git a/code/modules/multiz/openspace.dm b/code/modules/multiz/openspace.dm new file mode 100644 index 00000000000..e2d09915466 --- /dev/null +++ b/code/modules/multiz/openspace.dm @@ -0,0 +1,108 @@ +/turf + // Reference to any open turf that might be above us to speed up atom Entered() updates. + var/tmp/turf/simulated/open/above + var/tmp/oo_light_set // If the turf has had a light set by starlight. + +/turf/Entered(atom/movable/thing, atom/oldLoc) + . = ..() + if (above && !istype(oldLoc, /turf/simulated/open)) + above.update_icon() + +/turf/Destroy() + above = null + return ..() + +/atom/movable + var/tmp/atom/movable/openspace/overlay/bound_overlay // The overlay that is directly mirroring us that we proxy movement to. + var/no_z_overlay // If TRUE, this atom will not be drawn on open turfs. + +/atom/movable/Destroy() + . = ..() + if (bound_overlay) + if (istype(bound_overlay.loc, /turf/simulated/open)) + bound_overlay.loc:update_icon() + + QDEL_NULL(bound_overlay) + +/atom/movable/Move() + . = ..() + if (bound_overlay) + // These should only ever be located on open-turf tiles. + var/turf/the_loc = bound_overlay.loc + if (!istype(the_loc, /turf/simulated/open)) + addtimer(CALLBACK(bound_overlay, /atom/movable/openspace/overlay/.proc/check_existence), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE) + else + bound_overlay.forceMove(get_step(src, UP)) + +/atom/movable/forceMove(atom/dest) + . = ..(dest) + if (bound_overlay) + // These should only ever be located on open-turf tiles. + var/turf/the_loc = bound_overlay.loc + if (!istype(the_loc, /turf/simulated/open)) + addtimer(CALLBACK(bound_overlay, /atom/movable/openspace/overlay/.proc/check_existence), 1 SECOND, TIMER_UNIQUE) + else + bound_overlay.forceMove(get_step(src, UP)) + +/atom/movable/proc/update_oo() + if (!bound_overlay) + return + + // check_existence returns TRUE if the overlay is valid. + if (bound_overlay.check_existence()) + SSopenturf.queued_overlays += bound_overlay + +/atom/movable/proc/get_above_oo() + . = list() + var/atom/movable/curr = src + while (curr.bound_overlay) + . += curr.bound_overlay + curr = curr.bound_overlay + +// -- Openspace movables -- + +/atom/movable/openspace + name = "" + simulated = FALSE + anchored = TRUE + mouse_opacity = FALSE + +/atom/movable/openspace/can_fall() + return FALSE + +// No blowing up abstract objects. +/atom/movable/openspace/ex_act(ex_sev) + return + +/atom/movable/openspace/singularity_act() + return + +/atom/movable/openspace/singularity_pull() + return + +/atom/movable/openspace/singuloCanEat() + return + +// Used to darken the atoms on the openturf without fucking up colors. +/atom/movable/openspace/multiplier + name = "openspace multiplier" + desc = "You shouldn't see this." + icon = 'icons/misc/openspace.dmi' + icon_state = "white" + plane = OPENTURF_CAP_PLANE + blend_mode = BLEND_MULTIPLY + color = list( + 0.75, 0, 0, + 0, 0.75, 0, + 0, 0, 0.75 + ) + no_z_overlay = TRUE + +/atom/movable/openspace/multiplier/Destroy() + var/turf/simulated/open/myturf = loc + if (istype(myturf)) + myturf.shadower = null + + return ..() + +// /atom/movable/openspace/overlay is in openspace_overlay.dm diff --git a/code/modules/multiz/openspace_overlay.dm b/code/modules/multiz/openspace_overlay.dm new file mode 100644 index 00000000000..abbacc12a1f --- /dev/null +++ b/code/modules/multiz/openspace_overlay.dm @@ -0,0 +1,43 @@ +// The visual representation of an atom under an openspace turf. +/atom/movable/openspace/overlay + plane = OPENTURF_MAX_PLANE + var/atom/movable/associated_atom + var/depth + +/atom/movable/openspace/overlay/New() + SSopenturf.openspace_overlays += src + +/atom/movable/openspace/overlay/Destroy() + SSopenturf.openspace_overlays -= src + + if (associated_atom) + associated_atom.bound_overlay = null + associated_atom = null + + return ..() + +/atom/movable/openspace/overlay/attackby(obj/item/W, mob/user) + user << span("notice", "\The [src] is too far away.") + +/atom/movable/openspace/overlay/attack_hand(mob/user as mob) + user << span("notice", "You cannot reach \the [src] from here.") + +/atom/movable/openspace/overlay/attack_generic(mob/user as mob) + user << span("notice", "You cannot reach \the [src] from here.") + +/atom/movable/openspace/overlay/forceMove(atom/dest) + . = ..() + check_existence() + +/atom/movable/openspace/overlay/Move() + . = ..() + check_existence() + +// Checks if we've moved off of an openturf. +// Returns TRUE if we're continuing to exist, FALSE if we're deleting ourselves. +/atom/movable/openspace/overlay/proc/check_existence() + if (!istype(loc, /turf/simulated/open)) + qdel(src) + return FALSE + else + return TRUE diff --git a/code/modules/multiz/pipes.dm b/code/modules/multiz/pipes.dm index 1cb5b9b4da7..9ed5908b02e 100644 --- a/code/modules/multiz/pipes.dm +++ b/code/modules/multiz/pipes.dm @@ -88,7 +88,7 @@ obj/machinery/atmospherics/pipe/zpipe/Destroy() node1.disconnect(src) if(node2) node2.disconnect(src) - ..() + return ..() obj/machinery/atmospherics/pipe/zpipe/pipeline_expansion() return list(node1, node2) @@ -192,7 +192,6 @@ obj/machinery/atmospherics/pipe/zpipe/up/scrubbers name = "upwards scrubbers pipe" desc = "A scrubbers pipe segment to connect upwards." connect_types = CONNECT_TYPE_SCRUBBER - layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -201,7 +200,6 @@ obj/machinery/atmospherics/pipe/zpipe/up/supply name = "upwards supply pipe" desc = "A supply pipe segment to connect upwards." connect_types = CONNECT_TYPE_SUPPLY - layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -210,7 +208,6 @@ obj/machinery/atmospherics/pipe/zpipe/down/scrubbers name = "downwards scrubbers pipe" desc = "A scrubbers pipe segment to connect downwards." connect_types = CONNECT_TYPE_SCRUBBER - layer = 2.38 icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -219,6 +216,16 @@ obj/machinery/atmospherics/pipe/zpipe/down/supply name = "downwards supply pipe" desc = "A supply pipe segment to connect downwards." connect_types = CONNECT_TYPE_SUPPLY - layer = 2.39 icon_connect_type = "-supply" color = PIPE_COLOR_BLUE + +// Colored misc. pipes +obj/machinery/atmospherics/pipe/zpipe/up/cyan + color = PIPE_COLOR_CYAN +obj/machinery/atmospherics/pipe/zpipe/down/cyan + color = PIPE_COLOR_CYAN + +obj/machinery/atmospherics/pipe/zpipe/up/red + color = PIPE_COLOR_RED +obj/machinery/atmospherics/pipe/zpipe/down/red + color = PIPE_COLOR_RED diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index 36a606bfcf9..6f0b926cf6a 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -4,54 +4,124 @@ /obj/structure/ladder name = "ladder" - desc = "A ladder. You can climb it up and down." - icon_state = "ladderdown" + desc = "A ladder. You can climb it up and down." + icon_state = "ladder01" icon = 'icons/obj/structures.dmi' density = 0 opacity = 0 anchored = 1 - var/obj/structure/ladder/target + var/allowed_directions = DOWN + var/obj/structure/ladder/target_up + var/obj/structure/ladder/target_down - initialize() - // the upper will connect to the lower - if(icon_state == "ladderup") - return + var/const/climb_time = 2 SECONDS +/obj/structure/ladder/Initialize() + . = ..() + // the upper will connect to the lower + if(allowed_directions & DOWN) //we only want to do the top one, as it will initialize the ones before it. for(var/obj/structure/ladder/L in GetBelow(src)) - if(L.icon_state == "ladderup") - target = L - L.target = src + if(L.allowed_directions & UP) + target_down = L + L.target_up = src return + update_icon() - Destroy() - if(target && icon_state == "ladderdown") - qdel(target) - return ..() +/obj/structure/ladder/Destroy() + if(target_down) + target_down.target_up = null + target_down = null + if(target_up) + target_up.target_down = null + target_up = null + return ..() - attackby(obj/item/C as obj, mob/user as mob) - . = ..() - attack_hand(user) +/obj/structure/ladder/attackby(obj/item/C as obj, mob/user as mob) + attack_hand(user) + return + +/obj/structure/ladder/attack_hand(var/mob/M) + if(!M.may_climb_ladders(src)) return - attack_hand(var/mob/M) - if(!target || !istype(target.loc, /turf)) - M << "\The [src] is incomplete and can't be climbed." + var/obj/structure/ladder/target_ladder = getTargetLadder(M) + if(!target_ladder) + return + if(!M.Move(get_turf(src))) + to_chat(M, "You fail to reach \the [src].") + return + + var/direction = target_ladder == target_up ? "up" : "down" + + M.visible_message("\The [M] begins climbing [direction] \the [src]!", + "You begin climbing [direction] \the [src]!", + "You hear the grunting and clanging of a metal ladder being used.") + + target_ladder.audible_message("You hear something coming [direction] \the [src]") + + if(do_after(M, climb_time)) + climbLadder(M, target_ladder) + +/obj/structure/ladder/attack_ghost(var/mob/M) + var/target_ladder = getTargetLadder(M) + if(target_ladder) + M.forceMove(get_turf(target_ladder)) + +/obj/structure/ladder/proc/getTargetLadder(var/mob/M) + if((!target_up && !target_down) || (target_up && !istype(target_up.loc, /turf) || (target_down && !istype(target_down.loc,/turf)))) + to_chat(M, "\The [src] is incomplete and can't be climbed.") + return + if(target_down && target_up) + var/direction = alert(M,"Do you want to go up or down?", "Ladder", "Up", "Down", "Cancel") + + if(direction == "Cancel") return - var/turf/T = target.loc - for(var/atom/A in T) - if(A.density) - M << "\A [A] is blocking \the [src]." - return + if(!M.may_climb_ladders(src)) + return - M.visible_message("\A [M] climbs [icon_state == "ladderup" ? "up" : "down"] \a [src]!", - "You climb [icon_state == "ladderup" ? "up" : "down"] \the [src]!", - "You hear the grunting and clanging of a metal ladder being used.") - M.Move(T) + switch(direction) + if("Up") + return target_up + if("Down") + return target_down + else + return target_down || target_up - CanPass(obj/mover, turf/source, height, airflow) - return airflow || !density +/mob/proc/may_climb_ladders(var/ladder) + if(!Adjacent(ladder)) + to_chat(src, "You need to be next to \the [ladder] to start climbing.") + return FALSE + if(incapacitated()) + to_chat(src, "You are physically unable to climb \the [ladder].") + return FALSE + return TRUE + +/mob/observer/ghost/may_climb_ladders(var/ladder) + return TRUE + +/obj/structure/ladder/proc/climbLadder(var/mob/M, var/target_ladder) + var/turf/T = get_turf(target_ladder) + for(var/atom/A in T) + if(!A.CanPass(M, M.loc, 1.5, 0)) + to_chat(M, "\The [A] is blocking \the [src].") + return FALSE + return M.Move(T) + +/obj/structure/ladder/CanPass(obj/mover, turf/source, height, airflow) + return airflow || !density + +/obj/structure/ladder/update_icon() + icon_state = "ladder[!!(allowed_directions & UP)][!!(allowed_directions & DOWN)]" + +/obj/structure/ladder/up + allowed_directions = UP + icon_state = "ladder10" + +/obj/structure/ladder/updown + allowed_directions = UP|DOWN + icon_state = "ladder11" /obj/structure/stairs name = "Stairs" @@ -61,7 +131,8 @@ opacity = 0 anchored = 1 - initialize() + Initialize() + . = ..() for(var/turf/turf in locs) var/turf/simulated/open/above = GetAbove(turf) if(!above) @@ -103,4 +174,4 @@ west dir = WEST - bound_width = 64 \ No newline at end of file + bound_width = 64 diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index b358cd0fbbd..6dff3cf5cd2 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -1,88 +1,101 @@ +/turf/proc/CanZPass(atom/A, direction) + if(z == A.z) //moving FROM this turf + return direction == UP //can't go below + else + if(direction == UP) //on a turf below, trying to enter + return 0 + if(direction == DOWN) //on a turf above, trying to enter + return !density + +/turf/simulated/open/CanZPass(atom, direction) + return 1 + +/turf/space/CanZPass(atom, direction) + return 1 + /turf/simulated/open name = "open space" icon = 'icons/turf/space.dmi' - icon_state = "black" - alpha = 16 - layer = 0 + icon_state = "" + plane = PLANE_SPACE_BACKGROUND density = 0 pathweight = 100000 //Seriously, don't try and path over this one numbnuts + is_hole = TRUE - var/turf/below - var/list/underlay_references - var/global/overlay_map = list() + var/tmp/turf/below + var/tmp/atom/movable/openspace/multiplier/shadower // Overlay used to multiply color of all OO overlays at once. + var/tmp/updating = FALSE // If this turf is queued for openturf update. + var/tmp/last_seen_turf // A soft reference to the last turf present when this was updated. -/turf/simulated/open/initialize() + var/tmp/depth + +/turf/simulated/open/proc/is_above_space() + var/turf/T = GetBelow(src) + while (T && T.is_hole) + if (istype(T, /turf/space)) + return TRUE + T = GetBelow(T) + + return FALSE + +/turf/simulated/open/Destroy() + SSopenturf.openspace_turfs -= src + SSopenturf.queued_turfs -= src + QDEL_NULL(shadower) + + for (var/atom/movable/openspace/overlay in src) + qdel(overlay) + + if (istype(above)) + above.update() + above = null + + below = null + return ..() + +/turf/simulated/open/airless + oxygen = 0 + nitrogen = 0 + temperature = TCMB + +/turf/simulated/open/post_change() ..() + update() + +/turf/simulated/open/Initialize() + . = ..() + update() + SSopenturf.openspace_turfs += src + +/turf/simulated/open/proc/update() + set waitfor = FALSE below = GetBelow(src) - ASSERT(HasBelow(z)) + below.above = src + levelupdate() + for(var/atom/movable/A in src) + A.fall() + update_icon() -/turf/simulated/open/Entered(var/atom/movable/mover) - // only fall down in defined areas (read: areas with artificial gravitiy) - if(!istype(below)) //make sure that there is actually something below - below = GetBelow(src) - if(!below) - return +/turf/simulated/open/update_dirt() + return 0 - // No gravity in space, apparently. - var/area/area = get_area(src) - if(area.name == "Space") - return - - // Prevent pipes from falling into the void... if there is a pipe to support it. - if(mover.anchored || istype(mover, /obj/item/pipe) && \ - (locate(/obj/structure/disposalpipe/up) in below) || \ - locate(/obj/machinery/atmospherics/pipe/zpipe/up in below)) - return - - // See if something prevents us from falling. - var/soft = 0 - for(var/atom/A in below) - if(A.density) - if(!istype(A, /obj/structure/window)) - return - else - var/obj/structure/window/W = A - if(W.is_fulltile()) - return - // Dont break here, since we still need to be sure that it isnt blocked - if(istype(A, /obj/structure/stairs)) - soft = 1 - - // We've made sure we can move, now. - mover.Move(below) - - if(!soft) - if(!istype(mover, /mob)) - if(istype(below, /turf/simulated/open)) - mover.visible_message("\The [mover] falls from the deck above through \the [below]!", "You hear a whoosh of displaced air.") - else - mover.visible_message("\The [mover] falls from the deck above and slams into \the [below]!", "You hear something slam into the deck.") - else - var/mob/M = mover - if(istype(below, /turf/simulated/open)) - below.visible_message("\The [mover] falls from the deck above through \the [below]!", "You hear a soft whoosh.[M.stat ? "" : ".. and some screaming."]") - else - M.visible_message("\The [mover] falls from the deck above and slams into \the [below]!", "You land on \the [below].", "You hear a soft whoosh and a crunch") - - // Handle people getting hurt, it's funny! - if (istype(mover, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = mover - var/damage = 5 - H.apply_damage(rand(0, damage), BRUTE, "head") - H.apply_damage(rand(0, damage), BRUTE, "chest") - H.apply_damage(rand(0, damage), BRUTE, "l_leg") - H.apply_damage(rand(0, damage), BRUTE, "r_leg") - H.apply_damage(rand(0, damage), BRUTE, "l_arm") - H.apply_damage(rand(0, damage), BRUTE, "r_arm") - H.weakened = max(H.weakened,2) - H.updatehealth() +/turf/simulated/open/Entered(atom/movable/mover) + ..() + mover.fall() // override to make sure nothing is hidden /turf/simulated/open/levelupdate() for(var/obj/O in src) O.hide(0) -// Straight copy from space. +/turf/simulated/open/update_icon() + if(!updating && below) + updating = TRUE + SSopenturf.queued_turfs += src + if (above) + // Cascade updates until we hit the top openturf. + above.update_icon() + /turf/simulated/open/attackby(obj/item/C as obj, mob/user as mob) if (istype(C, /obj/item/stack/rods)) var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) @@ -90,12 +103,12 @@ return var/obj/item/stack/rods/R = C if (R.use(1)) - user << "Constructing support lattice ..." + to_chat(user, "You lay down the support lattice.") playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - ReplaceWithLattice() + new /obj/structure/lattice(locate(src.x, src.y, src.z)) return - if (istype(C, /obj/item/stack/tile/floor)) + if (istype(C, /obj/item/stack/tile)) var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) if(L) var/obj/item/stack/tile/floor/S = C @@ -107,5 +120,15 @@ ChangeTurf(/turf/simulated/floor/airless) return else - user << "The plating is going to need some support." - return \ No newline at end of file + to_chat(user, "The plating is going to need some support.") + + //To lay cable. + if(istype(C, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/coil = C + coil.turf_place(src, user) + return + return + +//Most things use is_plating to test if there is a cover tile on top (like regular floors) +/turf/simulated/open/is_plating() + return 1 diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm index 2b259fa6f95..6121380e133 100644 --- a/code/modules/nano/modules/alarm_monitor.dm +++ b/code/modules/nano/modules/alarm_monitor.dm @@ -13,7 +13,7 @@ /datum/nano_module/alarm_monitor/all/New() ..() - alarm_handlers = alarm_manager.all_handlers + alarm_handlers = SSalarm.all_handlers /datum/nano_module/alarm_monitor/engineering/New() ..() diff --git a/code/modules/nano/modules/atmos_control.dm b/code/modules/nano/modules/atmos_control.dm index dedf4ca197d..ede55314623 100644 --- a/code/modules/nano/modules/atmos_control.dm +++ b/code/modules/nano/modules/atmos_control.dm @@ -23,7 +23,7 @@ if(alarm.alarm_id && alarm.alarm_id in monitored_alarm_ids) monitored_alarms += alarm // machines may not yet be ordered at this point - monitored_alarms = dd_sortedObjectList(monitored_alarms) + sortTim(monitored_alarms, /proc/cmp_alarm, FALSE) /datum/nano_module/atmos_control/Topic(href, href_list) if(..()) diff --git a/code/modules/nano/modules/crew_monitor.dm b/code/modules/nano/modules/crew_monitor.dm index 9008c860312..5ea89950262 100644 --- a/code/modules/nano/modules/crew_monitor.dm +++ b/code/modules/nano/modules/crew_monitor.dm @@ -3,10 +3,7 @@ /datum/nano_module/crew_monitor/Topic(href, href_list) if(..()) return 1 - var/turf/T = get_turf(nano_host()) // TODO: Allow setting any config.contact_levels from the interface. - if (!T || !(T.z in config.player_levels)) - usr << "Unable to establish a connection: You're too far away from the station!" - return 0 + if(href_list["track"]) if(isAI(usr)) var/mob/living/silicon/ai/AI = usr @@ -17,15 +14,20 @@ /datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) var/list/data = host.initial_data() - var/turf/T = get_turf(nano_host()) - data["isAI"] = isAI(user) - data["crewmembers"] = crew_repository.health_data(T) + // This checks if TCOMS is online using the test proc. If it isn't, the suit sensor data isn't loaded. + var/datum/signal/signal + signal = telecomms_process_active() + if(signal.data["done"] == 1) + data["isAI"] = isAI(user) + data["crewmembers"] = list() + for(var/z_level in map_levels) + data["crewmembers"] += crew_repository.health_data(z_level) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800, state = state) - // adding a template with the key "mapContent" enables the map ui functionality ui.add_template("mapContent", "crew_monitor_map_content.tmpl") // adding a template with the key "mapHeader" replaces the map header content diff --git a/code/modules/nano/modules/lighting_ctrl.dm b/code/modules/nano/modules/lighting_ctrl.dm index aca4d5bd5a4..ce6a3b14ff9 100644 --- a/code/modules/nano/modules/lighting_ctrl.dm +++ b/code/modules/nano/modules/lighting_ctrl.dm @@ -6,7 +6,7 @@ /datum/nano_module/lighting_ctrl/New() ..() - lstate = nl_ctrl.is_active() ? "dark" : "full" + lstate = SSnightlight.is_active() ? "dark" : "full" /datum/nano_module/lighting_ctrl/proc/update_lighting() if (!config.night_lighting) @@ -15,17 +15,14 @@ // whether to only select areas explicitly marked for nightlighting var/wl_only = context == "all" ? 0 : 1 - if (!wl_only && lstate == "dark") - nl_ctrl.manual_override = 1 - else if (!wl_only) - nl_ctrl.manual_override = 0 + SSnightlight.suspend() if (lstate == "dark") log_and_message_admins("enabled night-mode [wl_only ? "in public areas" : "globally"].", lusr) - nl_ctrl.activate(wl_only) + SSnightlight.activate(wl_only) else if (lstate == "full") log_and_message_admins("disabled night-mode [wl_only ? "in public areas" : "globally"].", lusr) - nl_ctrl.deactivate(wl_only) + SSnightlight.deactivate(wl_only) /datum/nano_module/lighting_ctrl/Topic(href, href_list) if(..()) @@ -51,4 +48,4 @@ ui.auto_update_layout = 1 ui.set_initial_data(data) ui.open() - ui.set_auto_update(1) \ No newline at end of file + ui.set_auto_update(1) diff --git a/code/modules/nano/modules/rcon.dm b/code/modules/nano/modules/rcon.dm index b5212eb76ef..1266055a96d 100644 --- a/code/modules/nano/modules/rcon.dm +++ b/code/modules/nano/modules/rcon.dm @@ -1,19 +1,17 @@ /datum/nano_module/rcon name = "Power RCON" - var/list/known_SMESs = null - var/list/known_breakers = null // Allows you to hide specific parts of the UI var/hide_SMES = 0 var/hide_SMES_details = 0 var/hide_breakers = 0 /datum/nano_module/rcon/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1, var/datum/topic_state/state = default_state) - FindDevices() // Update our devices list + //FindDevices() // Update our devices list var/list/data = host.initial_data() // SMES DATA (simplified view) var/list/smeslist[0] - for(var/obj/machinery/power/smes/buildable/SMES in known_SMESs) + for(var/obj/machinery/power/smes/buildable/SMES in SSmachinery.rcon_smes_units) smeslist.Add(list(list( "charge" = round(SMES.Percentage()), "input_set" = SMES.input_attempt, @@ -24,11 +22,10 @@ "RCON_tag" = SMES.RCon_tag ))) - data["smes_info"] = sortByKey(smeslist, "RCON_tag") - + data["smes_info"] = smeslist // BREAKER DATA (simplified view) var/list/breakerlist[0] - for(var/obj/machinery/power/breakerbox/BR in known_breakers) + for(var/obj/machinery/power/breakerbox/BR in SSmachinery.rcon_breaker_units) breakerlist.Add(list(list( "RCON_tag" = BR.RCon_tag, "enabled" = BR.on @@ -74,10 +71,7 @@ SMES.set_output(outputset) if(href_list["toggle_breaker"]) - var/obj/machinery/power/breakerbox/toggle = null - for(var/obj/machinery/power/breakerbox/breaker in known_breakers) - if(breaker.RCon_tag == href_list["toggle_breaker"]) - toggle = breaker + var/obj/machinery/power/breakerbox/toggle = SSmachinery.rcon_breaker_units_by_tag[href_list["toggle_breaker"]] if(toggle) if(toggle.update_locked) usr << "The breaker box was recently toggled. Please wait before toggling it again." @@ -98,20 +92,4 @@ if(!tag) return - for(var/obj/machinery/power/smes/buildable/S in known_SMESs) - if(S.RCon_tag == tag) - return S - -// Proc: FindDevices() -// Parameters: None -// Description: Refreshes local list of known devices. -/datum/nano_module/rcon/proc/FindDevices() - known_SMESs = new /list() - for(var/obj/machinery/power/smes/buildable/SMES in machines) - if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon) - known_SMESs.Add(SMES) - - known_breakers = new /list() - for(var/obj/machinery/power/breakerbox/breaker in machines) - if(breaker.RCon_tag != "NO_TAG") - known_breakers.Add(breaker) + return SSmachinery.rcon_smes_units_by_tag[tag] diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 4ecda08bfab..afdfad95865 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -1,3 +1,21 @@ +/datum/asset/nanoui/register() + var/list/nano_asset_dirs = list(\ + "nano/css/", + "nano/images/", + "nano/images/status_icons/", + "nano/js/", + "nano/templates/" + ) + + var/list/filenames = null + for (var/path in nano_asset_dirs) + filenames = flist(path) + for(var/filename in filenames) + if(copytext(filename, length(filename)) != "/") // filenames which end in "/" are actually directories, which we want to ignore + var/fullpath = path + filename + if(fexists(fullpath)) + register_asset(filename, fcopy_rsc(fullpath)) + // This is the window/UI manager for Nano UI // There should only ever be one (global) instance of nanomanger /datum/nanomanager @@ -8,31 +26,6 @@ // a list of asset filenames which are to be sent to the client on user logon var/list/asset_files = list() - /** - * Create a new nanomanager instance. - * This proc generates a list of assets which are to be sent to each client on connect - * - * @return /nanomanager new nanomanager object - */ -/datum/nanomanager/New() - var/list/nano_asset_dirs = list(\ - "nano/css/",\ - "nano/images/",\ - "nano/images/status_icons/",\ - "nano/js/",\ - "nano/templates/"\ - ) - - var/list/filenames = null - for (var/path in nano_asset_dirs) - filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, length(filename)) != "/") // filenames which end in "/" are actually directories, which we want to ignore - if(fexists(path + filename)) - asset_files.Add(fcopy_rsc(path + filename)) // add this file to asset_files for sending to clients when they connect - - return - /** * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data * @@ -256,17 +249,3 @@ oldMob.open_uis.Cut() return 1 // success - - /** - * Sends all nano assets to the client - * This is called on user login - * - * @param client /client The user's client - * - * @return nothing - */ - -/datum/nanomanager/proc/send_resources(client) - for(var/file in asset_files) - client << browse_rsc(file) // send the file to the client - diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm index e0e65eba6ce..120fdfeeee8 100644 --- a/code/modules/nano/nanomapgen.dm +++ b/code/modules/nano/nanomapgen.dm @@ -74,7 +74,7 @@ world.log << "NanoMapGen: [count] tiles done" sleep(1) - var/mapFilename = "nanomap_z[currentZ]-new.png" + var/mapFilename = "new_Aurora[currentZ]" world.log << "NanoMapGen: sending [mapFilename] to client" diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index b1dffe62962..9ac23dfde08 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -44,7 +44,7 @@ nanoui is used to open and update nano browser uis // show the map ui, this is used by the default layout var/show_map = 0 // the map z level to display - var/map_z_level = 1 + var/map_z_level = 3 // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on) var/list/initial_data[0] // set to 1 to update the ui automatically every master_controller tick @@ -185,7 +185,9 @@ nanoui is used to open and update nano browser uis "autoUpdateLayout" = auto_update_layout, "autoUpdateContent" = auto_update_content, "showMap" = show_map, + "mapName" = "Aurora", "mapZLevel" = map_z_level, + "mapZLevels" = map_levels, "user" = list("name" = user.name) ) return config_data @@ -488,8 +490,12 @@ nanoui is used to open and update nano browser uis map_update = 1 if(href_list["mapZLevel"]) - set_map_z_level(text2num(href_list["mapZLevel"])) - map_update = 1 + var/map_z = (text2num(href_list["mapZLevel"])) + if(map_z in map_levels) + set_map_z_level(map_z) + map_update = 1 + else + return if ((src_object && src_object.Topic(href, href_list, state)) || map_update) nanomanager.update_uis(src_object) // update all UIs attached to src_object @@ -502,7 +508,7 @@ nanoui is used to open and update nano browser uis * * @return nothing */ -/datum/nanoui/proc/process(update = 0) +/datum/nanoui/process(update = 0) if (!src_object || !user) close() return diff --git a/code/modules/orbit/orbit.dm b/code/modules/orbit/orbit.dm new file mode 100644 index 00000000000..79d3df233c3 --- /dev/null +++ b/code/modules/orbit/orbit.dm @@ -0,0 +1,100 @@ +/datum/orbit + var/atom/movable/orbiter + var/atom/orbiting + var/lock = TRUE + var/turf/lastloc + var/lastprocess + +/datum/orbit/New(_orbiter, _orbiting, _lock) + orbiter = _orbiter + orbiting = _orbiting + SSorbit.processing += src + if (!orbiting.orbiters) + orbiting.orbiters = list() + orbiting.orbiters += src + + if (orbiter.orbiting) + orbiter.stop_orbit() + orbiter.orbiting = src + Check() + lock = _lock + +//do not qdel directly, use stop_orbit on the orbiter. (This way the orbiter can bind to the orbit stopping) +/datum/orbit/Destroy(force = FALSE) + SSorbit.processing -= src + if (orbiter) + orbiter.orbiting = null + orbiter = null + if (orbiting) + if (orbiting.orbiters) + orbiting.orbiters -= src + if (!orbiting.orbiters.len)//we are the last orbit, delete the list + orbiting.orbiters = null + orbiting = null + return ..() + +/datum/orbit/proc/Check(turf/targetloc) + if (!orbiter) + qdel(src) + return + if (!orbiting) + orbiter.stop_orbit() + return + if (!orbiter.orbiting) //admin wants to stop the orbit. + orbiter.orbiting = src //set it back to us first + orbiter.stop_orbit() + lastprocess = world.time + if (!targetloc) + targetloc = get_turf(orbiting) + if (!targetloc || (!lock && orbiter.loc != lastloc && orbiter.loc != targetloc)) + orbiter.stop_orbit() + return + orbiter.loc = targetloc + lastloc = orbiter.loc + +/atom/movable/var/datum/orbit/orbiting = null +/atom/var/list/orbiters = null + +//A: atom to orbit +//radius: range to orbit at, radius of the circle formed by orbiting (in pixels) +//clockwise: whether you orbit clockwise or anti clockwise +//rotation_speed: how fast to rotate (how many ds should it take for a rotation to complete) +//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default. +//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts +//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts) + +/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE) + if (!istype(A)) + return + + new/datum/orbit(src, A, lockinorbit) + if (!orbiting) //something failed, and our orbit datum deleted itself + return + var/matrix/initial_transform = matrix(transform) + + //Head first! + if (pre_rotation) + var/matrix/M = matrix(transform) + var/pre_rot = 90 + if(!clockwise) + pre_rot = -90 + M.Turn(pre_rot) + transform = M + + var/matrix/shift = matrix(transform) + shift.Translate(0,radius) + transform = shift + + SpinAnimation(rotation_speed, -1, clockwise, rotation_segments) + + //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit + transform = initial_transform + +/atom/movable/proc/stop_orbit() + SpinAnimation(0,0) + qdel(orbiting) + +/atom/movable/Destroy(force = FALSE) + . = ..() + if (orbiting) + stop_orbit() diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 4a539bc0af0..2f084155ddb 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -23,8 +23,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 return vessel.add_reagent("blood",560) - spawn(1) - fixblood() + addtimer(CALLBACK(src, .proc/fixblood), 1) //Resets blood data /mob/living/carbon/human/proc/fixblood() diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index f70ad4ddf62..078832047a5 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -30,7 +30,7 @@ var/list/organ_cache = list() var/force_skintone = FALSE // If true, icon generation will skip is-robotic checks. Used for synthskin limbs. /obj/item/organ/Destroy() - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) if(!owner) return ..() @@ -92,7 +92,7 @@ var/list/organ_cache = list() return damage = max_damage status |= ORGAN_DEAD - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) if(dead_icon) icon_state = dead_icon if(owner && vital) @@ -105,7 +105,7 @@ var/list/organ_cache = list() if (QDELETED(src)) log_debug("QDELETED organ [DEBUG_REF(src)] had process() called!") - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) return //dead already, no need for more processing @@ -302,7 +302,7 @@ var/list/organ_cache = list() if(affected) affected.internal_organs -= src loc = get_turf(owner) - processing_objects |= src + START_PROCESSING(SSprocessing, src) rejecting = null if (!reagents) create_reagents(5) @@ -337,7 +337,7 @@ var/list/organ_cache = list() owner = target loc = owner - processing_objects -= src + STOP_PROCESSING(SSprocessing, src) target.internal_organs |= src affected.internal_organs |= src target.internal_organs_by_name[organ_tag] = src diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 8eb4e04c6bf..2ba2d78a9d5 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -170,8 +170,8 @@ if(owner) replaced(owner) sync_colour_to_human(owner) - spawn(1) - get_icon() + + addtimer(CALLBACK(src, .proc/get_icon), 1) if ((status & ORGAN_PLANT)) cannot_break = 1 diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 5917e9d8e1f..9fb96e1148a 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -9,8 +9,9 @@ var/global/list/limb_icon_cache = list() for(var/obj/item/organ/external/organ in contents) if(organ.children && organ.children.len) for(var/obj/item/organ/external/child in organ.children) - overlays += child.mob_icon - overlays += organ.mob_icon + add_overlay(child.mob_icon) + + overlays |= organ.mob_icon /obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human) s_tone = null @@ -54,7 +55,6 @@ var/global/list/limb_icon_cache = list() ..() /obj/item/organ/external/head/get_icon() - ..() overlays.Cut() if(!owner || !owner.species) diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index c2cd06e0d70..97d290b0cbd 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -249,7 +249,7 @@ obj/item/organ/vaurca/neuralsocket/process() src.air_contents.temperature = T20C src.distribute_pressure = ((pick(1.0,1.1,1.2,1.3)*ONE_ATMOSPHERE)*O2STANDARD) - processing_objects.Add(src) + START_PROCESSING(SSprocessing, src) var/mob/living/carbon/location = loc location.internal = src @@ -263,8 +263,8 @@ obj/item/organ/vaurca/neuralsocket/process() if(air_contents) qdel(air_contents) - processing_objects.Remove(src) - ..() + STOP_PROCESSING(SSprocessing, src) + return ..() /obj/item/organ/vaurca/preserve/examine(mob/user) . = ..(user, 0) diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm index 6b9b7975c9c..1af02f3c7e7 100644 --- a/code/modules/organs/subtypes/diona.dm +++ b/code/modules/organs/subtypes/diona.dm @@ -3,7 +3,7 @@ return 0 //This is a terrible hack and I should be ashamed. - var/datum/seed/diona = plant_controller.seeds["diona"] + var/datum/seed/diona = SSplants.seeds["diona"] if(!diona) return 0 diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index 5309b05096f..902b062b044 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -115,6 +115,8 @@ var/global/list/map_sectors = list() testing("Associated zlevel disappeared.") world.maxz-- + return QDEL_HINT_QUEUE + /obj/effect/map/sector/temporary/proc/can_die(var/mob/observer) testing("Checking if sector at [map_z] can die.") for(var/mob/M in player_list) diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm index 931ea68902a..939174324fa 100644 --- a/code/modules/overmap/ships/computers/engine_control.dm +++ b/code/modules/overmap/ships/computers/engine_control.dm @@ -8,7 +8,8 @@ var/list/engines = list() var/obj/effect/map/ship/linked -/obj/machinery/computer/engines/initialize() +/obj/machinery/computer/engines/Initialize() + . = ..() linked = map_sectors["[z]"] if (linked) if (!linked.eng_control) diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index b634f82f507..678897ada3a 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -10,7 +10,8 @@ var/dx //desitnation var/dy //coordinates -/obj/machinery/computer/helm/initialize() +/obj/machinery/computer/helm/Initialize() + . = ..() linked = map_sectors["[z]"] if (linked) if(!linked.nav_control) diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm index ea837740518..407cbabaf03 100644 --- a/code/modules/overmap/ships/computers/shuttle.dm +++ b/code/modules/overmap/ships/computers/shuttle.dm @@ -8,8 +8,8 @@ var/obj/effect/map/destination //current destination var/obj/effect/map/home //current destination -/obj/machinery/computer/shuttle_control/explore/initialize() - ..() +/obj/machinery/computer/shuttle_control/explore/Initialize() + . = ..() home = map_sectors["[z]"] shuttle_tag = "[shuttle_tag]-[z]" if(!shuttle_controller.shuttles[shuttle_tag]) @@ -18,7 +18,7 @@ shuttle.area_station = locate(landing_type) shuttle.area_offsite = shuttle.area_station shuttle_controller.shuttles[shuttle_tag] = shuttle - shuttle_controller.process_shuttles += shuttle + START_PROCESSING(shuttle_controller, shuttle) testing("Exploration shuttle '[shuttle_tag]' at zlevel [z] successfully added.") //Sets destination to new sector. Can be null. diff --git a/code/modules/overmap/ships/engines/thermal.dm b/code/modules/overmap/ships/engines/thermal.dm index b2f537bb963..1324f972138 100644 --- a/code/modules/overmap/ships/engines/thermal.dm +++ b/code/modules/overmap/ships/engines/thermal.dm @@ -54,11 +54,11 @@ var/datum/ship_engine/thermal/controller /obj/machinery/atmospherics/unary/engine/initialize() - ..() + . = ..() controller = new(src) /obj/machinery/atmospherics/unary/engine/Destroy() - ..() + . = ..() controller.die() /obj/machinery/atmospherics/unary/engine/proc/burn() @@ -96,4 +96,4 @@ nloc.hotspot_expose(temp,125) spawn(20) - loc = null \ No newline at end of file + loc = null diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm index 9b8557363da..d0761e40116 100644 --- a/code/modules/overmap/ships/ship.dm +++ b/code/modules/overmap/ships/ship.dm @@ -14,7 +14,8 @@ var/obj/machinery/computer/helm/nav_control var/obj/machinery/computer/engines/eng_control -/obj/effect/map/ship/initialize() +/obj/effect/map/ship/Initialize() + . = ..() for(var/obj/machinery/computer/engines/E in machines) if (E.z == map_z) eng_control = E diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 2253e049a5a..116b710d384 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -33,14 +33,16 @@ return /obj/item/weapon/clipboard/update_icon() - overlays.Cut() + cut_overlays() if(toppaper) - overlays += toppaper.icon_state - overlays += toppaper.overlays + add_overlay(toppaper.icon_state) + // The overlay list is a special internal format. + // We need to copy it into a normal list before we can give it to SSoverlay. + var/list/paper_overlays = toppaper.overlays.Copy() + add_overlay(paper_overlays) if(haspen) - overlays += "clipboard_pen" - overlays += "clipboard_over" - return + add_overlay("clipboard_pen") + add_overlay("clipboard_over") /obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 322456dc9fe..5d1d11b8930 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -27,7 +27,8 @@ icon_state = "tallcabinet" -/obj/structure/filingcabinet/initialize() +/obj/structure/filingcabinet/Initialize() + . = ..() for(var/obj/item/I in loc) if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo) || istype(I, /obj/item/weapon/paper_bundle)) I.loc = src diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index a14ef11720d..c56ade5e345 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -22,9 +22,9 @@ icon_state = "folder_white" /obj/item/weapon/folder/update_icon() - overlays.Cut() + cut_overlays() if(contents.len) - overlays += "folder_paper" + add_overlay("folder_paper") return /obj/item/weapon/folder/attackby(obj/item/weapon/W as obj, mob/user as mob) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 9ea20407159..dff70cff085 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -36,14 +36,16 @@ var/const/signfont = "Times New Roman" var/const/crayonfont = "Comic Sans MS" -/obj/item/weapon/paper/New(loc, text,title) - ..(loc) - set_content(title, text ? text : info) - -// needed for subtyped papers with pre-defined content -/obj/item/weapon/paper/New() - ..() - update_icon() +/obj/item/weapon/paper/Initialize(mapload, text, title) + . = ..() + if (text || title) + set_content(title, text ? text : info) + else + updateinfolinks() + if (mapload) + update_icon() + else + addtimer(CALLBACK(src, /atom/.proc/update_icon), 1) /obj/item/weapon/paper/proc/set_content(title, text) if(title) @@ -53,7 +55,7 @@ info = parsepencode(text) else info = "" - + update_icon() update_space(info) updateinfolinks() @@ -68,7 +70,7 @@ info = "" update_icon() - update_space() + update_space(info) updateinfolinks() /obj/item/weapon/paper/update_icon() @@ -134,7 +136,7 @@ if (icon_state == "paper_plane") user.show_message(span("alert", "The paper is already folded into a plane.")) return - user.visible_message(span("notice", "\The [user] carefully folds \the [src] into a plane."), + user.visible_message(span("notice", "\The [user] carefully folds \the [src] into a plane."), span("notice", "You carefully fold \the [src] into a plane."), "You hear paper rustling.") icon_state = "paper_plane" throw_range = 8 @@ -547,4 +549,4 @@ Please note: Cell timers will \[b\]NOT\[/b\] function without a valid incident f ..() /obj/item/weapon/paper/sentencing/update_icon() - return + return \ No newline at end of file diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 88b13259b0a..0ea03104021 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -103,7 +103,7 @@ if(!paperamount) return paperamount-- - return getFromPool(/obj/item/weapon/shreddedp, get_turf(src)) + return new /obj/item/weapon/shreddedp(get_turf(src)) /obj/machinery/papershredder/update_icon() icon_state = "papershredder[max(0,min(5,Floor(paperamount/2)))]" @@ -133,7 +133,7 @@ var/mob/living/M = loc if(istype(M)) M.drop_from_inventory(src) - getFromPool(/obj/effect/decal/cleanable/ash,get_turf(src)) + new /obj/effect/decal/cleanable/ash(get_turf(src)) qdel(src) /obj/item/weapon/shreddedp diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 2ed4d447265..6a5aec5517b 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -46,9 +46,10 @@ for(var/obj/machinery/am_shielding/AMS in linked_cores) AMS.control_unit = null qdel(AMS) + qdel(fueljar) fueljar = null - ..() + return ..() /obj/machinery/power/am_control_unit/process() @@ -266,7 +267,7 @@ stored_core_stability = 0 for(var/thing in linked_cores) var/obj/machinery/am_shielding/AMS = thing - if (!AMS || AMS.gcDestroyed) + if (QDELETED(AMS)) continue stored_core_stability += AMS.stability @@ -384,3 +385,4 @@ updateDialog() return 1 + diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index ece15f20691..f3d02115732 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -63,7 +63,7 @@ proc/cardinalrange(var/center) shutdown_core() visible_message("\The [src.name] melts!") //Might want to have it leave a mess on the floor but no sprites for now - ..() + return ..() /obj/machinery/am_shielding/proc/controllerscan(var/priorscan = 0) //Make sure we are the only one here diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index fb81b76cbcb..00f2ac71380 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -24,9 +24,6 @@ #define APC_UPOVERLAY_LOCKED 4096 #define APC_UPOVERLAY_OPERATING 8192 - -#define APC_UPDATE_ICON_COOLDOWN 100 // 10 seconds - // the Area Power Controller (APC), formerly Power Distribution Unit (PDU) // one per area, needs wire conection to power network through a terminal @@ -154,8 +151,8 @@ return cell.drain_power(drain_check, surge, amount) -/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) - ..() +/obj/machinery/power/apc/Initialize(mapload, var/ndir, var/building=0) + . = ..() wires = new(src) // offset 24 pixels in direction of dir @@ -168,7 +165,7 @@ pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24) pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0 if (building==0) - init() + init(mapload) else area = get_area(src) area.apc = src @@ -194,6 +191,8 @@ if(cell) cell.forceMove(loc) cell = null + + QDEL_NULL(spark_system) QDEL_NULL(spark_system) @@ -213,7 +212,7 @@ terminal.set_dir(tdir) terminal.master = src -/obj/machinery/power/apc/proc/init() +/obj/machinery/power/apc/proc/init(mapload) has_electronics = 2 //installed and secured // is starting with a power cell installed, create it and set its charge level if(cell_type) @@ -234,8 +233,8 @@ make_terminal() - spawn(5) - src.update() + if (!mapload) + addtimer(CALLBACK(src, .proc/update), 5, TIMER_UNIQUE) /obj/machinery/power/apc/examine(mob/user) if(..(user, 1)) @@ -327,19 +326,18 @@ if(!(update_state & UPDATE_ALLGOOD)) if(overlays.len) - overlays = 0 + cut_overlays() return if(update & 2) - if(overlays.len) - overlays.len = 0 + cut_overlays() if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD) - overlays += status_overlays_lock[locked+1] - overlays += status_overlays_charging[charging+1] + add_overlay(status_overlays_lock[locked+1]) + add_overlay(status_overlays_charging[charging+1]) if(operating) - overlays += status_overlays_equipment[equipment+1] - overlays += status_overlays_lighting[lighting+1] - overlays += status_overlays_environ[environ+1] + add_overlay(status_overlays_equipment[equipment+1]) + add_overlay(status_overlays_lighting[lighting+1]) + add_overlay(status_overlays_environ[environ+1]) if(update & 3) if(update_state & UPDATE_BLUESCREEN) @@ -427,16 +425,6 @@ results += 2 return results -// Used in process so it doesn't update the icon too much -/obj/machinery/power/apc/proc/queue_icon_update() - - if(!updating_icon) - updating_icon = 1 - // Start the update - spawn(APC_UPDATE_ICON_COOLDOWN) - update_icon() - updating_icon = 0 - //attack with an item - open/close cover, insert cell, or (un)lock interface /obj/machinery/power/apc/attackby(obj/item/W, mob/user) @@ -1244,12 +1232,14 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) update() update_icon() - spawn(600) - update_channels() - update() - update_icon() + addtimer(CALLBACK(src, .proc/post_emp_act), 600) ..() +/obj/machinery/power/apc/proc/post_emp_act() + update_channels() + update() + queue_icon_update() + /obj/machinery/power/apc/ex_act(severity) switch(severity) @@ -1300,6 +1290,12 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) L.broken() sleep(1) +/obj/machinery/power/apc/proc/flicker_all() + var/offset = 0 + for (var/obj/machinery/light/L in area) + addtimer(CALLBACK(L, /obj/machinery/light/.proc/flicker), offset) + offset += rand(5, 10) + /obj/machinery/power/apc/proc/toggle_nightlight(var/force = null) for (var/obj/machinery/light/L in area.contents) if (force == "on") @@ -1332,5 +1328,3 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) locked = 1 update_icon() return 1 - -#undef APC_UPDATE_ICON_COOLDOWN diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index a70b19421ec..1021179c0bd 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -47,30 +47,17 @@ /obj/machinery/power/smes/batteryrack/update_icon() - overlays.Cut() + cut_overlays() if(stat & BROKEN) return - if(!br_cache) - br_cache = list() - br_cache.len = 7 - br_cache[1] = image('icons/obj/power.dmi', "gsmes_outputting") - br_cache[2] = image('icons/obj/power.dmi', "gsmes_charging") - br_cache[3] = image('icons/obj/power.dmi', "gsmes_overcharge") - br_cache[4] = image('icons/obj/power.dmi', "gsmes_og1") - br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2") - br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3") - br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4") - if (output_attempt) - overlays += br_cache[1] + add_overlay("gsmes_outputting") if(inputting) - overlays += br_cache[2] + add_overlay("gsmes_charging") var/clevel = chargedisplay() if(clevel>0) - overlays += br_cache[3+clevel] - return - + add_overlay("gsmes_og[clevel]") /obj/machinery/power/smes/batteryrack/chargedisplay() return round(4 * charge/(capacity ? capacity : 5e6)) @@ -130,20 +117,19 @@ /obj/machinery/power/smes/batteryrack/makeshift/update_icon() - overlays.Cut() + cut_overlays() if(stat & BROKEN) return if (output_attempt) - overlays += br_cache[1] + add_overlay("gsmes_outputting") if(inputting) - overlays += br_cache[2] + add_overlay("gsmes_charging") if (overcharge_percent > 100) - overlays += br_cache[3] + add_overlay("gsmes_overcharge") else var/clevel = chargedisplay() if(clevel>0) - overlays += br_cache[3+clevel] - return + add_overlay("gsmes_og[clevel]") //This mess of if-elses and magic numbers handles what happens if the engies don't pay attention and let it eat too much charge //What happens depends on how much capacity has the ghetto smes and how much it is overcharged. diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 4f842d82b67..ccda2970859 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -20,17 +20,22 @@ var/RCon_tag = "NO_TAG" var/update_locked = 0 +/obj/machinery/power/breakerbox/Initialize() + LAZYADD(SSmachinery.breaker_boxes, src) + return ..() + /obj/machinery/power/breakerbox/Destroy() - ..() - for(var/datum/nano_module/rcon/R in world) - R.FindDevices() + LAZYREMOVE(SSmachinery.breaker_boxes, src) + SSmachinery.queue_rcon_update() + return ..() /obj/machinery/power/breakerbox/activated icon_state = "bbox_on" // Enabled on server startup. Used in substations to keep them in bypass mode. -/obj/machinery/power/breakerbox/activated/initialize() - set_state(1) +/obj/machinery/power/breakerbox/activated/Initialize() + . = ..() + set_state(1) /obj/machinery/power/breakerbox/examine(mob/user) ..() @@ -54,10 +59,12 @@ set_state(!on) user << "Update Completed. New setting:[on ? "on": "off"]" update_locked = 1 - spawn(600) - update_locked = 0 + addtimer(CALLBACK(src, .proc/reset_locked), 600) busy = 0 +/obj/machinery/power/breakerbox/proc/reset_locked() + update_locked = 0 + /obj/machinery/power/breakerbox/attack_hand(mob/user) if(update_locked) @@ -78,8 +85,7 @@ "[user.name] [on ? "enabled" : "disabled"] the breaker box!",\ "You [on ? "enabled" : "disabled"] the breaker box!") update_locked = 1 - spawn(600) - update_locked = 0 + addtimer(CALLBACK(src, .proc/reset_locked), 600) busy = 0 /obj/machinery/power/breakerbox/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) @@ -88,6 +94,7 @@ if(newtag) RCon_tag = newtag user << "You changed the RCON tag to: [newtag]" + SSmachinery.queue_rcon_update() /obj/machinery/power/breakerbox/proc/set_state(var/state) on = state @@ -126,8 +133,4 @@ if(!update_locked) set_state(!on) update_locked = 1 - spawn(600) - update_locked = 0 - -/obj/machinery/power/breakerbox/process() - return 1 + addtimer(CALLBACK(src, .proc/reset_locked), 600) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 50dba504ebb..5182aac20f3 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -78,7 +78,7 @@ var/list/possible_cable_coil_colours = list( color = COLOR_WHITE /obj/structure/cable/New() - ..() + . = ..() // ensure d1 & d2 reflect the icon_state for entering and exiting cable @@ -97,7 +97,7 @@ var/list/possible_cable_coil_colours = list( if(powernet) cut_cable_from_powernet() // update the powernets cable_list -= src //remove it from global cable list - ..() // then go ahead and delete the cable + return ..() // then go ahead and delete the cable /////////////////////////////////// // General procedures @@ -482,8 +482,8 @@ obj/structure/cable/proc/cableColor(var/colorC) uses_charge = 1 charge_costs = list(1) -/obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/param_color = null) - ..() +/obj/item/stack/cable_coil/Initialize(mapload, length = MAXCOIL, var/param_color = null) + . = ..() src.amount = length if (param_color) // It should be red by default, so only recolor it if parameter was specified. color = param_color diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 71dac77f037..53ca584fb55 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -2,15 +2,11 @@ // charge from 0 to 100% // fits in APC to provide backup power -/obj/item/weapon/cell/New() - ..() +/obj/item/weapon/cell/Initialize() + . = ..() charge = maxcharge update_icon() -/obj/item/weapon/cell/initialize() - ..() - update_icon() - /obj/item/weapon/cell/Created() //Newly built cells spawn with no charge to prevent power exploits charge = 0 @@ -50,7 +46,7 @@ // use power from a cell, returns the amount actually used /obj/item/weapon/cell/proc/use(var/amount) - if (gcDestroyed) + if (QDELING(src)) return 0 if(rigged && amount > 0) @@ -70,7 +66,7 @@ // recharge the cell /obj/item/weapon/cell/proc/give(var/amount) - if (gcDestroyed) + if (QDELING(src)) return 0 if(rigged && amount > 0) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index e8429fa0c20..8069e575604 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -25,8 +25,8 @@ var/datum/effect_system/sparks/spark_system -/obj/machinery/power/generator/New() - ..() +/obj/machinery/power/generator/Initialize() + . = ..() desc = initial(desc) + " Rated for [round(max_power/1000)] kW." var/dirs if (dir == NORTH || dir == SOUTH) @@ -35,8 +35,13 @@ dirs = list(NORTH,SOUTH) spark_system = bind_spark(src, 3, dirs) - spawn(1) - reconnect() + reconnect() + +/obj/machinery/power/generator/Destroy() + QDEL_NULL(spark_system) + circ1 = null + circ2 = null + return ..() //generators connect in dir and reverse_dir(dir) directions //mnemonic to determine circulator/generator directions: the cirulators orbit clockwise around the generator @@ -65,13 +70,9 @@ circ2 = null /obj/machinery/power/generator/proc/updateicon() - if(stat & (NOPOWER|BROKEN)) - overlays.Cut() - else - overlays.Cut() - - if(lastgenlev != 0) - overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]") + cut_overlays() + if(!(stat & (NOPOWER|BROKEN)) && lastgenlev) + add_overlay("teg-op[lastgenlev]") /obj/machinery/power/generator/process() if(!circ1 || !circ2 || !anchored || stat & (BROKEN|NOPOWER)) diff --git a/code/modules/power/generator_type2.dm b/code/modules/power/generator_type2.dm index 7ca407ac9f3..6153fc7c154 100644 --- a/code/modules/power/generator_type2.dm +++ b/code/modules/power/generator_type2.dm @@ -13,14 +13,13 @@ var/lastgenlev = -1 -/obj/machinery/power/generator_type2/New() - ..() - spawn(5) - input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90)) - input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90)) - if(!input1 || !input2) - stat |= BROKEN - updateicon() +/obj/machinery/power/generator_type2/Initialize() + . = ..() + input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90)) + input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90)) + if(!input1 || !input2) + stat |= BROKEN + updateicon() /obj/machinery/power/generator_type2/proc/updateicon() @@ -140,4 +139,4 @@ /obj/machinery/power/generator_type2/power_change() ..() - updateicon() \ No newline at end of file + updateicon() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index dbd2bcf3b65..0a8a7864e7e 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -177,7 +177,7 @@ /obj/machinery/light/small/emergency brightness_range = 6 brightness_power = 1 - brightness_color = "#FF0000" + brightness_color = "#FA8282"//"#FF0000" /obj/machinery/light/small/red brightness_range = 2.5 @@ -192,41 +192,38 @@ brightness_power = 4 supports_nightmode = FALSE -/obj/machinery/light/built/New() +/obj/machinery/light/built/Initialize() + . = ..() status = LIGHT_EMPTY update(0) - ..() -/obj/machinery/light/small/built/New() +/obj/machinery/light/small/built/Initialize() + . = ..() status = LIGHT_EMPTY update(0) - ..() // create a new lighting fixture -/obj/machinery/light/New() - ..() - +/obj/machinery/light/Initialize(mapload) + . = ..() spark_system = bind_spark(src, 3) + on = has_power() - spawn(2) - on = has_power() + switch(fitting) + if("tube") + if(mapload && prob(2)) + broken(1) + if("bulb") + if(mapload && prob(5)) + broken(1) - switch(fitting) - if("tube") - if(prob(2)) - broken(1) - if("bulb") - if(prob(5)) - broken(1) - spawn(1) - update(0) + update(0) /obj/machinery/light/Destroy() var/area/A = get_area(src) if(A) on = 0 -// A.update_lights() - ..() + QDEL_NULL(spark_system) + return ..() /obj/machinery/light/update_icon() switch(status) // set icon_states @@ -379,7 +376,7 @@ for(var/mob/M in viewers(src)) if(M == user) continue - M.show_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2) + M.show_message("[user.name] smashes the light!", 3, "You hear a tinkle of breaking glass", 2) if(on && (W.flags & CONDUCT)) //if(!user.mutations & COLD_RESISTANCE) if (prob(12)) @@ -426,19 +423,29 @@ var/area/A = get_area(src) return A && A.lightswitch && (!A.requires_power || A.power_light) -/obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) - if(flickering) return - flickering = 1 - spawn(0) - if(on && status == LIGHT_OK) - for(var/i = 0; i < amount; i++) - if(status != LIGHT_OK) break - on = !on - update(0) - sleep(rand(5, 15)) - on = (status == LIGHT_OK) - update(0) - flickering = 0 +/obj/machinery/light/proc/flicker(amount = rand(10,20)) + set waitfor = FALSE + if (flickering || !on || status != LIGHT_OK) + return + + flickering = TRUE + var/offset = 1 + var/thecallback = CALLBACK(src, .proc/handle_flicker) + for (var/i = 0; i < amount; i++) + addtimer(thecallback, offset) + offset += rand(5, 15) + + addtimer(CALLBACK(src, .proc/end_flicker), offset) + +/obj/machinery/light/proc/handle_flicker() + if (status == LIGHT_OK) + on = !on + update(FALSE) + +/obj/machinery/light/proc/end_flicker() + on = (status == LIGHT_OK) + update(FALSE) + flickering = FALSE // ai attack - make lights flicker, because why not @@ -576,8 +583,10 @@ // called when area power state changes /obj/machinery/light/power_change() - spawn(10) - seton(has_power()) + addtimer(CALLBACK(src, .proc/handle_power_change), 10, TIMER_UNIQUE) + +/obj/machinery/light/proc/handle_power_change() + seton(has_power()) // called when on fire @@ -588,13 +597,13 @@ // explode the light /obj/machinery/light/proc/explode() + set waitfor = FALSE var/turf/T = get_turf(src.loc) - spawn(0) - broken() // break it first to give a warning - sleep(2) - explosion(T, 0, 0, 2, 2) - sleep(1) - qdel(src) + broken() // break it first to give a warning + sleep(2) + explosion(T, 0, 0, 2, 2) + sleep(1) + qdel(src) // Sets the light being output by a light tube or other static source // Non or negative inputs will reset to default diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 400e7281b6f..b1caf911a7d 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -109,13 +109,8 @@ var/temperature = 0 //The current temperature var/overheating = 0 //if this gets high enough the generator explodes -/obj/machinery/power/port_gen/pacman/initialize() - ..() - if(anchored) - connect_to_network() - -/obj/machinery/power/port_gen/pacman/New() - ..() +/obj/machinery/power/port_gen/pacman/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) @@ -125,6 +120,9 @@ component_parts += new board_path(src) RefreshParts() + if(anchored) + connect_to_network() + /obj/machinery/power/port_gen/pacman/Destroy() DropFuel() return ..() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index acae27083aa..b9d135840f7 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -19,7 +19,7 @@ disconnect_from_network() disconnect_terminal() - ..() + return ..() /////////////////////////////// // General procedures @@ -233,9 +233,6 @@ . += C return . -/hook/startup/proc/buildPowernets() - return makepowernets() - // rebuild all power networks from scratch - only called at world creation or by the admin verb /proc/makepowernets() for(var/datum/powernet/PN in powernets) diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index 7dcc3a02433..6cc1976128c 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -22,8 +22,8 @@ // Proc: New() // Parameters: None // Description: Automatically assigns name according to ID tag. -/obj/machinery/power/sensor/New() - ..() +/obj/machinery/power/sensor/Initialize() + . = ..() auto_set_name() // Proc: auto_set_name() @@ -167,7 +167,7 @@ APC_entry["total_load"] = reading_to_text(A.lastused_total) // Hopefully removes those goddamn \improper s which are screwing up the UI var/N = A.area.name - if(findtext(N, "ÿ")) + if(findtext(N, "�")) N = copytext(N, 3) APC_entry["name"] = N // Add data into main list of APC data. diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm index e2d83e6176e..8169b1fbdd8 100644 --- a/code/modules/power/sensors/sensor_monitoring.dm +++ b/code/modules/power/sensors/sensor_monitoring.dm @@ -41,8 +41,8 @@ ..() // On creation automatically connects to active sensors. This is delayed to ensure sensors already exist. -/obj/machinery/computer/power_monitor/New() - ..() +/obj/machinery/computer/power_monitor/Initialize() + . = ..() power_monitor = new(src) // On user click opens the UI of this computer. diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index dee15d9f140..1cb337ff085 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -23,7 +23,7 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/Destroy() rad_collectors -= src - ..() + return ..() /obj/machinery/power/rad_collector/process() //so that we don't zero out the meter if the SM is processed first. @@ -134,13 +134,13 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/proc/update_icons() - overlays.Cut() + cut_overlays() if(P) - overlays += image('icons/obj/singularity.dmi', "ptank") + add_overlay("ptank") if(stat & (NOPOWER|BROKEN)) return if(active) - overlays += image('icons/obj/singularity.dmi', "on") + add_overlay("on") /obj/machinery/power/rad_collector/proc/toggle_power() diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 751e2cf1578..7f0e54f0a22 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -20,7 +20,7 @@ FG1.cleanup() if(FG2 && !FG2.clean_up) FG2.cleanup() - ..() + return ..() /obj/machinery/containment_field/attack_hand(mob/user as mob) if(get_dist(src, user) > 1) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 9b3b714f87c..5ec597f730c 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -29,10 +29,6 @@ var/datum/effect_system/sparks/spark_system -/obj/machinery/power/emitter/New() - ..() - spark_system = bind_spark(src, 5, alldirs) - /obj/machinery/power/emitter/Destroy() QDEL_NULL(spark_system) return ..() @@ -48,8 +44,9 @@ src.set_dir(turn(src.dir, 90)) return 1 -/obj/machinery/power/emitter/initialize() - ..() +/obj/machinery/power/emitter/Initialize() + . = ..() + spark_system = bind_spark(src, 5, alldirs) if(state == 2 && anchored) connect_to_network() if(_wifi_id) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 6368e7348d6..e0109ff7aea 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -38,22 +38,19 @@ field_generator power level display /obj/machinery/field_generator/update_icon() - overlays.Cut() + cut_overlays() if(!active) if(warming_up) - overlays += "+a[warming_up]" + add_overlay("+a[warming_up]") if(fields.len) - overlays += "+on" + add_overlay("+on") // Power level indicator // Scale % power to % num_power_levels and truncate value var/level = round(num_power_levels * power / field_generator_max_power) // Clamp between 0 and num_power_levels for out of range power values level = between(0, level, num_power_levels) if(level) - overlays += "+p[level]" - - return - + add_overlay("+p[level]") /obj/machinery/field_generator/New() ..() @@ -133,7 +130,7 @@ field_generator power level display user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \ "You start to weld the [src] to the floor.", \ "You hear welding") - if (do_after(user,20)) + if (do_after(user,20, act_target = src)) if(!src || !WT.isOn()) return state = 2 user << "You weld the field generator to the floor." @@ -145,7 +142,7 @@ field_generator power level display user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \ "You start to cut the [src] free from the floor.", \ "You hear welding") - if (do_after(user,20)) + if (do_after(user,20, act_target = src)) if(!src || !WT.isOn()) return state = 1 user << "You cut the [src] free from the floor." @@ -168,14 +165,11 @@ field_generator power level display /obj/machinery/field_generator/Destroy() src.cleanup() - ..() - - + return ..() /obj/machinery/field_generator/proc/turn_off() active = 0 - spawn(1) - src.cleanup() + addtimer(CALLBACK(src, .proc/cleanup), 1) update_icon() /obj/machinery/field_generator/proc/turn_on() @@ -190,7 +184,6 @@ field_generator power level display start_fields() update_icon() - /obj/machinery/field_generator/proc/calc_power() if(Varpower) return 1 @@ -210,9 +203,7 @@ field_generator power level display if(draw_power(round(power_draw)) >= power_draw) return 1 else - for(var/mob/M in viewers(src)) - M.show_message("\red \The [src] shuts down!") - turn_off() + visible_message(span("alert", "\The [src] shuts down!")) investigate_log("ran out of power and deactivated","singulo") src.power = 0 return 0 @@ -242,32 +233,27 @@ field_generator power level display if(!src.state == 2 || !anchored) turn_off() return - spawn(1) - setup_field(1) - spawn(2) - setup_field(2) - spawn(3) - setup_field(4) - spawn(4) - setup_field(8) + addtimer(CALLBACK(src, .proc/setup_field, 1), 1) + addtimer(CALLBACK(src, .proc/setup_field, 2), 2) + addtimer(CALLBACK(src, .proc/setup_field, 4), 3) + addtimer(CALLBACK(src, .proc/setup_field, 8), 4) src.active = 2 - /obj/machinery/field_generator/proc/setup_field(var/NSEW) var/turf/T = src.loc var/obj/machinery/field_generator/G var/steps = 0 - if(!NSEW)//Make sure its ran right + if(!NSEW) //Make sure its ran right return for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator T = get_step(T, NSEW) - if(T.density)//We cant shoot a field though this + if(T.density) //We cant shoot a field though this return 0 for(var/atom/A in T.contents) if(ismob(A)) continue if(!istype(A,/obj/machinery/field_generator)) - if((istype(A,/obj/machinery/door)||istype(A,/obj/machinery/the_singularitygen))&&(A.density)) + if((istype(A,/obj/machinery/door) || istype(A,/obj/machinery/the_singularitygen)) && (A.density)) return 0 steps += 1 G = locate(/obj/machinery/field_generator) in T @@ -308,16 +294,15 @@ field_generator power level display if(!listcheck) G.connected_gens.Add(src) - /obj/machinery/field_generator/proc/cleanup() clean_up = 1 for (var/obj/machinery/containment_field/F in fields) - if (isnull(F)) + if (QDELETED(F)) continue qdel(F) fields = list() for(var/obj/machinery/field_generator/FG in connected_gens) - if (isnull(FG)) + if (QDELETED(FG)) continue FG.connected_gens.Remove(src) if(!FG.clean_up)//Makes the other gens clean up as well diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index f98df8a06ef..651a1fec58b 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -76,7 +76,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin construction_state = 0 if(master) master.part_scan() - ..() + return ..() /obj/structure/particle_accelerator/end_cap name = "Alpha Particle Generation Array" diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 456be9ed7c2..049832a1068 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -60,7 +60,7 @@ /obj/machinery/particle_accelerator/control_box/update_icon() if(active) - icon_state = "[reference]p1" + icon_state = "[reference]p[strength]" else if(use_power) if(assembled) @@ -115,6 +115,8 @@ part.strength = strength part.update_icon() + update_icon() + /obj/machinery/particle_accelerator/control_box/proc/add_strength(var/s) if(assembled) strength++ diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 7b70b10b5b5..b78d406dd96 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -35,19 +35,18 @@ energy = starting_energy if (temp) - spawn (temp) - qdel(src) + QDEL_IN(src, temp) ..() - processing_objects += src + START_PROCESSING(SScalamity, src) for(var/obj/machinery/power/singularity_beacon/singubeacon in machines) if(singubeacon.active) target = singubeacon break /obj/singularity/Destroy() - processing_objects -= src - ..() + STOP_PROCESSING(SScalamity, src) + return ..() /obj/singularity/attack_hand(mob/user as mob) consume(user) @@ -267,19 +266,22 @@ return 1 /obj/singularity/proc/eat() - for(var/atom/X in orange(grav_pull, src)) - var/dist = get_dist(X, src) - var/obj/singularity/S = src - if(!istype(src)) - return - if(dist > consume_range) - X.singularity_pull(S, current_size) - else if(dist <= consume_range) - consume(X) - - //for (var/turf/T in trange(grav_pull, src)) //TODO: Create a similar trange for orange to prevent snowflake of self check. - // consume(T) - + for(var/tile in spiral_range_turfs(grav_pull, src)) + var/turf/T = tile + if(!T || !isturf(loc)) + continue + if(get_dist(T, src) > consume_range) + T.singularity_pull(src, current_size) + else + consume(T) + for(var/thing in T) + if(isturf(loc) && thing != src) + var/atom/movable/X = thing + if(get_dist(X, src) > consume_range) + X.singularity_pull(src, current_size) + else + consume(X) + CHECK_TICK return /obj/singularity/proc/consume(const/atom/A) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index aed7576af13..e3058818ace 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -5,6 +5,19 @@ #define SMESMAXCHARGELEVEL 250000 #define SMESMAXOUTPUT 250000 +//Cache defines +#define SMES_CLEVEL_1 1 +#define SMES_CLEVEL_2 2 +#define SMES_CLEVEL_3 3 +#define SMES_CLEVEL_4 4 +#define SMES_CLEVEL_5 5 +#define SMES_OUTPUTTING 6 +#define SMES_OUTPUT_ATTEMPT 7 +#define SMES_NOT_OUTPUTTING 8 +#define SMES_INPUTTING 9 +#define SMES_INPUT_ATTEMPT 10 +#define SMES_INPUT_MAX 11 + /obj/machinery/power/smes name = "power storage unit" desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." @@ -52,6 +65,8 @@ var/datum/effect_system/sparks/big_spark var/datum/effect_system/sparks/small_spark + var/static/list/smesImageCache + /obj/machinery/power/smes/drain_power(var/drain_check, var/surge, var/amount = 0) if(drain_check) @@ -62,36 +77,30 @@ return smes_amt / SMESRATE -/obj/machinery/power/smes/New() - ..() +/obj/machinery/power/smes/Initialize() + . = ..() big_spark = bind_spark(src, 5, alldirs) small_spark = bind_spark(src, 3) - spawn(5) - if(!powernet) - connect_to_network() + if(!powernet) + connect_to_network() - dir_loop: - for(var/d in cardinal) - var/turf/T = get_step(src, d) - for(var/obj/machinery/power/terminal/term in T) - if(term && term.dir == turn(d, 180)) - terminal = term - break dir_loop - if(!terminal) - stat |= BROKEN - return - terminal.master = src - if(!terminal.powernet) - terminal.connect_to_network() - update_icon() + dir_loop: + for(var/d in cardinal) + var/turf/T = get_step(src, d) + for(var/obj/machinery/power/terminal/term in T) + if(term && term.dir == turn(d, 180)) + terminal = term + break dir_loop + if(!terminal) + stat |= BROKEN + return + terminal.master = src + if(!terminal.powernet) + terminal.connect_to_network() + update_icon() - - - - if(!should_be_mapped) - warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z") - - return + if(!should_be_mapped) + warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z") /obj/machinery/power/smes/add_avail(var/amount) if(..(amount)) @@ -108,28 +117,27 @@ return 0 /obj/machinery/power/smes/update_icon() - overlays.Cut() - if(stat & BROKEN) return - - overlays += image('icons/obj/power.dmi', "smes-op[outputting]") + cut_overlays() + if(stat & BROKEN) + return if(inputting == 2) - overlays += image('icons/obj/power.dmi', "smes-oc2") + add_overlay("smes-oc2") else if (inputting == 1) - overlays += image('icons/obj/power.dmi', "smes-oc1") + add_overlay("smes-oc1") else if (input_attempt) - overlays += image('icons/obj/power.dmi', "smes-oc0") + add_overlay("smes-oc0") var/clevel = chargedisplay() if(clevel) - overlays += image('icons/obj/power.dmi', "smes-og[clevel]") + add_overlay("smes-og[clevel]") if(outputting == 2) - overlays += image('icons/obj/power.dmi', "smes-op2") + add_overlay("smes-op2") else if (outputting == 1) - overlays += image('icons/obj/power.dmi', "smes-op1") + add_overlay("smes-op1") else - overlays += image('icons/obj/power.dmi', "smes-op0") + add_overlay("smes-op0") /obj/machinery/power/smes/proc/chargedisplay() return round(5.5*charge/(capacity ? capacity : 5e6)) @@ -454,3 +462,15 @@ /obj/machinery/power/smes/magical/process() charge = 5000000 ..() + +#undef SMES_CLEVEL_1 +#undef SMES_CLEVEL_2 +#undef SMES_CLEVEL_3 +#undef SMES_CLEVEL_4 +#undef SMES_CLEVEL_5 +#undef SMES_OUTPUTTING +#undef SMES_OUTPUT_ATTEMPT +#undef SMES_NOT_OUTPUTTING +#undef SMES_INPUTTING +#undef SMES_INPUT_ATTEMPT +#undef SMES_INPUT_MAX diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 40e469eec5c..bc080e4715f 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -41,25 +41,21 @@ // These are used on individual outposts as backup should power line be cut, or engineering outpost lost power. // 1M Charge, 150K I/O -/obj/machinery/power/smes/buildable/outpost_substation/New() - ..(0) +/obj/machinery/power/smes/buildable/outpost_substation/Initialize() + . = ..() component_parts += new /obj/item/weapon/smes_coil/weak(src) recalc_coils() // This one is pre-installed on engineering shuttle. Allows rapid charging/discharging for easier transport of power to outpost // 11M Charge, 2.5M I/O -/obj/machinery/power/smes/buildable/power_shuttle/New() - ..(0) +/obj/machinery/power/smes/buildable/power_shuttle/Initialize() + . = ..() component_parts += new /obj/item/weapon/smes_coil/super_io(src) component_parts += new /obj/item/weapon/smes_coil/super_io(src) component_parts += new /obj/item/weapon/smes_coil(src) recalc_coils() - - - - // END SMES SUBTYPES // SMES itself @@ -78,8 +74,7 @@ /obj/machinery/power/smes/buildable/Destroy() qdel(wires) wires = null - for(var/datum/nano_module/rcon/R in world) - R.FindDevices() + SSmachinery.queue_rcon_update() return ..() // Proc: process() @@ -122,6 +117,9 @@ for(var/i = 1, i <= cur_coils, i++) component_parts += new /obj/item/weapon/smes_coil(src) recalc_coils() + + SSmachinery.queue_rcon_update() + ..() // Proc: attack_hand() @@ -289,8 +287,8 @@ // Description: Allows us to use special icon overlay for critical SMESs /obj/machinery/power/smes/buildable/update_icon() if (failing) - overlays.Cut() - overlays += image('icons/obj/power.dmi', "smes-crit") + cut_overlays() + add_overlay("smes-crit") else ..() @@ -313,6 +311,7 @@ if(newtag) RCon_tag = newtag user << "You changed the RCON tag to: [newtag]" + SSmachinery.queue_rcon_update() return // Charged above 1% and safeties are enabled. if((charge > (capacity/100)) && safeties_enabled) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 39d52a93566..478c7688339 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -1,8 +1,6 @@ #define SOLAR_MAX_DIST 40 #define SOLARGENRATE 1500 -var/list/solars_list = list() - /obj/machinery/power/solar name = "solar panel" desc = "A solar electrical generator." @@ -25,14 +23,14 @@ var/list/solars_list = list() /obj/machinery/power/solar/drain_power() return -1 -/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) +/obj/machinery/power/solar/Initialize(mapload, var/obj/item/solar_assembly/S) + . = ..() Make(S) connect_to_network() /obj/machinery/power/solar/Destroy() unset_control() //remove from control computer - ..() + return ..() //set the control of the panel to a given computer if closer than SOLAR_MAX_DIST /obj/machinery/power/solar/proc/set_control(var/obj/machinery/power/solar_control/SC) @@ -94,11 +92,11 @@ var/list/solars_list = list() /obj/machinery/power/solar/update_icon() ..() - overlays.Cut() + cut_overlays() if(stat & BROKEN) - overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER) + add_overlay("solar_panel-b") else - overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER) + add_overlay("solar_panel") src.set_dir(angle2dir(adir)) return @@ -166,8 +164,8 @@ var/list/solars_list = list() return -/obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc, S, 0) +/obj/machinery/power/solar/fake/Initialize(mapload, var/obj/item/solar_assembly/S) + . = ..(mapload, S, 0) /obj/machinery/power/solar/fake/process() . = PROCESS_KILL @@ -301,16 +299,16 @@ var/list/solars_list = list() M.unset_control() if(connected_tracker) connected_tracker.unset_control() - ..() + return ..() /obj/machinery/power/solar_control/disconnect_from_network() ..() - solars_list.Remove(src) + sun.solars -= src /obj/machinery/power/solar_control/connect_to_network() var/to_return = ..() if(powernet) //if connected and not already in solar_list... - solars_list |= src //... add it + sun.solars |= src //... add it return to_return //search for unconnected panels and trackers in the computer powernet and connect them @@ -346,24 +344,24 @@ var/list/solars_list = list() updateDialog() -/obj/machinery/power/solar_control/initialize() - ..() +/obj/machinery/power/solar_control/Initialize() + . = ..() if(!connect_to_network()) return set_panels(cdir) /obj/machinery/power/solar_control/update_icon() if(stat & BROKEN) icon_state = "broken" - overlays.Cut() + cut_overlays() return if(stat & NOPOWER) icon_state = "computer" - overlays.Cut() + cut_overlays() return icon_state = "solar_control" - overlays.Cut() + cut_overlays() if(cdir > -1) - overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)) + add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir))) return /obj/machinery/power/solar_control/attack_hand(mob/user) @@ -530,13 +528,12 @@ var/list/solars_list = list() /obj/machinery/power/solar_control/autostart track = 2 // Auto tracking mode -/obj/machinery/power/solar_control/autostart/New() - ..() - spawn(150) // Wait 15 seconds to ensure everything was set up properly (such as, powernets, solar panels, etc. - src.search_for_connected() - if(connected_tracker && track == 2) - connected_tracker.set_angle(sun.angle) - src.set_panels(cdir) +/obj/machinery/power/solar_control/autostart/Initialize() + . = ..() + src.search_for_connected() + if(connected_tracker && track == 2) + connected_tracker.set_angle(sun.angle) + src.set_panels(cdir) // // MISC diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 7cbe2c828b3..91802ec0531 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -14,10 +14,11 @@ layer = 2.6 // a bit above wires -/obj/machinery/power/terminal/New() - ..() +/obj/machinery/power/terminal/Initialize() + . = ..() var/turf/T = src.loc - if(level==1) hide(!T.is_plating()) + if(level == 1) + hide(!T.is_plating()) return /obj/machinery/power/terminal/Destroy() diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 80f6ff98075..32cf9c37a2f 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -41,14 +41,18 @@ default_deconstruction_crowbar(user, W) /obj/machinery/power/tesla_coil/tesla_act(var/power) - being_shocked = 1 - var/power_produced = power / power_loss - add_avail(power_produced*input_power_multiplier) - flick("coilhit", src) - playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) - tesla_zap(src, 5, power_produced) - spawn(10) - being_shocked = 0 + if(anchored) + being_shocked = 1 + //don't lose arc power when it's not connected to anything + //please place tesla coils all around the station to maximize effectiveness + var/power_produced = powernet ? power / power_loss : power + add_avail(power_produced*input_power_multiplier) + flick("coilhit", src) + playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_produced) + addtimer(CALLBACK(src, .proc/reset_shocked), 10) + else + ..() /obj/machinery/power/grounding_rod name = "Grounding Rod" diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index cd1c8439a19..b001773a6b2 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -1,7 +1,7 @@ -#define TESLA_DEFAULT_POWER 3476520 -#define TESLA_MINI_POWER 1738260 +#define TESLA_DEFAULT_POWER 1738260 +#define TESLA_MINI_POWER 869130 -var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, +var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, /obj/machinery/power/emitter, /obj/machinery/field_generator, /mob/living/simple_animal, @@ -13,8 +13,13 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, /obj/structure/particle_accelerator/power_box, /obj/structure/particle_accelerator/end_cap, /obj/machinery/containment_field, - /obj/structure/disposalpipe) - + /obj/structure/disposalpipe, + /obj/structure/sign, + /obj/machinery/gateway, + /obj/structure/lattice, + /obj/structure/grille, + /obj/machinery/the_singularitygen/tesla, + /obj/machinery/atmospherics/pipe)) /obj/singularity/energy_ball name = "energy ball" desc = "An energy ball." @@ -27,31 +32,51 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, grav_pull = 0 contained = 0 density = 1 + energy = 0 + dissipate = 1 + dissipate_delay = 5 + dissipate_strength = 1 + layer = LIGHTING_LAYER + 0.1 + blend_mode = BLEND_ADD var/list/orbiting_balls = list() var/produced_power - var/is_orbiting + var/energy_to_raise = 32 + var/energy_to_lower = -20 + +/obj/singularity/energy_ball/ex_act(severity, target) + return /obj/singularity/energy_ball/Destroy() - for(var/obj/singularity/energy_ball/EB in orbiting_balls) + if(orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball)) + var/obj/singularity/energy_ball/EB = orbiting.orbiting + EB.orbiting_balls -= src + + for(var/ball in orbiting_balls) + var/obj/singularity/energy_ball/EB = ball qdel(EB) - ..() + + . = ..() /obj/singularity/energy_ball/process() - if(!is_orbiting) + if(!orbiting) handle_energy() - var/amount_to_move = 2 + orbiting_balls.len * 2 - var/what_does_the_scouter_say_about_the_balls_power_level = (TESLA_DEFAULT_POWER + (TESLA_MINI_POWER * orbiting_balls.len)) - move_the_basket_ball(amount_to_move) + + move_the_basket_ball(4 + orbiting_balls.len * 1.5) + + playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 30) + pixel_x = 0 pixel_y = 0 - playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 5) - tesla_zap(src, 7, what_does_the_scouter_say_about_the_balls_power_level) + + dir = tesla_zap(src, 7, TESLA_DEFAULT_POWER, TRUE) + pixel_x = -32 pixel_y = -32 - energy += rand(1,3) // ensure it generates energy without needing to be blasted by the PA too much due to its size, and that a tesla engine will always get bigger over time + for (var/ball in orbiting_balls) + var/range = rand(1, Clamp(orbiting_balls.len, 3, 7)) + tesla_zap(ball, range, TESLA_MINI_POWER/7*range, TRUE) else energy = 0 // ensure we dont have miniballs of miniballs - return /obj/singularity/energy_ball/examine(mob/user) ..() @@ -60,28 +85,50 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, /obj/singularity/energy_ball/proc/move_the_basket_ball(var/move_amount) - for(var/i = 0, i < move_amount, i++) - var/move_dir = pick(alldirs) - var/turf/T = get_step(src,move_dir) + //we face the last thing we zapped, so this lets us favor that direction a bit + var/first_move = dir + for(var/i in 0 to move_amount) + var/move_dir = pick(alldirs + first_move) //give the first move direction a bit of favoring. + if(target && prob(60)) + move_dir = get_dir(src,target) + var/turf/T = get_step(src, move_dir) if(can_move(T)) - loc = get_step(src,move_dir) + forceMove(T) + dir = move_dir + for(var/mob/living/carbon/C in loc) + dust_mobs(C) + /obj/singularity/energy_ball/proc/handle_energy() - if(energy >= 300) - energy -= 300 - playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 5) - spawn(100) - var/obj/singularity/energy_ball/EB = new(loc) - orbiting_balls.Add(EB) - EB.transform *= pick(0.3,0.4,0.5,0.6,0.7) - EB.is_orbiting = 1 - var/icon/I = icon(icon,icon_state,dir) + if(energy >= energy_to_raise) + energy_to_lower = energy_to_raise - 20 + energy_to_raise = energy_to_raise * 1.25 - var/orbitsize = (I.Width()+I.Height())*pick(0.5,0.6,0.7) - orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) - spawn(1) - EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36)) + playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 30) + addtimer(CALLBACK(src, .proc/new_mini_ball), 100) + else if(energy < energy_to_lower && orbiting_balls.len) + energy_to_raise = energy_to_raise / 1.25 + energy_to_lower = (energy_to_raise / 1.25) - 20 + + var/Orchiectomy_target = pick(orbiting_balls) + qdel(Orchiectomy_target) + + else if(orbiting_balls.len) + dissipate() //sing code has a much better system. + +/obj/singularity/energy_ball/proc/new_mini_ball() + if(!loc) + return + var/obj/singularity/energy_ball/EB = new(loc) + + EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7) + var/icon/I = icon(icon,icon_state,dir) + + var/orbitsize = (I.Width() + I.Height()) * pick(0.4, 0.5, 0.6, 0.7, 0.8) + orbitsize -= (orbitsize / world.icon_size) * (world.icon_size * 0.25) + + EB.orbit(src, orbitsize, pick(FALSE, TRUE), rand(10, 25), pick(3, 4, 5, 6, 36)) /obj/singularity/energy_ball/Bump(atom/A) @@ -90,120 +137,127 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, /obj/singularity/energy_ball/Bumped(atom/A) dust_mobs(A) +/obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target) + if (istype(target)) + target.orbiting_balls += src + target.dissipate_strength = target.orbiting_balls.len + + . = ..() +/obj/singularity/energy_ball/stop_orbit() + if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball)) + var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting + orbitingball.orbiting_balls -= src + orbitingball.dissipate_strength = orbitingball.orbiting_balls.len + ..() + if (!loc && !QDELETED(src)) + qdel(src) + + /obj/singularity/energy_ball/proc/dust_mobs(atom/A) - if(istype(A, /mob/living/carbon)) - var/mob/living/carbon/C = A - C.dust() - return - -/proc/get_closest_atom(type, list, source) - var/closest_atom - var/closest_distance - for(var/A in list) - if(!istype(A, type)) - continue - var/distance = get_dist(source, A) - if(!closest_distance) - closest_distance = distance - closest_atom = A - else - if(closest_distance > distance) - closest_distance = distance - closest_atom = A - return closest_atom - -/proc/tesla_zap(var/atom/source, zap_range = 3, power) - if(power < 500) + if(!iscarbon(A)) return - var/list/tesla_coils = list() - var/list/grounding_rods = list() - var/list/potential_machine_zaps = list() - var/list/potential_mob_zaps = list() - var/list/potential_structure_zaps = list() + for(var/obj/machinery/power/grounding_rod/GR in orange(src, 2)) + if(GR.anchored) + return + var/mob/living/carbon/C = A + C.dust() + +/proc/tesla_zap(atom/source, zap_range = 3, power, explosive = FALSE, stun_mobs = TRUE) + . = source.dir + if(power < 1000) + return + + var/closest_dist = 0 var/closest_atom - for(var/atom/A in oview(source, zap_range)) + var/obj/machinery/power/tesla_coil/closest_tesla_coil + var/obj/machinery/power/grounding_rod/closest_grounding_rod + var/mob/living/closest_mob + var/obj/machinery/closest_machine + var/obj/structure/closest_structure + + for(var/A in oview(source, zap_range+2)) if(istype(A, /obj/machinery/power/tesla_coil)) + var/dist = get_dist(source, A) var/obj/machinery/power/tesla_coil/C = A - if(C.being_shocked) - continue - tesla_coils.Add(C) + if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !C.being_shocked) + closest_dist = dist + + //we use both of these to save on istype and typecasting overhead later on + //while still allowing common code to run before hand + closest_tesla_coil = C + closest_atom = C + + else if(closest_tesla_coil) + continue //no need checking these other things + + else if(istype(A, /obj/machinery/power/grounding_rod)) + var/dist = get_dist(source, A)-2 + if(dist <= zap_range && (dist < closest_dist || !closest_grounding_rod)) + closest_grounding_rod = A + closest_atom = A + closest_dist = dist + + else if(closest_grounding_rod || is_type_in_typecache(A, blacklisted_tesla_types)) continue - if(istype(A, /obj/machinery/power/grounding_rod)) - var/obj/machinery/power/grounding_rod/R = A - grounding_rods.Add(R) - continue - if(istype(A, /obj/machinery)) - var/obj/machinery/M = A - if(is_type_in_list(M, blacklisted_tesla_types)) - continue - if(M.being_shocked) - continue - potential_machine_zaps.Add(M) - continue - if(istype(A, /obj/structure)) - var/obj/structure/M = A - if(is_type_in_list(M, blacklisted_tesla_types)) - continue - if(M.being_shocked) - continue - potential_structure_zaps.Add(M) - continue - if(istype(A, /mob/living)) + + else if(isliving(A)) + var/dist = get_dist(source, A) var/mob/living/L = A - if(L.stat == DEAD) - continue - if(is_type_in_list(L, blacklisted_tesla_types)) - continue - potential_mob_zaps.Add(L) + if(dist <= zap_range && (dist < closest_dist || !closest_mob) && L.stat != DEAD && !L.tesla_ignore) + closest_mob = L + closest_atom = A + closest_dist = dist + + else if(closest_mob) continue - closest_atom = get_closest_atom(/obj/machinery/power/tesla_coil, tesla_coils, source) - if(closest_atom && istype(closest_atom, /obj/machinery/power/tesla_coil)) - var/obj/machinery/power/tesla_coil/C = closest_atom - source.Beam(C,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) - C.tesla_act(power) - return - if(!closest_atom) - closest_atom = get_closest_atom(/obj/machinery/power/grounding_rod, grounding_rods, source) - if(closest_atom && istype(closest_atom, /obj/machinery/power/grounding_rod)) - var/obj/machinery/power/grounding_rod/R = closest_atom - source.Beam(R,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) - R.tesla_act(power) - return - if(!closest_atom) - closest_atom = get_closest_atom(/mob/living, potential_mob_zaps, source) - if(closest_atom && istype(closest_atom, /mob/living)) - var/mob/living/L = closest_atom - var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5,5) - source.Beam(L,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) - L.electrocute_act(shock_damage, source, 1, tesla_shock = 1) - if(istype(L, /mob/living/silicon)) - var/mob/living/silicon/S = L + + else if(istype(A, /obj/machinery)) + var/obj/machinery/M = A + var/dist = get_dist(source, A) + if(dist <= zap_range && (dist < closest_dist || !closest_machine) && !M.being_shocked) + closest_machine = M + closest_atom = A + closest_dist = dist + + else if(closest_mob) + continue + + else if(istype(A, /obj/structure)) + var/obj/structure/S = A + var/dist = get_dist(source, A) + if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !S.being_shocked) + closest_structure = S + closest_atom = A + closest_dist = dist + + //Alright, we've done our loop, now lets see if was anything interesting in range + if(closest_atom) + //common stuff + source.Beam(closest_atom, icon_state="lightning[rand(1,12)]", icon = 'icons/effects/effects.dmi', time=5) + var/zapdir = get_dir(source, closest_atom) + if(zapdir) + . = zapdir + + //per type stuff: + if(closest_tesla_coil) + closest_tesla_coil.tesla_act(power) + + else if(closest_grounding_rod) + closest_grounding_rod.tesla_act(power) + + else if(closest_mob) + var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5) + closest_mob.electrocute_act(shock_damage, source, 1, tesla_shock = 1) + if(issilicon(closest_mob)) + var/mob/living/silicon/S = closest_mob + if(stun_mobs) S.emp_act(2) - tesla_zap(S, 7, power / 1.5) // metallic folks bounce it further - else - tesla_zap(L, 5, power / 1.5) - return - if(!closest_atom) - closest_atom = get_closest_atom(/obj/machinery, potential_machine_zaps, source) - if(closest_atom) - var/obj/machinery/M = closest_atom - source.Beam(M,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) - M.tesla_act(power) - if(prob(85)) - M.emp_act(2) - else - if(prob(50)) - M.ex_act(3) - else - if(prob(90)) - M.ex_act(2) - else - M.ex_act(1) - return - if(!closest_atom) - closest_atom = get_closest_atom(/obj/structure, potential_structure_zaps, source) - if(closest_atom) - var/obj/structure/S = closest_atom - source.Beam(S,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) - S.tesla_act(power) - return + tesla_zap(S, 7, power / 1.5, explosive, stun_mobs) // metallic folks bounce it further + else + tesla_zap(closest_mob, 5, power / 1.5, explosive, stun_mobs) + + else if(closest_machine) + closest_machine.tesla_act(power) + + else if(closest_structure) + closest_structure.tesla_act(power) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 34e20d499c3..b1f3d4f8d2f 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -16,14 +16,14 @@ var/sun_angle = 0 // sun angle as set by sun datum var/obj/machinery/power/solar_control/control = null -/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) +/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S) + . = ..() Make(S) connect_to_network() /obj/machinery/power/tracker/Destroy() unset_control() //remove from control computer - ..() + return ..() //set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST /obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index b81500d6715..25fac3a110f 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -180,7 +180,7 @@ return if (usr.stat || usr.restrained() ) return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (usr.IsAdvancedToolUser()) if(!istype(usr, /mob/living/silicon/ai)) usr << "\red You don't have the dexterity to do this!" return @@ -317,4 +317,4 @@ /obj/machinery/computer/turbine_computer/process() src.updateDialog() - return \ No newline at end of file + return diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index cf16954816a..65bebc04439 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -14,8 +14,8 @@ var/obj/item/projectile/BB = null //The loaded bullet - make it so that the projectiles are created only when needed? var/spent_icon = "s-casing-spent" -/obj/item/ammo_casing/New() - ..() +/obj/item/ammo_casing/Initialize() + . = ..() if(ispath(projectile_type)) BB = new projectile_type(src) pixel_x = rand(-10, 10) diff --git a/code/modules/projectiles/effects.dm b/code/modules/projectiles/effects.dm index a18b3efc85b..77ce0579976 100644 --- a/code/modules/projectiles/effects.dm +++ b/code/modules/projectiles/effects.dm @@ -12,10 +12,8 @@ transform = M /obj/effect/projectile/proc/activate(var/kill_delay = 3) - spawn(kill_delay) - qdel(src) //see effect_system.dm - sets loc to null and lets GC handle removing these effects + QDEL_IN(src, kill_delay) //see effect_system.dm - sets loc to null and lets GC handle removing these effects - return //---------------------------- // Laser beam @@ -148,6 +146,18 @@ /obj/effect/projectile/solar/impact icon_state = "impact_solar" +//---------------------------- +// Treye beam +//---------------------------- +/obj/effect/projectile/trilaser/tracer + icon_state = "plasmacutter" + +/obj/effect/projectile/trilaser/muzzle + icon_state = "muzzle_plasmacutter" + +/obj/effect/projectile/trilaser/impact + icon_state = "impact_plasmacutter" + //---------------------------- // Pulse muzzle //---------------------------- @@ -178,4 +188,4 @@ icon_state = "muzzle_hcult" /obj/effect/projectile/cult/heavy/impact - icon_state = "impact_hcult" \ No newline at end of file + icon_state = "impact_hcult" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 504c1b14468..dcdc7198935 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -199,9 +199,6 @@ user.setMoveCooldown(move_delay) next_fire_time = world.time + fire_delay - if(muzzle_flash) - set_light(0) - //obtains the next projectile to fire /obj/item/weapon/gun/proc/consume_next_projectile() return null @@ -245,6 +242,7 @@ if(muzzle_flash) set_light(muzzle_flash) + addtimer(CALLBACK(src, /atom/.proc/set_light, 0), 2) if(recoil) spawn() @@ -510,10 +508,18 @@ name = "offhand" unwield() - qdel(src) + if (ismob(loc)) + var/mob/the_mob = loc + the_mob.drop_from_inventory(src) + else + qdel(src) wield() - qdel(src) + if (ismob(loc)) + var/mob/the_mob = loc + the_mob.drop_from_inventory(src) + else + qdel(src) dropped(mob/living/user as mob) if(user) @@ -522,7 +528,8 @@ user << "You are no-longer stabilizing the [name] with both hands." O.unwield() unwield() - if(src) + + if (!QDELETED(src)) qdel(src) mob_can_equip(M as mob, slot) diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 54be74e5fa5..2c34a4af766 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -17,12 +17,10 @@ /obj/item/weapon/gun/launcher/spikethrower/New() ..() - processing_objects.Add(src) last_regen = world.time /obj/item/weapon/gun/launcher/spikethrower/Destroy() - processing_objects.Remove(src) - ..() + return ..() /obj/item/weapon/gun/launcher/spikethrower/process() if(spikes < max_spikes && world.time > last_regen + spike_gen_time) @@ -30,6 +28,12 @@ last_regen = world.time update_icon() +/obj/item/weapon/gun/launcher/spikethrower/proc/regen_spike() + spikes++ + update_icon() + if (spikes < max_spikes) + addtimer(CALLBACK(src, .proc/regen_spike), spike_gen_time, TIMER_UNIQUE) + /obj/item/weapon/gun/launcher/spikethrower/examine(mob/user) ..(user) user << "It has [spikes] spike\s remaining." @@ -51,6 +55,7 @@ /obj/item/weapon/gun/launcher/spikethrower/consume_next_projectile() if(spikes < 1) return null spikes-- + addtimer(CALLBACK(src, .proc/regen_spike), spike_gen_time, TIMER_UNIQUE) return new /obj/item/weapon/spike(src) //This gun only functions for armalis. The on-sprite is too huge to render properly on other sprites. diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 53986e151ca..994a7a04bd5 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -28,43 +28,38 @@ ..() update_icon() -/obj/item/weapon/gun/energy/New() - ..() +/obj/item/weapon/gun/energy/Initialize() + . = ..() if(cell_type) power_supply = new cell_type(src) else power_supply = new /obj/item/weapon/cell/device/variable(src, max_shots*charge_cost) - if(self_recharge) - processing_objects.Add(src) update_icon() /obj/item/weapon/gun/energy/Destroy() - if(self_recharge) - processing_objects.Remove(src) - ..() + QDEL_NULL(power_supply) + return ..() -/obj/item/weapon/gun/energy/process() - if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the cyborg - charge_tick++ - if(charge_tick < recharge_time) return 0 - charge_tick = 0 +/obj/item/weapon/gun/energy/proc/try_recharge() + . = 1 + if (!power_supply || power_supply.charge >= power_supply.maxcharge || !self_recharge) + return 0 // check if we actually need to recharge + + if (use_external_power) + var/obj/item/weapon/cell/external = get_external_power_supply() + if(!external || !external.use(charge_cost)) //Take power from the borg... + return 0 - if(!power_supply || power_supply.charge >= power_supply.maxcharge) - return 0 // check if we actually need to recharge + power_supply.give(charge_cost) //... to recharge the shot + update_icon() - if(use_external_power) - var/obj/item/weapon/cell/external = get_external_power_supply() - if(!external || !external.use(charge_cost)) //Take power from the borg... - return 0 - - power_supply.give(charge_cost) //... to recharge the shot - update_icon() - return 1 + addtimer(CALLBACK(src, .proc/try_recharge), recharge_time * 2 SECONDS, TIMER_UNIQUE) /obj/item/weapon/gun/energy/consume_next_projectile() if(!power_supply) return null if(!ispath(projectile_type)) return null if(!power_supply.checked_use(charge_cost)) return null + if (self_recharge) addtimer(CALLBACK(src, .proc/try_recharge), recharge_time * 2 SECONDS, TIMER_UNIQUE) return new projectile_type(src) /obj/item/weapon/gun/energy/proc/get_external_power_supply() diff --git a/code/modules/projectiles/guns/energy/mining.dm b/code/modules/projectiles/guns/energy/mining.dm new file mode 100644 index 00000000000..de195ff5161 --- /dev/null +++ b/code/modules/projectiles/guns/energy/mining.dm @@ -0,0 +1,343 @@ +/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg + self_recharge = 1 + use_external_power = 1 + +/obj/item/weapon/gun/energy/kinetic_accelerator + name = "proto-kinetic accelerator" + desc = "A reloadable, ranged mining tool that does increased damage in low pressure. Capable of holding up to six slots worth of mod kits." + icon = 'icons/obj/mining_contained.dmi' + icon_state = "kineticgun" + item_state = "kineticgun" + contained_sprite = 1 + charge_meter = 0 + fire_delay = 16 + origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4, TECH_POWER = 4) + projectile_type = /obj/item/projectile/kinetic + fire_sound = 'sound/weapons/Kenetic_accel.ogg' + + var/max_mod_capacity = 100 + var/list/modkits = list() + +/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user as mob) + if(power_supply.charge < power_supply.maxcharge) + user << "You begin charging \the [src]..." + if(do_after(user,20)) + playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) + user.visible_message( + "\The [user] pumps \the [src]!", + "You pump \the [src]]!" + ) + power_supply.charge = power_supply.maxcharge + +/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user) + ..() + if(max_mod_capacity) + user << "[get_remaining_mod_capacity()]% mod capacity remaining." + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + user << "There is a [M.name] mod installed, using [M.cost]% capacity." + +/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/crowbar)) + if(modkits.len) + user << "You pry the modifications out." + playsound(loc, 100, 1) + for(var/obj/item/borg/upgrade/modkit/M in modkits) + M.uninstall(src) + else + user << "There are no modifications currently installed." + else if(istype(A, /obj/item/borg/upgrade/modkit)) + var/obj/item/borg/upgrade/modkit/MK = A + MK.install(src, user) + else + ..() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity() + var/current_capacity_used = 0 + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + current_capacity_used += M.cost + return max_mod_capacity - current_capacity_used + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_modkits() + . = list() + for(var/A in modkits) + . += A + +//Projectiles +/obj/item/projectile/kinetic + name = "kinetic force" + icon_state = null + damage = 30 + damage_type = BRUTE + check_armour = "bomb" + kill_count = 5 + + var/pressure_decrease = 0.25 + var/turf_aoe = FALSE + var/mob_aoe = 0 + var/list/hit_overlays = list() + +/obj/item/projectile/kinetic/launch_from_gun(atom/target, mob/user, obj/item/weapon/gun/launcher, var/target_zone, var/x_offset=0, var/y_offset=0) + if(istype(launcher, /obj/item/weapon/gun/energy/kinetic_accelerator)) + var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = launcher + for(var/A in KA.get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + M.modify_projectile(src) + ..() + +/obj/item/projectile/kinetic/on_impact(var/atom/A) + strike_thing(A) + . = ..() + +/obj/item/projectile/kinetic/proc/strike_thing(atom/target) + var/turf/target_turf = get_turf(target) + if(!target_turf) + target_turf = get_turf(src) + var/datum/gas_mixture/environment = target_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure > 50) + name = "weakened [name]" + damage *= pressure_decrease + if(istype(target_turf, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = target_turf + M.GetDrilled(1) + var/obj/effect/overlay/temp/kinetic_blast/K = new /obj/effect/overlay/temp/kinetic_blast(target_turf) + K.color = color + for(var/type in hit_overlays) + new type(target_turf) + if(turf_aoe) + for(var/T in orange(1, target_turf)) + if(istype(T, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = T + M.GetDrilled(1) + if(mob_aoe) + for(var/mob/living/L in range(1, target_turf) - firer - target) + L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor) + L << "You're struck by a [name]!" + + +//Modkits +/obj/item/borg/upgrade/modkit + name = "modification kit" + desc = "An upgrade for kinetic accelerators." + icon = 'icons/obj/mining.dmi' + icon_state = "modkit" + origin_tech = "programming=2;materials=2;magnets=4" + var/denied_type = null + var/maximum_of_type = 1 + var/cost = 30 + var/modifier = 1 //For use in any mod kit that has numerical modifiers + +/obj/item/borg/upgrade/modkit/examine(mob/user) + ..() + user << "Occupies [cost]% of mod capacity." + +/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user)) + install(A, user) + else + ..() + +/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R) + if(..()) + return + + for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules) + return install(H, usr) + +/obj/item/borg/upgrade/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = TRUE + if(denied_type) + var/number_of_denied = 0 + for(var/A in KA.get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + if(istype(M, denied_type)) + number_of_denied++ + if(number_of_denied >= maximum_of_type) + . = FALSE + break + if(KA.get_remaining_mod_capacity() >= cost) + if(.) + user << "You install the modkit." + playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + user.unEquip(src) + forceMove(KA) + KA.modkits += src + else + user << "The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits." + else + user << "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits." + . = FALSE + + + +/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + forceMove(get_turf(KA)) + KA.modkits -= src + +/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K) + + +//Range +/obj/item/borg/upgrade/modkit/range + name = "range increase" + desc = "Increases the range of a kinetic accelerator when installed." + modifier = 20 + cost = 24 //so you can fit four plus a tracer cosmetic + +/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K) + K.kill_count += modifier + + +//Damage +/obj/item/borg/upgrade/modkit/damage + name = "damage increase" + desc = "Increases the damage of kinetic accelerator when installed." + modifier = 10 + +/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K) + K.damage += modifier + + +//Cooldown +/obj/item/borg/upgrade/modkit/cooldown + name = "cooldown decrease" + desc = "Decreases the cooldown of a kinetic accelerator and increases the recharge rate." + modifier = 2 + +/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.fire_delay -= modifier + KA.recharge_time -= modifier + +/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.fire_delay += modifier + KA.recharge_time += modifier + ..() + + +//AoE blasts +/obj/item/borg/upgrade/modkit/aoe + modifier = 0 + +/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K) + K.name = "kinetic explosion" + if(!K.turf_aoe && !K.mob_aoe) + K.hit_overlays += /obj/effect/overlay/temp/explosion/fast + K.mob_aoe += modifier + +/obj/item/borg/upgrade/modkit/aoe/turfs + name = "mining explosion" + desc = "Causes the kinetic accelerator to destroy rock in an AoE." + denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs + +/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K) + ..() + K.turf_aoe = TRUE + +/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs + name = "offensive mining explosion" + desc = "Causes the kinetic accelerator to destroy rock and damage mobs in an AoE." + maximum_of_type = 3 + modifier = 0.25 + +/obj/item/borg/upgrade/modkit/aoe/mobs + name = "offensive explosion" + desc = "Causes the kinetic accelerator to damage mobs in an AoE." + modifier = 0.2 + + +//Indoors +/obj/item/borg/upgrade/modkit/indoors + name = "decrease pressure penalty" + desc = "Increases the damage a kinetic accelerator does in a high pressure environment." + modifier = 2 + denied_type = /obj/item/borg/upgrade/modkit/indoors + maximum_of_type = 2 + cost = 40 + +/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K) + K.pressure_decrease *= modifier + +/obj/item/borg/upgrade/modkit/tracer + name = "white tracer bolts" + desc = "Causes kinetic accelerator bolts to have a white tracer trail and explosion." + cost = 4 + denied_type = /obj/item/borg/upgrade/modkit/tracer + var/bolt_color = "#FFFFFF" + +/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/item/projectile/kinetic/K) + K.icon_state = "ka_tracer" + K.color = bolt_color + +/obj/item/borg/upgrade/modkit/tracer/adjustable + name = "adjustable tracer bolts" + desc = "Causes kinetic accelerator bolts to have a adjustably-colored tracer trail and explosion. Use in-hand to change color." + +/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user) + bolt_color = input(user,"Choose Color") as color + +/*******************PLASMA CUTTER*******************/ + +/obj/item/weapon/gun/energy/plasmacutter/mounted + self_recharge = 1 + use_external_power = 1 + +/obj/item/weapon/gun/energy/plasmacutter + name = "plasma cutter" + desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off of xenos! Or, you know, mine stuff." + contained_sprite = 1 + charge_meter = 0 + icon = 'icons/obj/mining_contained.dmi' + icon_state = "plasma" + item_state = "plasma" + fire_sound = 'sound/weapons/plasma_cutter.ogg' + slot_flags = SLOT_BELT|SLOT_BACK + w_class = 3 + force = 15 + sharp = 1 + edge = 1 + origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3) + matter = list(DEFAULT_WALL_MATERIAL = 4000) + projectile_type = /obj/item/projectile/beam/plasmacutter + max_shots = 15 + +/obj/item/projectile/beam/plasmacutter + name = "plasma arc" + icon_state = "omnilaser" + damage = 15 + damage_type = BURN + check_armour = "laser" + kill_count = 5 + pass_flags = PASSTABLE + + muzzle_type = /obj/effect/projectile/trilaser/muzzle + tracer_type = /obj/effect/projectile/trilaser/tracer + impact_type = /obj/effect/projectile/trilaser/impact + +/obj/item/projectile/beam/plasmacutter/on_impact(var/atom/A) + strike_thing(A) + . = ..() + +/obj/item/projectile/beam/plasmacutter/proc/strike_thing(var/atom/A) + if(istype(A, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = A + if(prob(33)) + M.GetDrilled(1) + return + else if(prob(88)) + M.emitter_blasts_taken += 2 + M.emitter_blasts_taken += 1 + + else if(istype(A, /mob/living)) + var/mob/living/L = A + L.apply_damage(damage, BRUTE, def_zone) + if(istype(A, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = L + var/ultimate_def_zone = check_zone(def_zone) + if(H.has_organ(ultimate_def_zone)) + var/obj/item/organ/external/E = H.get_organ(ultimate_def_zone) + if(E.damage > 15 && prob((3*E.damage))) + E.droplimb(0,DROPLIMB_EDGE) diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index d3de13e2caf..a023c495d2b 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -41,16 +41,6 @@ var/lightfail = 0 -//override for failcheck behaviour -/obj/item/weapon/gun/energy/gun/nuclear/process() - charge_tick++ - if(charge_tick < 4) return 0 - charge_tick = 0 - if(!power_supply) return 0 - if((power_supply.charge / power_supply.maxcharge) != 1) - power_supply.give(charge_cost) - update_icon() - return 1 /obj/item/weapon/gun/energy/gun/nuclear/proc/failcheck() lightfail = 0 @@ -70,42 +60,43 @@ M << "You feel a wave of heat wash over you." M.apply_effect(300, IRRADIATE) crit_fail = 1 //break the gun so it stops recharging - processing_objects.Remove(src) + self_recharge = FALSE update_icon() return 0 - /obj/item/weapon/gun/energy/gun/nuclear/proc/update_charge() if (crit_fail) - overlays += "nucgun-whee" + add_overlay("nucgun-whee") return var/ratio = power_supply.charge / power_supply.maxcharge ratio = round(ratio, 0.25) * 100 - overlays += "nucgun-[ratio]" + add_overlay("nucgun-[ratio]") /obj/item/weapon/gun/energy/gun/nuclear/proc/update_reactor() if(crit_fail) - overlays += "nucgun-crit" + add_overlay("nucgun-crit") return if(lightfail) - overlays += "nucgun-medium" + add_overlay("nucgun-medium") else if ((power_supply.charge/power_supply.maxcharge) <= 0.5) - overlays += "nucgun-light" + add_overlay("nucgun-light") else - overlays += "nucgun-clean" + add_overlay("nucgun-clean") /obj/item/weapon/gun/energy/gun/nuclear/proc/update_mode() var/datum/firemode/current_mode = firemodes[sel_mode] switch(current_mode.name) - if("stun") overlays += "nucgun-stun" - if("lethal") overlays += "nucgun-kill" + if("stun") + add_overlay("nucgun-stun") + if("lethal") + add_overlay("nucgun-kill") /* /obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity) ..() reliability -= round(15/severity) */ /obj/item/weapon/gun/energy/gun/nuclear/update_icon() - overlays.Cut() + cut_overlays() update_charge() update_reactor() update_mode() @@ -121,7 +112,7 @@ fire_delay = 4 projectile_type = /obj/item/projectile/beam/stun - origin_tech = "combat=3;magnets=2" + origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2) modifystate = "epistolstun" firemodes = list( diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 10209f62024..4c434a56230 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -181,7 +181,7 @@ force = 30 projectile_type = /obj/item/projectile/energy/bfg slot_flags = SLOT_BACK - max_shots = 10 + max_shots = 3 sel_mode = 1 fire_delay = 10 accuracy = 20 @@ -212,6 +212,7 @@ ) action_button_name = "Wield gatling laser" + charge_cost = 50 /obj/item/weapon/gun/energy/vaurca/gatlinglaser/can_wield() return 1 @@ -335,7 +336,7 @@ "You hear a low pulsing roar!" ) is_charging = 1 - sleep(40) + sleep(20) is_charging = 0 if(!istype(user.get_active_hand(), src)) return @@ -387,6 +388,7 @@ self_recharge = 1 recharge_time = 1 charge_meter = 1 + charge_cost = 50 firemodes = list( list(mode_name="2 second burst", burst=10, burst_delay = 1, fire_delay = 20), @@ -424,7 +426,49 @@ "You hear a low pulsing roar!" ) is_charging = 1 - sleep(60) + sleep(40) + is_charging = 0 + if(!istype(user.get_active_hand(), src)) + return + msg_admin_attack("[key_name_admin(user)] shot with \a [src.type] [key_name_admin(src)]'s target (JMP)") + return 1 + +/obj/item/weapon/gun/energy/vaurca/mountedthermaldrill + name = "mounted thermal drill" + desc = "Pierce the heavens? Son, there won't be any heavens when you're through with it." + contained_sprite = 1 + icon = 'icons/obj/vaurca_items.dmi' + icon_state = "thermaldrill" + item_state = "thermaldrill" + origin_tech = "combat=6;phorontech=8," + fire_sound = 'sound/magic/lightningbolt.ogg' + slot_flags = SLOT_BACK + w_class = 4 + force = 15 + projectile_type = /obj/item/projectile/beam/thermaldrill + max_shots = 90 + sel_mode = 1 + burst = 30 + burst_delay = 1 + fire_delay = 60 + self_recharge = 1 + recharge_time = 1 + charge_meter = 1 + use_external_power = 1 + charge_cost = 50 + +/obj/item/weapon/gun/energy/vaurca/mountedthermaldrill/special_check(var/mob/user) + ..() + if(is_charging) + user << "\The [src] is already charging!" + return 0 + user.visible_message( + "\The [user] begins charging the [src]!", + "You begin charging the [src]!", + "You hear a low pulsing roar!" + ) + is_charging = 1 + sleep(30) is_charging = 0 if(!istype(user.get_active_hand(), src)) return diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm index a3a88245cfb..d96da8671f7 100644 --- a/code/modules/projectiles/guns/projectile/boltaction.dm +++ b/code/modules/projectiles/guns/projectile/boltaction.dm @@ -61,7 +61,7 @@ /obj/item/weapon/gun/projectile/boltaction/attackby(var/obj/item/A as obj, mob/user as mob) - if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != 3) + if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter) && w_class != 3) user << "You begin to shorten the barrel and stock of \the [src]." if(loaded.len) afterattack(user, user) diff --git a/code/modules/projectiles/guns/projectile/improvised.dm b/code/modules/projectiles/guns/projectile/improvised.dm index ac2b430350a..acc614ee18d 100644 --- a/code/modules/projectiles/guns/projectile/improvised.dm +++ b/code/modules/projectiles/guns/projectile/improvised.dm @@ -31,7 +31,7 @@ /obj/item/weapon/gun/projectile/shotgun/improvised/attackby(var/obj/item/A as obj, mob/user as mob) - if(w_class > 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter))) + if(w_class == 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter))) user << "You begin to shorten the barrel of \the [src]." if(loaded.len) for(var/i in 1 to max_shells) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index ab1a6427b46..aa1af66eb7a 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -105,7 +105,7 @@ //this is largely hacky and bad :( -Pete /obj/item/weapon/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob) - if(w_class > 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter))) + if(w_class == 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter))) user << "You begin to shorten the barrel of \the [src]." if(loaded.len) for(var/i in 1 to max_shells) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 1da05c6eecf..b919ba165d3 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -224,7 +224,7 @@ /obj/item/projectile/beam/megaglaive name = "thermal lance" icon_state = "megaglaive" - damage = 6 + damage = 10 incinerate = 5 armor_penetration = 10 no_attack_log = 1 @@ -239,10 +239,27 @@ src.transform = effect_transform ..() +/obj/item/projectile/beam/megaglaive/on_impact(var/atom/A) + if(isturf(A)) + if(istype(A, /turf/simulated/mineral)) + if(prob(75)) //likely because its a mining tool + var/turf/simulated/mineral/M = A + if(prob(10)) + M.GetDrilled(1) + else if(!M.emitter_blasts_taken) + M.emitter_blasts_taken += 1 + else if(prob(33)) + M.emitter_blasts_taken += 1 + if(ismob(A)) + var/mob/living/M = A + M.apply_effect(1, INCINERATE, 0) + explosion(A, -1, 0, 2) + ..() + /obj/item/projectile/beam/thermaldrill name = "thermal lance" icon_state = "megaglaive" - damage = 3 + damage = 5 no_attack_log = 1 muzzle_type = /obj/effect/projectile/solar/muzzle @@ -254,7 +271,13 @@ if(istype(A, /turf/simulated/mineral)) if(prob(75)) //likely because its a mining tool var/turf/simulated/mineral/M = A - M.GetDrilled() + if(prob(33)) + M.GetDrilled(1) + else if(!M.emitter_blasts_taken) + M.emitter_blasts_taken += 2 + else if(prob(66)) + M.emitter_blasts_taken += 2 + if(ismob(A)) var/mob/living/M = A M.apply_effect(1, INCINERATE, 0) diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm index 01c57f2f76b..8c4106ebdfc 100644 --- a/code/modules/random_map/_random_map_setup.dm +++ b/code/modules/random_map/_random_map_setup.dm @@ -19,4 +19,11 @@ #define ROOM_TEMP_CHAR 4 #define MONSTER_CHAR 5 #define ARTIFACT_TURF_CHAR 6 -#define ARTIFACT_CHAR 7 \ No newline at end of file +#define ARTIFACT_CHAR 7 + +#define GET_MAP_CELL(X,Y) ((((Y) - 1) * limit_x) + (X)) +#define PREPARE_CELL(X,Y) \ + tmp_cell = GET_MAP_CELL(X,Y);\ + if (tmp_cell < 1 || tmp_cell > map.len) {\ + tmp_cell = null;\ + } diff --git a/code/modules/random_map/automata/automata.dm b/code/modules/random_map/automata/automata.dm index f3867d78bdc..a2a6320e409 100644 --- a/code/modules/random_map/automata/automata.dm +++ b/code/modules/random_map/automata/automata.dm @@ -1,3 +1,7 @@ +#define CELL_ALIVE(VAL) (VAL == cell_live_value) +#define KILL_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_dead_value; +#define REVIVE_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_live_value; + /datum/random_map/automata descriptor = "generic caves" initial_wall_cell = 55 @@ -16,43 +20,57 @@ /datum/random_map/automata/proc/iterate(var/iteration) var/list/next_map[limit_x*limit_y] + var/tmp_cell + var/current_cell + var/count + if (!islist(map)) + set_map_size() for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) + PREPARE_CELL(x,y) + current_cell = tmp_cell next_map[current_cell] = map[current_cell] - var/count = 0 + count = 0 // Every attempt to place this in a proc or a list has resulted in // the generator being totally bricked and useless. Fuck it. We're // hardcoding this shit. Feel free to rewrite and PR a fix. ~ Z - var/tmp_cell = get_map_cell(x,y) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x+1,y+1) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x-1,y-1) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x+1,y-1) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x-1,y+1) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x-1,y) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x,y-1) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x+1,y) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ - tmp_cell = get_map_cell(x,y+1) - if(tmp_cell && cell_is_alive(map[tmp_cell])) count++ + PREPARE_CELL(x,y) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x+1,y+1) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x-1,y-1) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x+1,y-1) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x-1,y+1) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x-1,y) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x,y-1) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x+1,y) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ + PREPARE_CELL(x,y+1) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + count++ if(count >= cell_threshold) - revive_cell(current_cell, next_map, (iteration == iterations)) + REVIVE_CELL(current_cell, next_map) else - kill_cell(current_cell, next_map, (iteration == iterations)) - map = next_map + KILL_CELL(current_cell, next_map) + + CHECK_TICK -// Check if a given tile counts as alive for the automata generations. -/datum/random_map/automata/proc/cell_is_alive(var/value) - return (value == cell_live_value) && (value != cell_dead_value) + map = next_map /datum/random_map/automata/proc/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter) if(!use_next_map) @@ -62,4 +80,7 @@ /datum/random_map/automata/proc/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter) if(!use_next_map) use_next_map = map - use_next_map[target_cell] = cell_dead_value \ No newline at end of file + use_next_map[target_cell] = cell_dead_value + +#undef KILL_CELL +#undef REVIVE_CELL diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm index fe959c72b52..3f93358f138 100644 --- a/code/modules/random_map/automata/caves.dm +++ b/code/modules/random_map/automata/caves.dm @@ -1,3 +1,6 @@ +#define GET_BELOW_OR_NULL(atom, z) \ + (!(z > world.maxz || z > 17 || z < 2) && z_levels & (1 << (z - 2))) ? get_step(atom, DOWN) : null + /datum/random_map/automata/cave_system iterations = 5 descriptor = "moon caves" @@ -27,26 +30,161 @@ return "X" return ..(value) -/datum/random_map/automata/cave_system/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter) - ..() - if(final_iter) - ore_turfs |= target_cell - -/datum/random_map/automata/cave_system/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter) - ..() - if(final_iter) - ore_turfs -= target_cell - // Create ore turfs. /datum/random_map/automata/cave_system/cleanup() + var/tmp_cell + for (var/x = 1; x < limit_x; x++) + for (var/y = 1; y < limit_y; y++) + PREPARE_CELL(x, y) + if (tmp_cell && CELL_ALIVE(map[tmp_cell])) + ore_turfs += tmp_cell + + game_log("ASGEN", "Found [ore_turfs.len] ore turfs.") var/ore_count = round(map.len/20) + var/door_count = 0 + var/empty_count = 0 while((ore_count>0) && (ore_turfs.len>0)) - if(!priority_process) sleep(-1) + + if(!priority_process) + CHECK_TICK + var/check_cell = pick(ore_turfs) ore_turfs -= check_cell if(prob(75)) map[check_cell] = DOOR_CHAR // Mineral block + door_count += 1 else map[check_cell] = EMPTY_CHAR // Rare mineral block. + empty_count += 1 ore_count-- + + game_log("ASGEN", "Set [door_count] turfs to random minerals.") + game_log("ASGEN", "Set [empty_count] turfs to high-chance random minerals.") return 1 + +/datum/random_map/automata/cave_system/apply_to_map() + if(!origin_x) origin_x = 1 + if(!origin_y) origin_y = 1 + if(!origin_z) origin_z = 1 + + var/tmp_cell + var/x + var/y + var/new_path + var/num_applied = 0 + for (var/thing in block(locate(origin_x, origin_y, origin_z), locate(limit_x, limit_y, origin_z))) + var/turf/T = thing + new_path = null + if (!T || (target_turf_type && !istype(T, target_turf_type))) + continue + + x = T.x + y = T.y + + PREPARE_CELL(x,y) + + if (!tmp_cell) + continue + + switch (map[tmp_cell]) + if(DOOR_CHAR) + new_path = mineral_sparse + if(EMPTY_CHAR) + new_path = mineral_rich + if(FLOOR_CHAR) + new_path = floor_type + if(WALL_CHAR) + new_path = wall_type + + if (!new_path) + continue + + num_applied += 1 + new new_path(T) + + CHECK_TICK + + game_log("ASGEN", "Applied [num_applied] turfs.") + +/datum/random_map/automata/cave_system/high_yield + descriptor = "high yield caves" + wall_type = /turf/simulated/mineral + mineral_sparse = /turf/simulated/mineral/random/high_chance + mineral_rich = /turf/simulated/mineral/random/higher_chance + +/datum/random_map/automata/cave_system/chasms + descriptor = "chasm caverns" + wall_type = /turf/unsimulated/mask + floor_type = /turf/simulated/open/airless + target_turf_type = /turf/unsimulated/chasm_mask + mineral_sparse = /turf/unsimulated/mask + mineral_rich = /turf/unsimulated/mask + cell_threshold = 5 + +/datum/random_map/automata/cave_system/chasms/apply_to_map() + if(!origin_x) origin_x = 1 + if(!origin_y) origin_y = 1 + if(!origin_z) origin_z = 1 + + var/tmp_cell + var/x + var/y + var/z + var/new_path + var/num_applied = 0 + for (var/thing in block(locate(origin_x, origin_y, origin_z), locate(limit_x, limit_y, origin_z))) + var/turf/T = thing + new_path = null + if (!T || (target_turf_type && !istype(T, target_turf_type))) + continue + + x = T.x + y = T.y + z = T.z + + PREPARE_CELL(x,y) + + if (!tmp_cell) + continue + + switch (map[tmp_cell]) + if(DOOR_CHAR) + new_path = mineral_sparse + if(EMPTY_CHAR) + new_path = mineral_rich + if(FLOOR_CHAR) + var/turf/below = GET_BELOW_OR_NULL(T, z) + if(below) + var/area/below_area = below.loc // Let's just assume that the turf is not in nullspace. + if(below_area.station_area) + new_path = wall_type + else if(below.density) + new_path = wall_type + else + new_path = floor_type + + if(WALL_CHAR) + new_path = wall_type + + if (!new_path) + continue + + num_applied += 1 + new new_path(T) + + CHECK_TICK + + game_log("ASGEN", "Applied [num_applied] turfs.") + +/datum/random_map/automata/cave_system/chasms/cleanup() + return + +/datum/random_map/automata/cave_system/chasms/surface + descriptor = "chasm surface" + wall_type = /turf/simulated/floor/asteroid + floor_type = /turf/simulated/open/airless + target_turf_type = /turf/unsimulated/chasm_mask + mineral_sparse = /turf/simulated/floor/asteroid + mineral_rich = /turf/simulated/floor/asteroid + +#undef GET_BELOW_OR_NULL diff --git a/code/modules/random_map/automata/diona.dm b/code/modules/random_map/automata/diona.dm index fc0bbb034b8..5b0f437cd25 100644 --- a/code/modules/random_map/automata/diona.dm +++ b/code/modules/random_map/automata/diona.dm @@ -1,5 +1,5 @@ -/turf/simulated/wall/diona/New(var/newloc) - ..(newloc,"biomass") +/turf/simulated/wall/diona/Initialize(mapload) + . = ..(mapload,"biomass") /turf/simulated/wall/diona/attack_generic(var/mob/user, var/damage, var/attack_message) if(istype(user, /mob/living/carbon/alien/diona)) @@ -38,7 +38,7 @@ if(1) new_growth = 2 var/obj/structure/diona/vines/existing = locate() in T - if(!istype(existing)) existing = getFromPool(/obj/structure/diona/vines, T) + if(!istype(existing)) existing = new /obj/structure/diona/vines(T) if(existing.growth < new_growth) existing.growth = new_growth existing.update_icon() @@ -50,10 +50,9 @@ name = "glow bulb" desc = "A glowing bulb of some sort." icon_state = "glowbulb" - -/obj/structure/diona/bulb/New(var/newloc) - ..() - set_light(3,3,"#557733") + light_power = 3 + light_range = 3 + light_color = "#557733" /datum/random_map/automata/diona iterations = 3 @@ -161,12 +160,12 @@ switch(value) if(ARTIFACT_CHAR) - getFromPool(/obj/structure/diona/bulb,T) + new /obj/structure/diona/bulb(T) if(MONSTER_CHAR) spawn_diona_nymph(T) if(DOOR_CHAR) - var/obj/structure/diona/vines/V = getFromPool(/obj/structure/diona/vines,T) + var/obj/structure/diona/vines/V = new(T) V.growth = 3 V.update_icon() spawn(1) - V.spread() \ No newline at end of file + V.spread() diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm index 9bdc2c8eb95..22564db8634 100644 --- a/code/modules/random_map/drop/drop_types.dm +++ b/code/modules/random_map/drop/drop_types.dm @@ -3,7 +3,7 @@ var/global/list/datum/supply_drop_loot/supply_drop /proc/supply_drop_random_loot_types() if(!supply_drop) supply_drop = init_subtypes(/datum/supply_drop_loot) - supply_drop = dd_sortedObjectList(supply_drop) + sortTim(supply_drop, /proc/cmp_supply_drop, FALSE) return supply_drop /datum/supply_drop_loot @@ -19,9 +19,6 @@ var/global/list/datum/supply_drop_loot/supply_drop for(var/content in contents()) new content(C) -/datum/supply_drop_loot/dd_SortValue() - return name - /datum/supply_drop_loot/supermatter name = "Supermatter" /datum/supply_drop_loot/supermatter/New() diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm index 7e4323158e4..1ee03fb2526 100644 --- a/code/modules/random_map/noise/noise.dm +++ b/code/modules/random_map/noise/noise.dm @@ -35,13 +35,13 @@ // Instantiate the grid. for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - map[get_map_cell(x,y)] = 0 + map[GET_MAP_CELL(x,y)] = 0 // Now dump in the actual random data. - map[get_map_cell(1,1)] = cell_base+rand(initial_cell_range) - map[get_map_cell(1,limit_y)] = cell_base+rand(initial_cell_range) - map[get_map_cell(limit_x,limit_y)] = cell_base+rand(initial_cell_range) - map[get_map_cell(limit_x,1)] = cell_base+rand(initial_cell_range) + map[GET_MAP_CELL(1,1)] = cell_base+rand(initial_cell_range) + map[GET_MAP_CELL(1,limit_y)] = cell_base+rand(initial_cell_range) + map[GET_MAP_CELL(limit_x,limit_y)] = cell_base+rand(initial_cell_range) + map[GET_MAP_CELL(limit_x,1)] = cell_base+rand(initial_cell_range) /datum/random_map/noise/generate_map() // Begin recursion. @@ -69,33 +69,33 @@ (x,y)----------(x+hsize,y)----------(x+isize,y) */ // Central edge values become average of corners. - map[get_map_cell(x+hsize,y+isize)] = round((\ - map[get_map_cell(x,y+isize)] + \ - map[get_map_cell(x+isize,y+isize)] \ + map[GET_MAP_CELL(x+hsize,y+isize)] = round((\ + map[GET_MAP_CELL(x,y+isize)] + \ + map[GET_MAP_CELL(x+isize,y+isize)] \ )/2) - map[get_map_cell(x+hsize,y)] = round(( \ - map[get_map_cell(x,y)] + \ - map[get_map_cell(x+isize,y)] \ + map[GET_MAP_CELL(x+hsize,y)] = round(( \ + map[GET_MAP_CELL(x,y)] + \ + map[GET_MAP_CELL(x+isize,y)] \ )/2) map[get_map_cell(x,y+hsize)] = round(( \ - map[get_map_cell(x,y+isize)] + \ - map[get_map_cell(x,y)] \ + map[GET_MAP_CELL(x,y+isize)] + \ + map[GET_MAP_CELL(x,y)] \ )/2) - map[get_map_cell(x+isize,y+hsize)] = round(( \ - map[get_map_cell(x+isize,y+isize)] + \ - map[get_map_cell(x+isize,y)] \ + map[GET_MAP_CELL(x+isize,y+hsize)] = round(( \ + map[GET_MAP_CELL(x+isize,y+isize)] + \ + map[GET_MAP_CELL(x+isize,y)] \ )/2) // Centre value becomes the average of all other values + possible random variance. - var/current_cell = get_map_cell(x+hsize,y+hsize) + var/current_cell = GET_MAP_CELL(x+hsize,y+hsize) map[current_cell] = round(( \ - map[get_map_cell(x+hsize,y+isize)] + \ - map[get_map_cell(x+hsize,y)] + \ - map[get_map_cell(x,y+hsize)] + \ - map[get_map_cell(x+isize,y)] \ + map[GET_MAP_CELL(x+hsize,y+isize)] + \ + map[GET_MAP_CELL(x+hsize,y)] + \ + map[GET_MAP_CELL(x,y+hsize)] + \ + map[GET_MAP_CELL(x+isize,y)] \ )/4) if(prob(random_variance_chance)) @@ -104,7 +104,8 @@ // Recurse until size is too small to subdivide. if(isize>3) - if(!priority_process) sleep(-1) + if(!priority_process) + CHECK_TICK iteration++ subdivide(iteration, x, y, hsize) subdivide(iteration, x+hsize, y, hsize) @@ -124,35 +125,36 @@ var/total = 0 // Get the average neighboring value. - var/tmp_cell = get_map_cell(x+1,y+1) + var/tmp_cell + PREPARE_CELL(x+1,y+1) if(tmp_cell) total += map[tmp_cell] val_count++ - tmp_cell = get_map_cell(x-1,y-1) + PREPARE_CELL(x-1,y-1) if(tmp_cell) total += map[tmp_cell] val_count++ - tmp_cell = get_map_cell(x+1,y-1) + PREPARE_CELL(x+1,y-1) if(tmp_cell) total += map[tmp_cell] val_count++ - tmp_cell = get_map_cell(x-1,y+1) + PREPARE_CELL(x-1,y+1) if(tmp_cell) total += map[tmp_cell] val_count++ - tmp_cell = get_map_cell(x-1,y) + PREPARE_CELL(x-1,y) if(tmp_cell) total += map[tmp_cell] val_count++ - tmp_cell = get_map_cell(x,y-1) + PREPARE_CELL(x,y-1) if(tmp_cell) total += map[tmp_cell] val_count++ - tmp_cell = get_map_cell(x+1,y) + PREPARE_CELL(x+1,y) if(tmp_cell) total += map[tmp_cell] val_count++ - tmp_cell = get_map_cell(x,y+1) + PREPARE_CELL(x,y+1) if(tmp_cell) total += map[tmp_cell] val_count++ @@ -165,4 +167,4 @@ else if(map[current_cell] < total) map[current_cell]-=cell_smooth_amt map[current_cell] = max(0,min(cell_range,map[current_cell])) - map = next_map \ No newline at end of file + map = next_map diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm index 4caacb70995..889fdf38507 100644 --- a/code/modules/random_map/noise/ore.dm +++ b/code/modules/random_map/noise/ore.dm @@ -46,13 +46,16 @@ var/turf/simulated/T = locate(tx+j, ty+i, origin_z) if(!istype(T) || !T.has_resources) continue - if(!priority_process) sleep(-1) + if(!priority_process) + CHECK_TICK T.resources = list() T.resources["silicates"] = rand(3,5) T.resources["carbonaceous rock"] = rand(3,5) - var/current_cell = map[get_map_cell(x,y)] - if(current_cell < rare_val) // Surface metals. + var/tmp_cell + PREPARE_CELL(x, y) + + if(tmp_cell < rare_val) // Surface metals. T.resources["iron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) T.resources["gold"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["silver"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) @@ -61,7 +64,7 @@ T.resources["phoron"] = 0 T.resources["osmium"] = 0 T.resources["hydrogen"] = 0 - else if(current_cell < deep_val) // Rare metals. + else if(tmp_cell < deep_val) // Rare metals. T.resources["gold"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["uranium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) @@ -87,4 +90,4 @@ else if(value < deep_val) return "R" else - return "D" \ No newline at end of file + return "D" diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm index f1d7d02637a..faae9b37854 100644 --- a/code/modules/random_map/random_map.dm +++ b/code/modules/random_map/random_map.dm @@ -54,7 +54,7 @@ var/global/list/map_count = list() var/start_time = world.timeofday if(!do_not_announce) admin_notice("Generating [name].", R_DEBUG) - sleep(-1) + CHECK_TICK // Testing needed to see how reliable this is (asynchronous calls, called during worldgen), DM ref is not optimistic if(seed) @@ -156,7 +156,8 @@ var/global/list/map_count = list() for(var/x = 1, x <= limit_x, x++) for(var/y = 1, y <= limit_y, y++) - if(!priority_process) sleep(-1) + if(!priority_process) + CHECK_TICK apply_to_turf(x,y) /datum/random_map/proc/apply_to_turf(var/x,var/y) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index cdda0e9d906..2a85b0e3a9a 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -23,9 +23,9 @@ chemical_reagents_list[D.id] = D /datum/reagents/Destroy() - ..() - if(chemistryProcess) - chemistryProcess.active_holders -= src + . = ..() + if(SSchemistry) + SSchemistry.active_holders -= src for(var/datum/reagent/R in reagent_list) qdel(R) @@ -94,8 +94,8 @@ my_atom.reagents = null /datum/reagents/proc/handle_reactions() - if(chemistryProcess) - chemistryProcess.mark_for_update(src) + if(SSchemistry) + SSchemistry.mark_for_update(src) //returns 1 if the holder should continue reactiong, 0 otherwise. /datum/reagents/proc/process_reactions() diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 123dd289618..c13fb0c206c 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -417,7 +417,7 @@ if(archive_diseases[id]) var/datum/disease/advance/A = archive_diseases[id] A.AssignName(new_name) - for(var/datum/disease/advance/AD in active_diseases) + for(var/datum/disease/advance/AD in SSdisease.processing) AD.Refresh() src.updateUsrDialog() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 0a73f5c0bf7..fe759ca1a4a 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -112,7 +112,7 @@ return null /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references - ..() + . = ..() holder = null /* DEPRECATED - TODO: REMOVE EVERYWHERE */ diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 69495a4bd43..c9e15eddf75 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -166,7 +166,7 @@ if(holder && holder.my_atom && ismob(holder.my_atom)) var/mob/M = holder.my_atom M.status_flags &= ~FAKEDEATH - ..() + return ..() /datum/reagent/toxin/fertilizer //Reagents used for plant fertilizers. name = "fertilizer" diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 4683a953b1f..99a6da19069 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -96,7 +96,7 @@ return progress -/datum/chemical_reaction/proc/process(var/datum/reagents/holder) +/datum/chemical_reaction/process(var/datum/reagents/holder) //determine how far the reaction can proceed var/list/reaction_limits = list() for(var/reactant in required_reagents) diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm index df63f5c8a78..c33fed21862 100644 --- a/code/modules/reagents/dispenser/dispenser2.dm +++ b/code/modules/reagents/dispenser/dispenser2.dm @@ -18,8 +18,8 @@ density = 1 anchored = 1 -/obj/machinery/chemical_dispenser/New() - ..() +/obj/machinery/chemical_dispenser/Initialize() + . = ..() if(spawn_cartridges) for(var/type in spawn_cartridges) @@ -56,7 +56,7 @@ C.loc = src cartridges[C.label] = C - cartridges = sortAssoc(cartridges) + sortTim(cartridges, /proc/cmp_text_asc) nanomanager.update_uis(src) /obj/machinery/chemical_dispenser/proc/remove_cartridge(label) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 83d706e2c49..c9cfce51061 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -44,8 +44,8 @@ if (reagents.get_reagent_amount("blood")) user.visible_message("[user] raises \the [src] up to their mouth and bites into it.", "You raise \the [src] up to your mouth and bite into it, starting to drain its contents.
You need to stand still.
") vampire_marks = TRUE - if (!src.other_DNA.len) - src.other_DNA += M.dna.unique_enzymes + if (!LAZYLEN(src.other_DNA)) + LAZYADD(src.other_DNA, M.dna.unique_enzymes) src.other_DNA_type = "saliva" while (do_after(user, 25, 5, 1)) diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 7ccd2c76ce2..aa04a75bcbe 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -35,7 +35,7 @@ /obj/item/weapon/reagent_containers/borghypo/Destroy() processing_objects.Remove(src) - ..() + return ..() /obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+ if(++charge_tick < recharge_time) diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm index c3a0e8224dc..d520483d47d 100644 --- a/code/modules/reagents/reagent_containers/food/lunch.dm +++ b/code/modules/reagents/reagent_containers/food/lunch.dm @@ -1,87 +1,97 @@ -var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/snacks/sandwich, - /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/margheritaslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/tastybread, - /obj/item/weapon/reagent_containers/food/snacks/liquidfood, - /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, - /obj/item/weapon/reagent_containers/food/snacks/tossedsalad, - /obj/item/weapon/reagent_containers/food/snacks/koiswaffles, - /obj/item/weapon/reagent_containers/food/snacks/funnelcake, - /obj/item/weapon/reagent_containers/food/snacks/hotdog) +var/list/lunchables_lunches_ = list( + /obj/item/weapon/reagent_containers/food/snacks/sandwich, + /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/margheritaslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/tastybread, + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, + /obj/item/weapon/reagent_containers/food/snacks/tossedsalad, + /obj/item/weapon/reagent_containers/food/snacks/koiswaffles, + /obj/item/weapon/reagent_containers/food/snacks/funnelcake, + /obj/item/weapon/reagent_containers/food/snacks/hotdog +) -var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly, - /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, - /obj/item/weapon/reagent_containers/food/snacks/muffin, - /obj/item/weapon/reagent_containers/food/snacks/popcorn, - /obj/item/weapon/reagent_containers/food/snacks/sosjerky, - /obj/item/weapon/reagent_containers/food/snacks/no_raisin, - /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie, - /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers, - /obj/item/weapon/reagent_containers/food/snacks/poppypretzel, - /obj/item/weapon/reagent_containers/food/snacks/carrotfries, - /obj/item/weapon/reagent_containers/food/snacks/candiedapple, - /obj/item/weapon/reagent_containers/food/snacks/applepie, - /obj/item/weapon/reagent_containers/food/snacks/cherrypie, - /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, - /obj/item/weapon/reagent_containers/food/snacks/appletart, - /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/limecakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/watermelonslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/applecakeslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/filled, - /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks, - /obj/item/weapon/reagent_containers/food/snacks/friedkois, - /obj/item/weapon/reagent_containers/food/snacks/meatsnack, - /obj/item/weapon/reagent_containers/food/snacks/maps, - /obj/item/weapon/reagent_containers/food/snacks/nathisnack) +var/list/lunchables_snacks_ = list( + /obj/item/weapon/reagent_containers/food/snacks/donut/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/muffin, + /obj/item/weapon/reagent_containers/food/snacks/popcorn, + /obj/item/weapon/reagent_containers/food/snacks/sosjerky, + /obj/item/weapon/reagent_containers/food/snacks/no_raisin, + /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie, + /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers, + /obj/item/weapon/reagent_containers/food/snacks/poppypretzel, + /obj/item/weapon/reagent_containers/food/snacks/carrotfries, + /obj/item/weapon/reagent_containers/food/snacks/candiedapple, + /obj/item/weapon/reagent_containers/food/snacks/applepie, + /obj/item/weapon/reagent_containers/food/snacks/cherrypie, + /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, + /obj/item/weapon/reagent_containers/food/snacks/appletart, + /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/limecakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/applecakeslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/filled, + /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks, + /obj/item/weapon/reagent_containers/food/snacks/friedkois, + /obj/item/weapon/reagent_containers/food/snacks/meatsnack, + /obj/item/weapon/reagent_containers/food/snacks/maps, + /obj/item/weapon/reagent_containers/food/snacks/nathisnack +) -var/list/lunchables_drinks_ = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola, - /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, - /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, - /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, - /obj/item/weapon/reagent_containers/food/drinks/cans/starkist, - /obj/item/weapon/reagent_containers/food/drinks/cans/space_up, - /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, - /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, - /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, - /obj/item/weapon/reagent_containers/food/drinks/cans/tonic, - /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater) +var/list/lunchables_drinks_ = list( + /obj/item/weapon/reagent_containers/food/drinks/cans/cola, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, + /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, + /obj/item/weapon/reagent_containers/food/drinks/cans/starkist, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_up, + /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, + /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, + /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, + /obj/item/weapon/reagent_containers/food/drinks/cans/tonic, + /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater +) // This default list is a bit different, it contains items we don't want -var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing, - /datum/reagent/drink/doctor_delight, - /datum/reagent/drink/dry_ramen, - /datum/reagent/drink/hell_ramen, - /datum/reagent/drink/hot_ramen, - /datum/reagent/drink/nuka_cola, - /datum/reagent/drink/black_coffee, - /datum/reagent/drink/white_coffee, - /datum/reagent/drink/cafe_melange) +var/list/lunchables_drink_reagents_ = list( + /datum/reagent/drink/nothing, + /datum/reagent/drink/doctor_delight, + /datum/reagent/drink/dry_ramen, + /datum/reagent/drink/hell_ramen, + /datum/reagent/drink/hot_ramen, + /datum/reagent/drink/nuka_cola, + /datum/reagent/drink/black_coffee, + /datum/reagent/drink/white_coffee, + /datum/reagent/drink/cafe_melange +) // This default list is a bit different, it contains items we don't want -var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit, - /datum/reagent/ethanol/atomicbomb, - /datum/reagent/ethanol/beepsky_smash, - /datum/reagent/ethanol/coffee, - /datum/reagent/ethanol/hippies_delight, - /datum/reagent/ethanol/hooch, - /datum/reagent/ethanol/thirteenloko, - /datum/reagent/ethanol/manhattan_proj, - /datum/reagent/ethanol/neurotoxin, - /datum/reagent/ethanol/pwine, - /datum/reagent/ethanol/threemileisland, - /datum/reagent/ethanol/toxins_special) +var/list/lunchables_ethanol_reagents_ = list( + /datum/reagent/ethanol/acid_spit, + /datum/reagent/ethanol/atomicbomb, + /datum/reagent/ethanol/beepsky_smash, + /datum/reagent/ethanol/coffee, + /datum/reagent/ethanol/hippies_delight, + /datum/reagent/ethanol/hooch, + /datum/reagent/ethanol/thirteenloko, + /datum/reagent/ethanol/manhattan_proj, + /datum/reagent/ethanol/neurotoxin, + /datum/reagent/ethanol/pwine, + /datum/reagent/ethanol/threemileisland, + /datum/reagent/ethanol/toxins_special +) /proc/lunchables_lunches() if(!(lunchables_lunches_[lunchables_lunches_[1]])) @@ -113,7 +123,8 @@ var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit, for(var/lunch in lunches) var/obj/O = lunch .[initial(O.name)] = lunch - return sortAssoc(.) + + sortTim(., /proc/cmp_text_asc) /proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types) . = list() @@ -122,4 +133,5 @@ var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit, continue var/datum/reagent/reagent = reagent_type .[initial(reagent.name)] = initial(reagent.id) - return sortAssoc(.) + + sortTim(., /proc/cmp_text_asc) diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm index c853706ad54..47bec32c575 100644 --- a/code/modules/reagents/reagent_containers/food/sandwich.dm +++ b/code/modules/reagents/reagent_containers/food/sandwich.dm @@ -76,7 +76,7 @@ /obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy() for(var/obj/item/O in ingredients) qdel(O) - ..() + return ..() /obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user) ..(user) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 9a997c97c3d..10f6fbcb830 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -230,7 +230,7 @@ if(contents) for(var/atom/movable/something in contents) something.loc = get_turf(src) - ..() + return ..() //Code for dipping food in batter @@ -982,13 +982,13 @@ /obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() if (src.warm) - spawn(4200) - if(src) - src.warm = 0 - for(var/reagent in heated_reagents) - src.reagents.del_reagent(reagent) - src.name = initial(name) - return + addtimer(CALLBACK(src, .proc/cool_down)) + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cool_down() + warm = FALSE + for(var/reagent in heated_reagents) + reagents.del_reagent(reagent) + name = initial(name) /obj/item/weapon/reagent_containers/food/snacks/donkpocket/cook() ..() diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 6d557fb1584..5ddb0b7b5dc 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -84,18 +84,45 @@ else user << "It is spent." +/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack + name = "stimpack" + desc = "A simple chemical cocktail of hyperzine and tramadol designed to boost efficiency by 6,000% (estimated). Hoo-rah!" + volume = 20 + amount_per_transfer_from_this = 20 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack/New() + ..() + reagents.add_reagent("hyperzine", 12) + reagents.add_reagent("tramadol", 8) + update_icon() + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival + name = "survival autoinjector" + desc = "A special cocktail designed to keep you alive in the field should disaster seek to prevail." + volume = 35 + amount_per_transfer_from_this = 35 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival/New() + ..() + reagents.add_reagent("tricordrazine", 15) + reagents.add_reagent("inaprovaline", 5) + reagents.add_reagent("dexalinp", 5) + reagents.add_reagent("oxycodone", 5) + reagents.add_reagent("methylphenidate", 5) + update_icon() + /obj/item/weapon/reagent_containers/hypospray/combat name = "combat hypospray" desc = "A hypospray loaded with combat stimulants." item_state = "combat_hypo" icon_state = "combat_hypo" volume = 20 - -/obj/item/weapon/reagent_containers/hypospray/combat/New() + +/obj/item/weapon/reagent_containers/hypospray/combat/New() ..() reagents.add_reagent("oxycodone", 5) reagents.add_reagent("synaptizine", 5) reagents.add_reagent("hyperzine", 5) reagents.add_reagent("arithrazine", 5) - + return diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 823855d1ca3..d14e15f5f38 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -182,6 +182,10 @@ explode() return ..() +/obj/structure/reagent_dispensers/fueltank/tesla_act() + ..() + explode() + /obj/structure/reagent_dispensers/fueltank/Move() if (..() && modded) leak_fuel(amount_per_transfer_from_this/10.0) @@ -288,9 +292,10 @@ icon_state = "oiltank" amount_per_transfer_from_this = 120 capacity = 5000 -/obj/structure/reagent_dispensers/cookingoil/New() - ..() - reagents.add_reagent("cornoil",capacity) + +/obj/structure/reagent_dispensers/cookingoil/Initialize() + . = ..() + reagents.add_reagent("cornoil",capacity) /obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) if(Proj.get_structure_damage()) @@ -302,4 +307,4 @@ /obj/structure/reagent_dispensers/cookingoil/proc/explode() reagents.splash_area(get_turf(src), 3) visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 2f49b7b0842..b508a10a905 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -1,6 +1,20 @@ //conveyor2 is pretty much like the original, except it supports corners, but not diverters. //note that corner pieces transfer stuff clockwise when running forward, and anti-clockwise backwards. +/datum/wifi/sender/conveyor/proc/set_dir(direction) + for (var/datum/wifi/receiver/conveyor/C in connected_devices) + C.direction_change(direction) + +/datum/wifi/receiver/conveyor/proc/direction_change(direction) + var/obj/machinery/conveyor/C = parent + C.operating = direction + C.setmove() + +/datum/wifi/receiver/conveyor/switch/direction_change(direction) + var/obj/machinery/conveyor_switch/S = parent + S.position = direction + S.update() + /obj/machinery/conveyor icon = 'icons/obj/recycling.dmi' icon_state = "conveyor0" @@ -16,13 +30,14 @@ var/list/affecting // the list of all items that will be moved this ptick var/id = "" // the control ID - must match controller ID + var/datum/wifi/receiver/conveyor/antenna /obj/machinery/conveyor/centcom_auto id = "round_end_belt" // create a conveyor -/obj/machinery/conveyor/New(loc, newdir, on = 0) - ..(loc) +/obj/machinery/conveyor/Initialize(mapload, newdir, on = 0) + . = ..() if(newdir) set_dir(newdir) @@ -37,7 +52,13 @@ operating = 1 setmove() + if (id) + antenna = new(id, src) +/obj/machinery/conveyor/Destroy() + QDEL_NULL(antenna) + affecting = null + return ..() /obj/machinery/conveyor/proc/setmove() if(operating == 1) @@ -167,46 +188,37 @@ var/id = "" // must match conveyor IDs to control them - var/list/conveyors // the list of converyors that are controlled by this switch anchored = 1 + var/datum/wifi/receiver/conveyor/switch/receiver + var/datum/wifi/sender/conveyor/transmitter -/obj/machinery/conveyor_switch/New(loc, newid) - ..(loc) +/obj/machinery/conveyor_switch/Initialize(mapload, newid) + . = ..() if(!id) id = newid update() - spawn(5) // allow map load - conveyors = list() - for(var/obj/machinery/conveyor/C in world) - if(C.id == id) - conveyors += C + if (id) + receiver = new(id, src) + transmitter = new(id, src) + +/obj/machinery/conveyor_switch/Destroy() + QDEL_NULL(receiver) + QDEL_NULL(transmitter) + return ..() // update the icon depending on the position /obj/machinery/conveyor_switch/proc/update() - if(position<0) + if(position < 0) icon_state = "switch-rev" - else if(position>0) + else if(position > 0) icon_state = "switch-fwd" else icon_state = "switch-off" - -// timed process -// if the switch changed, update the linked conveyors - -/obj/machinery/conveyor_switch/process() - if(!operated) - return - operated = 0 - - for(var/obj/machinery/conveyor/C in conveyors) - C.operating = position - C.setmove() - // attack with hand, switch position /obj/machinery/conveyor_switch/attack_hand(mob/user) if(!allowed(user)) @@ -227,12 +239,7 @@ operated = 1 update() - // find any switches with same id as this one, and set their positions to match us - for(var/obj/machinery/conveyor_switch/S in world) - if(S.id == src.id) - S.position = position - S.update() - + transmitter.set_dir(position) /obj/machinery/conveyor_switch/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/crowbar)) @@ -256,13 +263,7 @@ operated = 1 update() - // find any switches with same id as this one, and set their positions to match us - for(var/obj/machinery/conveyor_switch/S in world) - if(S.id == src.id) - S.position = position - S.update() - - + transmitter.set_dir(position) // // CONVEYOR CONSTRUCTION STARTS HERE diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 389df69c14a..111c352bed4 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -29,18 +29,17 @@ // create a new disposal // find the attached trunk (if present) and init gas resvr. -/obj/machinery/disposal/New() - ..() - spawn(5) - trunk = locate() in src.loc - if(!trunk) - mode = 0 - flush = 0 - else - trunk.linked = src // link the pipe trunk to self +/obj/machinery/disposal/Initialize() + . = ..() + trunk = locate() in src.loc + if(!trunk) + mode = 0 + flush = 0 + else + trunk.linked = src // link the pipe trunk to self - air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME) - update() + air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME) + update() /obj/machinery/disposal/Destroy() eject() @@ -409,12 +408,13 @@ // perform a flush /obj/machinery/disposal/proc/flush() + set waitfor = FALSE flushing = 1 flick("[icon_state]-flush", src) var/wrapcheck = 0 - var/obj/structure/disposalholder/H = new() // virtual holder object which actually + var/obj/disposalholder/H = new() // virtual holder object which actually // travels through the pipes. //Hacky test to get drones to mail themselves through disposals. for(var/mob/living/silicon/robot/drone/D in src) @@ -456,7 +456,7 @@ // called when holder is expelled from a disposal // should usually only occur if the pipe network is modified -/obj/machinery/disposal/proc/expel(var/obj/structure/disposalholder/H) +/obj/machinery/disposal/proc/expel(var/obj/disposalholder/H) var/turf/target playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) @@ -467,9 +467,7 @@ AM.forceMove(src.loc) AM.pipe_eject(0) if(!istype(AM,/mob/living/silicon/robot/drone)) //Poor drones kept smashing windows and taking system damage being fired out of disposals. ~Z - spawn(1) - if(AM) - AM.throw_at(target, 5, 1) + addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, target, 5, 1), 1) H.vent_gas(loc) qdel(H) @@ -495,10 +493,9 @@ // contents will be items flushed by the disposal // this allows the gas flushed to be tracked -/obj/structure/disposalholder +/obj/disposalholder invisibility = 101 var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point - var/active = 0 // true if the holder is moving, otherwise inactive dir = 0 var/count = 2048 //*** can travel 2048 steps before going inactive (in case of loops) var/destinationTag = "" // changes if contains a delivery container @@ -507,152 +504,148 @@ var/partialTag = "" //set by a partial tagger the first time round, then put in destinationTag if it goes through again. + var/tmp/obj/structure/disposalpipe/tick_last // initialize a holder from the contents of a disposal unit - proc/init(var/obj/machinery/disposal/D, var/datum/gas_mixture/flush_gas) - gas = flush_gas// transfer gas resv. into holder object -- let's be explicit about the data this proc consumes, please. +/obj/disposalholder/proc/init(var/obj/machinery/disposal/D, var/datum/gas_mixture/flush_gas) + gas = flush_gas// transfer gas resv. into holder object -- let's be explicit about the data this proc consumes, please. - //Check for any living mobs trigger hasmob. - //hasmob effects whether the package goes to cargo or its tagged destination. - for(var/mob/living/M in D) - if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) - hasmob = 1 + //Check for any living mobs trigger hasmob. + //hasmob effects whether the package goes to cargo or its tagged destination. + for(var/mob/living/M in D) + if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) + hasmob = 1 - //Checks 1 contents level deep. This means that players can be sent through disposals... - //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) - for(var/obj/O in D) - if(O.contents) - for(var/mob/living/M in O.contents) - if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) - hasmob = 1 + //Checks 1 contents level deep. This means that players can be sent through disposals... + //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) + for(var/obj/O in D) + if(O.contents) + for(var/mob/living/M in O.contents) + if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) + hasmob = 1 - // now everything inside the disposal gets put into the holder - // note AM since can contain mobs or objs - for(var/atom/movable/AM in D) - AM.forceMove(src) - if(istype(AM, /obj/structure/bigDelivery) && !hasmob) - var/obj/structure/bigDelivery/T = AM - src.destinationTag = T.sortTag - if(istype(AM, /obj/item/smallDelivery) && !hasmob) - var/obj/item/smallDelivery/T = AM - src.destinationTag = T.sortTag - //Drones can mail themselves through maint. - if(istype(AM, /mob/living/silicon/robot/drone)) - var/mob/living/silicon/robot/drone/drone = AM - src.destinationTag = drone.mail_destination + // now everything inside the disposal gets put into the holder + // note AM since can contain mobs or objs + for(var/atom/movable/AM in D) + AM.forceMove(src) + if(istype(AM, /obj/structure/bigDelivery) && !hasmob) + var/obj/structure/bigDelivery/T = AM + src.destinationTag = T.sortTag + if(istype(AM, /obj/item/smallDelivery) && !hasmob) + var/obj/item/smallDelivery/T = AM + src.destinationTag = T.sortTag + //Drones can mail themselves through maint. + if(istype(AM, /mob/living/silicon/robot/drone)) + var/mob/living/silicon/robot/drone/drone = AM + src.destinationTag = drone.mail_destination // start the movement process // argument is the disposal unit the holder started in - proc/start(var/obj/machinery/disposal/D) - if(!D.trunk) - D.expel(src) // no trunk connected, so expel immediately - return - - forceMove(D.trunk) - active = 1 - set_dir(DOWN) - spawn(1) - move() // spawn off the movement process - +/obj/disposalholder/proc/start(var/obj/machinery/disposal/D) + if(!D.trunk) + D.expel(src) // no trunk connected, so expel immediately return - // movement process, persists while holder is moving through pipes - proc/move() - var/obj/structure/disposalpipe/last - while(active) - sleep(1) // was 1 - if(!loc) return // check if we got GC'd + forceMove(D.trunk) + set_dir(DOWN) + START_PROCESSING(SSdisposals, src) - if(hasmob && prob(3)) - for(var/mob/living/H in src) - if(!istype(H,/mob/living/silicon/robot/drone)) //Drones use the mailing code to move through the disposal system, - H.take_overall_damage(20, 0, "Blunt Trauma")//horribly maim any living creature jumping down disposals. c'est la vie +/obj/disposalholder/process() // For the new SSdisposals-based movement. + if (hasmob && prob(3)) + for(var/mob/living/H in src) + if(!istype(H,/mob/living/silicon/robot/drone)) //Drones use the mailing code to move through the disposal system, + H.take_overall_damage(20, 0, "Blunt Trauma")//horribly maim any living creature jumping down disposals. c'est la vie - var/obj/structure/disposalpipe/curr = loc - last = curr - curr = curr.transfer(src) - - if(!loc) return //side effects - - if(!curr) - last.expel(src, loc, dir) - - // - if(!(count--)) - active = 0 + var/obj/structure/disposalpipe/curr = loc + if (!loc) + STOP_PROCESSING(SSdisposals, src) + tick_last = null + crash_with("disposalholder processing in nullspace!") return + tick_last = curr + curr = curr.transfer(src) + if (!loc) + STOP_PROCESSING(SSdisposals, src) + tick_last = null + return - // find the turf which should contain the next pipe - proc/nextloc() - return get_step(loc,dir) + if (!curr) + //spawn (0) // expel() can sleep, so we gotta fork to not upset SSdisposals. + STOP_PROCESSING(SSdisposals, src) + tick_last.expel(src, loc.loc, dir) + + if (!(count--)) + STOP_PROCESSING(SSdisposals, src) + tick_last = null + +// find the turf which should contain the next pipe +/obj/disposalholder/proc/nextloc() + return get_step(loc,dir) // find a matching pipe on a turf - proc/findpipe(var/turf/T) - - if(!T) - return null - - var/fdir = turn(dir, 180) // flip the movement direction - for(var/obj/structure/disposalpipe/P in T) - if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir - return P - // if no matching pipe, return null +/obj/disposalholder/proc/findpipe(var/turf/T) + if(!T) return null + var/fdir = turn(dir, 180) // flip the movement direction + for(var/obj/structure/disposalpipe/P in T) + if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir + return P + // if no matching pipe, return null + return null + // merge two holder objects // used when a a holder meets a stuck holder - proc/merge(var/obj/structure/disposalholder/other) - for(var/atom/movable/AM in other) - AM.forceMove(src) // move everything in other holder to this one - if(ismob(AM)) - var/mob/M = AM - if(M.client) // if a client mob, update eye to follow this holder - M.client.eye = src +/obj/disposalholder/proc/merge(obj/disposalholder/other) + for(var/atom/movable/AM in other) + AM.forceMove(src) // move everything in other holder to this one + if(ismob(AM)) + var/mob/M = AM + if(M.client) // if a client mob, update eye to follow this holder + M.client.eye = src - qdel(other) + qdel(other) +/obj/disposalholder/proc/settag(new_tag) + destinationTag = new_tag - proc/settag(var/new_tag) +/obj/disposalholder/proc/setpartialtag(new_tag) + if(partialTag == new_tag) destinationTag = new_tag - - proc/setpartialtag(var/new_tag) - if(partialTag == new_tag) - destinationTag = new_tag - partialTag = "" - else - partialTag = new_tag + partialTag = "" + else + partialTag = new_tag // called when player tries to move while in a pipe - relaymove(mob/user as mob) - - if(!istype(user,/mob/living)) - return - - var/mob/living/U = user - - if (U.stat || U.last_special <= world.time) - return - - U.last_special = world.time+100 - - if (src.loc) - for (var/mob/M in hearers(src.loc.loc)) - M << "CLONG, clong!" - - playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0) - - // called to vent all gas in holder to a location - proc/vent_gas(var/atom/location) - location.assume_air(gas) // vent all gas to turf +/obj/disposalholder/relaymove(mob/user as mob) + if(!istype(user,/mob/living)) return -/obj/structure/disposalholder/Destroy() - qdel(gas) - active = 0 + var/mob/living/U = user + + if (U.stat || U.last_special <= world.time) + return + + U.last_special = world.time+100 + + if (src.loc) + for (var/mob/M in hearers(src.loc.loc)) + M << "CLONG, clong!" + + playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0) + + // called to vent all gas in holder to a location +/obj/disposalholder/proc/vent_gas(atom/location) + location.assume_air(gas) // vent all gas to turf + +/obj/disposalholder/Destroy() + STOP_PROCESSING(SSdisposals, src) + QDEL_NULL(gas) + tick_last = null return ..() // Disposal pipes @@ -673,282 +666,18 @@ var/sortType = "" var/subtype = 0 // new pipe, set the icon_state as on map - New() - ..() - base_icon_state = icon_state - return - - // pipe is deleted - // ensure if holder is present, it is expelled - Destroy() - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // deleting pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.forceMove(T) - AM.pipe_eject(0) - qdel(H) - ..() - return - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - ..() - - // returns the direction of the next pipe object, given the entrance dir - // by default, returns the bitmask of remaining directions - proc/nextdir(var/fromdir) - return dpdir & (~turn(fromdir, 180)) - - // transfer the holder through this pipe segment - // overriden for special behaviour - // - proc/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.set_dir(nextdir) - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null - - return P - - - // update the icon_state to reflect hidden status - proc/update() - var/turf/T = src.loc - hide(!T.is_plating() && !istype(T,/turf/space)) // space never hides pipes - - // hide called by levelupdate if turf intact status changes - // change visibility status and force update of icon - hide(var/intact) - invisibility = intact ? 101: 0 // hide if floor is intact - updateicon() - - // update actual icon_state depending on visibility - // if invisible, append "f" to icon_state to show faded version - // this will be revealed if a T-scanner is used - // if visible, use regular icon_state - proc/updateicon() -/* if(invisibility) //we hide things with alpha now, no need for transparent icons - icon_state = "[base_icon_state]f" - else - icon_state = base_icon_state*/ - icon_state = base_icon_state - return - - - // expel the held objects into a turf - // called when there is a break in the pipe - proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction) - if(!istype(H)) - return - - // Empty the holder if it is expelled into a dense turf. - // Leaving it intact and sitting in a wall is stupid. - if(T.density) - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(0) - qdel(H) - return - - - if(!T.is_plating() && istype(T,/turf/simulated/floor)) //intact floor, pop the tile - var/turf/simulated/floor/F = T - F.break_tile() - new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff - - var/turf/target - if(direction) // direction is specified - if(istype(T, /turf/space)) // if ended in space, then range is unlimited - target = get_edge_target_turf(T, direction) - else // otherwise limit to 10 tiles - target = get_ranged_target_turf(T, direction, 10) - - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - AM.forceMove(T) - AM.pipe_eject(direction) - spawn(1) - if(AM) - AM.throw_at(target, 100, 1) - H.vent_gas(T) - qdel(H) - - else // no specified direction, so throw in random direction - - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - - AM.forceMove(T) - AM.pipe_eject(0) - spawn(1) - if(AM) - AM.throw_at(target, 5, 1) - - H.vent_gas(T) // all gas vent to turf - qdel(H) - - return - - // call to break the pipe - // will expel any holder inside at the time - // then delete the pipe - // remains : set to leave broken pipe pieces in place - proc/broken(var/remains = 0) - if(remains) - for(var/D in cardinal) - if(D & dpdir) - var/obj/structure/disposalpipe/broken/P = new(src.loc) - P.set_dir(D) - - src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // broken pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.forceMove(T) - AM.pipe_eject(0) - qdel(H) - return - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - - spawn(2) // delete pipe after 2 ticks to ensure expel proc finished - qdel(src) - - - // pipe affected by explosion - ex_act(severity) - - switch(severity) - if(1.0) - broken(0) - return - if(2.0) - health -= rand(5,15) - healthcheck() - return - if(3.0) - health -= rand(0,15) - healthcheck() - return - - - // test health for brokenness - proc/healthcheck() - if(health < -2) - broken(0) - else if(health<1) - broken(1) - return - - //attack by item - //weldingtool: unfasten and convert to obj/disposalconstruct - - attackby(var/obj/item/I, var/mob/user) - - var/turf/T = src.loc - if(!T.is_plating()) - return // prevent interaction with T-scanner revealed pipes - src.add_fingerprint(user) - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = I - - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - // check if anything changed over 2 seconds - var/turf/uloc = user.loc - var/atom/wloc = W.loc - user << "Slicing the disposal pipe." - sleep(30) - if(!W.isOn()) return - if(user.loc == uloc && wloc == W.loc) - welded() - else - user << "You must stay still while welding the pipe." - else - user << "You need more welding fuel to cut the pipe." - return - - // called when pipe is cut with welder - proc/welded() - - var/obj/structure/disposalconstruct/C = new (src.loc) - switch(base_icon_state) - if("pipe-s") - C.ptype = 0 - if("pipe-c") - C.ptype = 1 - if("pipe-j1") - C.ptype = 2 - if("pipe-j2") - C.ptype = 3 - if("pipe-y") - C.ptype = 4 - if("pipe-t") - C.ptype = 5 - if("pipe-j1s") - C.ptype = 9 - C.sortType = sortType - if("pipe-j2s") - C.ptype = 10 - C.sortType = sortType -///// Z-Level stuff - if("pipe-u") - C.ptype = 11 - if("pipe-d") - C.ptype = 12 -///// Z-Level stuff - if("pipe-tagger") - C.ptype = 13 - if("pipe-tagger-partial") - C.ptype = 14 - C.subtype = src.subtype - src.transfer_fingerprints_to(C) - C.set_dir(dir) - C.density = 0 - C.anchored = 1 - C.update() - - qdel(src) +/obj/structure/disposalpipe/Initialize() + . = ..() + base_icon_state = icon_state // pipe is deleted // ensure if holder is present, it is expelled /obj/structure/disposalpipe/Destroy() - var/obj/structure/disposalholder/H = locate() in src + var/obj/disposalholder/H = locate() in src if(H) // holder was present - H.active = 0 + STOP_PROCESSING(SSdisposals, H) var/turf/T = src.loc if(T.density) // deleting pipe is inside a dense turf (wall) @@ -958,136 +687,380 @@ AM.forceMove(T) AM.pipe_eject(0) qdel(H) - ..() + + return ..() + + // otherwise, do normal expel from turf + if(H) + expel(H, T, 0) + return ..() + +// returns the direction of the next pipe object, given the entrance dir +// by default, returns the bitmask of remaining directions +/obj/structure/disposalpipe/proc/nextdir(var/fromdir) + return dpdir & (~turn(fromdir, 180)) + +// transfer the holder through this pipe segment +// overriden for special behaviour +// +/obj/structure/disposalpipe/proc/transfer(var/obj/disposalholder/H) + var/nextdir = nextdir(H.dir) + H.set_dir(nextdir) + var/turf/T = H.nextloc() + var/obj/structure/disposalpipe/P = H.findpipe(T) + + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/disposalholder/H2 = locate() in P + if(H2 && !H2.isprocessing) + H.merge(H2) + + H.forceMove(P) + else // if wasn't a pipe, then set loc to turf + H.forceMove(T) + return null + + return P + + +// update the icon_state to reflect hidden status +/obj/structure/disposalpipe/proc/update() + var/turf/T = src.loc + hide(!T.is_plating() && !istype(T,/turf/space)) // space never hides pipes + +// hide called by levelupdate if turf intact status changes +// change visibility status and force update of icon +/obj/structure/disposalpipe/hide(var/intact) + invisibility = intact ? 101: 0 // hide if floor is intact + updateicon() + +// update actual icon_state depending on visibility +// if invisible, append "f" to icon_state to show faded version +// this will be revealed if a T-scanner is used +// if visible, use regular icon_state +/obj/structure/disposalpipe/proc/updateicon() +/* if(invisibility) //we hide things with alpha now, no need for transparent icons + icon_state = "[base_icon_state]f" + else + icon_state = base_icon_state*/ + icon_state = base_icon_state + return + + + // expel the held objects into a turf + // called when there is a break in the pipe +/obj/structure/disposalpipe/proc/expel(var/obj/disposalholder/H, var/turf/T, var/direction) + if(!istype(H)) + return + + // Empty the holder if it is expelled into a dense turf. + // Leaving it intact and sitting in a wall is stupid. + if(T.density) + for(var/atom/movable/AM in H) + AM.loc = T + AM.pipe_eject(0) + qdel(H) + return + + if(!T.is_plating() && istype(T,/turf/simulated/floor)) //intact floor, pop the tile + var/turf/simulated/floor/F = T + F.break_tile() + new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff + + var/turf/target + if(direction) // direction is specified + if(istype(T, /turf/space)) // if ended in space, then range is unlimited + target = get_edge_target_turf(T, direction) + else // otherwise limit to 10 tiles + target = get_ranged_target_turf(T, direction, 10) + + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(H) + for(var/atom/movable/AM in H) + AM.forceMove(T) + AM.pipe_eject(direction) + // addtimer will check AM for null. + addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, target, 100, 1), 1) + H.vent_gas(T) + qdel(H) + + else // no specified direction, so throw in random direction + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(H) + for(var/atom/movable/AM in H) + target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) + + AM.forceMove(T) + AM.pipe_eject(0) + addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, target, 5, 1), 1) + + H.vent_gas(T) // all gas vent to turf + qdel(H) + +// call to break the pipe +// will expel any holder inside at the time +// then delete the pipe +// remains : set to leave broken pipe pieces in place +/obj/structure/disposalpipe/proc/broken(var/remains = 0) + if(remains) + for(var/D in cardinal) + if(D & dpdir) + var/obj/structure/disposalpipe/broken/P = new(src.loc) + P.set_dir(D) + + src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) + var/obj/disposalholder/H = locate() in src + if(H) + // holder was present + STOP_PROCESSING(SSdisposals, H) + var/turf/T = src.loc + if(T.density) + // broken pipe is inside a dense turf (wall) + // this is unlikely, but just dump out everything into the turf in case + + for(var/atom/movable/AM in H) + AM.forceMove(T) + AM.pipe_eject(0) + qdel(H) return // otherwise, do normal expel from turf if(H) expel(H, T, 0) - ..() + + QDEL_IN(src, 2) // delete pipe after 2 ticks to ensure expel proc finished + + +// pipe affected by explosion +/obj/structure/disposalpipe/ex_act(severity) + switch(severity) + if(1.0) + broken(0) + return + if(2.0) + health -= rand(5,15) + healthcheck() + return + if(3.0) + health -= rand(0,15) + healthcheck() + return + + +// test health for brokenness +/obj/structure/disposalpipe/proc/healthcheck() + if(health < -2) + broken(0) + else if(health<1) + broken(1) + +//attack by item +//weldingtool: unfasten and convert to obj/disposalconstruct + +/obj/structure/disposalpipe/attackby(var/obj/item/I, var/mob/user) + var/turf/T = src.loc + if(!T.is_plating()) + return // prevent interaction with T-scanner revealed pipes + src.add_fingerprint(user) + if(istype(I, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = I + + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + // check if anything changed over 3 seconds + user << "Slicing the disposal pipe..." + if (do_after(user, 3 SECONDS, act_target = src)) + if(!src || !W.isOn()) return + welded() + else + user << "You must stay still while welding the pipe." + else + user << "You need more welding fuel to cut the pipe." + +// called when pipe is cut with welder +/obj/structure/disposalpipe/proc/welded() + var/obj/structure/disposalconstruct/C = new (src.loc) + switch(base_icon_state) + if("pipe-s") + C.ptype = 0 + if("pipe-c") + C.ptype = 1 + if("pipe-j1") + C.ptype = 2 + if("pipe-j2") + C.ptype = 3 + if("pipe-y") + C.ptype = 4 + if("pipe-t") + C.ptype = 5 + if("pipe-j1s") + C.ptype = 9 + C.sortType = sortType + if("pipe-j2s") + C.ptype = 10 + C.sortType = sortType +///// Z-Level stuff + if("pipe-u") + C.ptype = 11 + if("pipe-d") + C.ptype = 12 +///// Z-Level stuff + if("pipe-tagger") + C.ptype = 13 + if("pipe-tagger-partial") + C.ptype = 14 + C.subtype = src.subtype + src.transfer_fingerprints_to(C) + C.set_dir(dir) + C.density = 0 + C.anchored = 1 + C.update() + + qdel(src) + +// pipe is deleted +// ensure if holder is present, it is expelled +/obj/structure/disposalpipe/Destroy() + var/obj/disposalholder/H = locate() in src + if(H) + // holder was present + STOP_PROCESSING(SSdisposals, H) + var/turf/T = src.loc + if(T.density) + // deleting pipe is inside a dense turf (wall) + // this is unlikely, but just dump out everything into the turf in case + + for(var/atom/movable/AM in H) + AM.forceMove(T) + AM.pipe_eject(0) + qdel(H) + + return ..() + + // otherwise, do normal expel from turf + if(H) + expel(H, T, 0) + return ..() /obj/structure/disposalpipe/hides_under_flooring() return 1 // *** TEST verb //client/verb/dispstop() -// for(var/obj/structure/disposalholder/H in world) +// for(var/obj/disposalholder/H in world) // H.active = 0 // a straight or bent segment /obj/structure/disposalpipe/segment icon_state = "pipe-s" - New() - ..() - if(icon_state == "pipe-s") - dpdir = dir | turn(dir, 180) - else - dpdir = dir | turn(dir, -90) +/obj/structure/disposalpipe/segment/Initialize() + . = ..() + if(icon_state == "pipe-s") + dpdir = dir | turn(dir, 180) + else + dpdir = dir | turn(dir, -90) - update() - return + update() ///// Z-Level stuff /obj/structure/disposalpipe/up icon_state = "pipe-u" - New() - ..() - dpdir = dir - update() - return +/obj/structure/disposalpipe/up/Initialize() + . = ..() + dpdir = dir + update() - nextdir(var/fromdir) - var/nextdir - if(fromdir == 11) - nextdir = dir +/obj/structure/disposalpipe/up/nextdir(var/fromdir) + var/nextdir + if(fromdir == 11) + nextdir = dir + else + nextdir = 12 + return nextdir + +/obj/structure/disposalpipe/up/transfer(var/obj/disposalholder/H) + var/nextdir = nextdir(H.dir) + H.set_dir(nextdir) + + var/turf/T + var/obj/structure/disposalpipe/P + + if(nextdir == 12) + T = GetAbove(src) + if(!T) + H.forceMove(loc) + return else - nextdir = 12 - return nextdir + for(var/obj/structure/disposalpipe/down/F in T) + P = F - transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.set_dir(nextdir) + else + T = get_step(src.loc, H.dir) + P = H.findpipe(T) - var/turf/T - var/obj/structure/disposalpipe/P + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/disposalholder/H2 = locate() in P + if(H2 && !H2.isprocessing) + H.merge(H2) - if(nextdir == 12) - T = GetAbove(src) - if(!T) - H.forceMove(loc) - return - else - for(var/obj/structure/disposalpipe/down/F in T) - P = F + H.forceMove(P) + else // if wasn't a pipe, then set loc to turf + H.forceMove(T) + return null - else - T = get_step(src.loc, H.dir) - P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null - - return P + return P /obj/structure/disposalpipe/down icon_state = "pipe-d" - New() - ..() - dpdir = dir - update() - return +/obj/structure/disposalpipe/down/Initialize() + . = ..() + dpdir = dir + update() - nextdir(var/fromdir) - var/nextdir - if(fromdir == 12) - nextdir = dir +/obj/structure/disposalpipe/down/nextdir(var/fromdir) + var/nextdir + if(fromdir == 12) + nextdir = dir + else + nextdir = 11 + return nextdir + +/obj/structure/disposalpipe/down/transfer(var/obj/disposalholder/H) + var/nextdir = nextdir(H.dir) + H.dir = nextdir + + var/turf/T + var/obj/structure/disposalpipe/P + + if(nextdir == 11) + T = GetBelow(src) + if(!T) + H.forceMove(src.loc) + return else - nextdir = 11 - return nextdir + for(var/obj/structure/disposalpipe/up/F in T) + P = F - transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.dir = nextdir + else + T = get_step(src.loc, H.dir) + P = H.findpipe(T) - var/turf/T - var/obj/structure/disposalpipe/P + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/disposalholder/H2 = locate() in P + if(H2 && !H2.isprocessing) + H.merge(H2) - if(nextdir == 11) - T = GetBelow(src) - if(!T) - H.forceMove(src.loc) - return - else - for(var/obj/structure/disposalpipe/up/F in T) - P = F + H.forceMove(P) + else // if wasn't a pipe, then set loc to turf + H.forceMove(T) + return null - else - T = get_step(src.loc, H.dir) - P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null - - return P + return P ///// Z-Level stuff /obj/structure/disposalpipe/junction/yjunction @@ -1097,46 +1070,42 @@ /obj/structure/disposalpipe/junction icon_state = "pipe-j1" - New() - ..() - if(icon_state == "pipe-j1") - dpdir = dir | turn(dir, -90) | turn(dir,180) - else if(icon_state == "pipe-j2") - dpdir = dir | turn(dir, 90) | turn(dir,180) - else // pipe-y - dpdir = dir | turn(dir,90) | turn(dir, -90) - update() - return +/obj/structure/disposalpipe/junction/Initialize() + . = ..() + if(icon_state == "pipe-j1") + dpdir = dir | turn(dir, -90) | turn(dir,180) + else if(icon_state == "pipe-j2") + dpdir = dir | turn(dir, 90) | turn(dir,180) + else // pipe-y + dpdir = dir | turn(dir,90) | turn(dir, -90) + update() +// next direction to move +// if coming in from secondary dirs, then next is primary dir +// if coming in from primary dir, then next is equal chance of other dirs +/obj/structure/disposalpipe/junction/nextdir(var/fromdir) + var/flipdir = turn(fromdir, 180) + if(flipdir != dir) // came from secondary dir + return dir // so exit through primary + else // came from primary + // so need to choose either secondary exit + var/mask = ..(fromdir) - // next direction to move - // if coming in from secondary dirs, then next is primary dir - // if coming in from primary dir, then next is equal chance of other dirs - - nextdir(var/fromdir) - var/flipdir = turn(fromdir, 180) - if(flipdir != dir) // came from secondary dir - return dir // so exit through primary - else // came from primary - // so need to choose either secondary exit - var/mask = ..(fromdir) - - // find a bit which is set - var/setbit = 0 - if(mask & NORTH) - setbit = NORTH - else if(mask & SOUTH) - setbit = SOUTH - else if(mask & EAST) - setbit = EAST - else - setbit = WEST - - if(prob(50)) // 50% chance to choose the found bit or the other one - return setbit - else - return mask & (~setbit) + // find a bit which is set + var/setbit = 0 + if(mask & NORTH) + setbit = NORTH + else if(mask & SOUTH) + setbit = SOUTH + else if(mask & EAST) + setbit = EAST + else + setbit = WEST + if(prob(50)) // 50% chance to choose the found bit or the other one + return setbit + else + return mask & (~setbit) /obj/structure/disposalpipe/tagger name = "package tagger" @@ -1144,46 +1113,48 @@ var/sort_tag = "" var/partial = 0 - proc/updatedesc() - desc = initial(desc) - if(sort_tag) - desc += "\nIt's tagging objects with the '[sort_tag]' tag." +/obj/structure/disposalpipe/tagger/proc/updatedesc() + desc = initial(desc) + if(sort_tag) + desc += "\nIt's tagging objects with the '[sort_tag]' tag." - proc/updatename() - if(sort_tag) - name = "[initial(name)] ([sort_tag])" +/obj/structure/disposalpipe/tagger/proc/updatename() + if(sort_tag) + name = "[initial(name)] ([sort_tag])" + else + name = initial(name) + +/obj/structure/disposalpipe/tagger/Initialize() + . = ..() + dpdir = dir | turn(dir, 180) + if(sort_tag) + SSdisposals.tagger_locations |= sort_tag + + updatename() + updatedesc() + update() + +/obj/structure/disposalpipe/tagger/attackby(var/obj/item/I, var/mob/user) + if(..()) + return + + if(istype(I, /obj/item/device/destTagger)) + var/obj/item/device/destTagger/O = I + + if(O.currTag)// Tag set + sort_tag = O.currTag + playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) + user << "\blue Changed tag to '[sort_tag]'." + updatename() + updatedesc() + +/obj/structure/disposalpipe/tagger/transfer(var/obj/disposalholder/H) + if(sort_tag) + if(partial) + H.setpartialtag(sort_tag) else - name = initial(name) - - New() - . = ..() - dpdir = dir | turn(dir, 180) - if(sort_tag) tagger_locations |= sort_tag - updatename() - updatedesc() - update() - - attackby(var/obj/item/I, var/mob/user) - if(..()) - return - - if(istype(I, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = I - - if(O.currTag)// Tag set - sort_tag = O.currTag - playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - user << "\blue Changed tag to '[sort_tag]'." - updatename() - updatedesc() - - transfer(var/obj/structure/disposalholder/H) - if(sort_tag) - if(partial) - H.setpartialtag(sort_tag) - else - H.settag(sort_tag) - return ..() + H.settag(sort_tag) + return ..() /obj/structure/disposalpipe/tagger/partial //needs two passes to tag name = "partial package tagger" @@ -1200,87 +1171,88 @@ var/negdir = 0 var/sortdir = 0 - proc/updatedesc() - desc = initial(desc) - if(sortType) - desc += "\nIt's filtering objects with the '[sortType]' tag." +/obj/structure/disposalpipe/sortjunction/proc/updatedesc() + desc = initial(desc) + if(sortType) + desc += "\nIt's filtering objects with the '[sortType]' tag." - proc/updatename() - if(sortType) - name = "[initial(name)] ([sortType])" +/obj/structure/disposalpipe/sortjunction/proc/updatename() + if(sortType) + name = "[initial(name)] ([sortType])" + else + name = initial(name) + +/obj/structure/disposalpipe/sortjunction/proc/updatedir() + posdir = dir + negdir = turn(posdir, 180) + + if(icon_state == "pipe-j1s") + sortdir = turn(posdir, -90) + else if(icon_state == "pipe-j2s") + sortdir = turn(posdir, 90) + + dpdir = sortdir | posdir | negdir + +/obj/structure/disposalpipe/sortjunction/Initialize() + . = ..() + if(sortType) + SSdisposals.tagger_locations |= sortType + + updatedir() + updatename() + updatedesc() + update() + +/obj/structure/disposalpipe/sortjunction/attackby(var/obj/item/I, var/mob/user) + if(..()) + return + + if(istype(I, /obj/item/device/destTagger)) + var/obj/item/device/destTagger/O = I + + if(O.currTag)// Tag set + sortType = O.currTag + playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) + user << "\blue Changed filter to '[sortType]'." + updatename() + updatedesc() + +/obj/structure/disposalpipe/sortjunction/proc/divert_check(var/checkTag) + return sortType == checkTag + +// next direction to move +// if coming in from negdir, then next is primary dir or sortdir +// if coming in from posdir, then flip around and go back to posdir +// if coming in from sortdir, go to posdir + +/obj/structure/disposalpipe/sortjunction/nextdir(var/fromdir, var/sortTag) + if(fromdir != sortdir) // probably came from the negdir + if(divert_check(sortTag)) + return sortdir else - name = initial(name) - - proc/updatedir() - posdir = dir - negdir = turn(posdir, 180) - - if(icon_state == "pipe-j1s") - sortdir = turn(posdir, -90) - else if(icon_state == "pipe-j2s") - sortdir = turn(posdir, 90) - - dpdir = sortdir | posdir | negdir - - New() - . = ..() - if(sortType) tagger_locations |= sortType - - updatedir() - updatename() - updatedesc() - update() - - attackby(var/obj/item/I, var/mob/user) - if(..()) - return - - if(istype(I, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = I - - if(O.currTag)// Tag set - sortType = O.currTag - playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - user << "\blue Changed filter to '[sortType]'." - updatename() - updatedesc() - - proc/divert_check(var/checkTag) - return sortType == checkTag - - // next direction to move - // if coming in from negdir, then next is primary dir or sortdir - // if coming in from posdir, then flip around and go back to posdir - // if coming in from sortdir, go to posdir - - nextdir(var/fromdir, var/sortTag) - if(fromdir != sortdir) // probably came from the negdir - if(divert_check(sortTag)) - return sortdir - else - return posdir - else // came from sortdir - // so go with the flow to positive direction return posdir + else // came from sortdir + // so go with the flow to positive direction + return posdir - transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir, H.destinationTag) - H.set_dir(nextdir) - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) +/obj/structure/disposalpipe/sortjunction/transfer(var/obj/disposalholder/H) + var/nextdir = nextdir(H.dir, H.destinationTag) + H.set_dir(nextdir) + var/turf/T = H.nextloc() + var/obj/structure/disposalpipe/P = H.findpipe(T) - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/disposalholder/H2 = locate() in P + if(H2 && !H2.isprocessing) + H.merge(H2) - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null + H.forceMove(P) + else // if wasn't a pipe, then set loc to turf + H.forceMove(T) + return null - return P + return P //a three-way junction that filters all wrapped and tagged items /obj/structure/disposalpipe/sortjunction/wildcard @@ -1312,14 +1284,13 @@ icon_state = "pipe-t" var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet -/obj/structure/disposalpipe/trunk/New() - ..() +/obj/structure/disposalpipe/trunk/Initialize() + . = ..() dpdir = dir - spawn(1) - getlinked() update() - return + + getlinked() /obj/structure/disposalpipe/trunk/proc/getlinked() linked = null @@ -1334,9 +1305,8 @@ linked = O update() - return - // Override attackby so we disallow trunkremoval when somethings ontop +// Override attackby so we disallow trunkremoval when somethings ontop /obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user) //Disposal bins or chutes @@ -1366,25 +1336,20 @@ if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - // check if anything changed over 2 seconds - var/turf/uloc = user.loc - var/atom/wloc = W.loc + // check if anything changed over 3 seconds user << "Slicing the disposal pipe." - sleep(30) - if(!W.isOn()) return - if(user.loc == uloc && wloc == W.loc) + if (do_after(user, 3 SECONDS, act_target = src)) + if(!src || !W.isOn()) return welded() else user << "You must stay still while welding the pipe." else user << "You need more welding fuel to cut the pipe." - return - // would transfer to next pipe segment, but we are in a trunk - // if not entering from disposal bin, - // transfer to linked object (outlet or bin) - -/obj/structure/disposalpipe/trunk/transfer(var/obj/structure/disposalholder/H) +// would transfer to next pipe segment, but we are in a trunk +// if not entering from disposal bin, +// transfer to linked object (outlet or bin) +/obj/structure/disposalpipe/trunk/transfer(var/obj/disposalholder/H) if(H.dir == DOWN) // we just entered from a disposer return ..() // so do base transfer proc @@ -1410,6 +1375,10 @@ else return 0 +/obj/structure/disposalpipe/trunk/expel(obj/disposalholder/H) + if (!linked) + ..(H) + // a broken pipe /obj/structure/disposalpipe/broken icon_state = "pipe-b" @@ -1417,18 +1386,16 @@ // i.e. will be treated as an empty turf desc = "A broken piece of disposal pipe." - New() - ..() - update() - return +/obj/structure/disposalpipe/broken/Initialize() + . = ..() + update() - // called when welded - // for broken pipe, remove and turn into scrap - - welded() -// var/obj/item/scrap/S = new(src.loc) -// S.set_components(200,0,0) - qdel(src) +// called when welded +// for broken pipe, remove and turn into scrap +/obj/structure/disposalpipe/broken/welded() +// var/obj/item/scrap/S = new(src.loc) +// S.set_components(200,0,0) + qdel(src) // the disposal outlet machine @@ -1443,72 +1410,105 @@ var/turf/target // this will be where the output objects are 'thrown' to. var/mode = 0 - New() - ..() +/obj/structure/disposaloutlet/Initialize() + . = ..() + target = get_ranged_target_turf(src, dir, 10) - spawn(1) - target = get_ranged_target_turf(src, dir, 10) + var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc + if(trunk) + trunk.linked = src // link the pipe trunk to self - var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc - if(trunk) - trunk.linked = src // link the pipe trunk to self +/proc/disposal_log(thing) + log_debug("\[[world.time]] Disposals: [thing]") +/obj/structure/disposaloutlet/proc/expel(var/obj/disposalholder/H) + set waitfor = FALSE + flick("outlet-open", src) + playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) + sleep(20) //wait until correct animation frame + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + + if(H) + for(var/atom/movable/AM in H) + AM.forceMove(src.loc) + AM.pipe_eject(dir) + if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z + spawn(5) + AM.throw_at(target, 3, 1) + H.vent_gas(src.loc) + qdel(H) + + return +/* // expel the contents of the holder object, then delete it // called when the holder exits the outlet - proc/expel(var/obj/structure/disposalholder/H) +/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H) + disposal_log("[src] \ref[src] expel(\ref[H])") - flick("outlet-open", src) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) - sleep(20) //wait until correct animation frame - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + flick("outlet-open", src) + playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) + disposal_log("[src] (\ref[src]) registering timers.") + addtimer(CALLBACK(src, .proc/post_expel, H), 20, TIMER_UNIQUE|TIMER_CLIENT_TIME) // Sound + gas. + addtimer(CALLBACK(src, .proc/post_post_expel, H), 20 + 5, TIMER_UNIQUE|TIMER_CLIENT_TIME) // Actually throwing the items. - if(H) - for(var/atom/movable/AM in H) - AM.forceMove(src.loc) - AM.pipe_eject(dir) - if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z - spawn(5) - AM.throw_at(target, 3, 1) - H.vent_gas(src.loc) - qdel(H) +/obj/structure/disposaloutlet/proc/post_expel(obj/structure/disposalholder/H) + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + disposal_log("[src] (\ref[src]) post_expel() timer fired.") + if(H) + H.vent_gas(src.loc) +/obj/structure/disposaloutlet/proc/throw_object(atom/movable/thing) + disposal_log("[src] (\ref[src]) throw_object([thing] \ref[thing]) at [target] \ref[target] origin [loc] \ref[loc]") + thing.forceMove(loc) + thing.pipe_eject(dir) + if (!istype(thing, /mob/living/silicon/robot/drone)) + thing.throw_at(target, 3, 1) + +/obj/structure/disposaloutlet/proc/post_post_expel(obj/structure/disposalholder/H) + disposal_log("[src] \ref[src] post_post_expel(\ref[H]), [H.contents.len] movables") + for(var/atom/movable/AM in H) + AM.forceMove(src.loc) + AM.pipe_eject(dir) + if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z + AM.throw_at(target, 3, 1) + qdel(H) +*/ + +/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user) + if(!I || !user) return - - attackby(var/obj/item/I, var/mob/user) - if(!I || !user) + src.add_fingerprint(user) + if(istype(I, /obj/item/weapon/screwdriver)) + if(mode==0) + mode=1 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You remove the screws around the power connection." + return + else if(mode==1) + mode=0 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You attach the screws around the power connection." + return + else if(istype(I,/obj/item/weapon/weldingtool) && mode==1) + var/obj/item/weapon/weldingtool/W = I + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + user << "You start slicing the floorweld off the disposal outlet." + if(do_after(user,20)) + if(!src || !W.isOn()) return + user << "You slice the floorweld off the disposal outlet." + var/obj/structure/disposalconstruct/C = new (src.loc) + src.transfer_fingerprints_to(C) + C.ptype = 7 // 7 = outlet + C.update() + C.anchored = 1 + C.density = 1 + qdel(src) + return + else + user << "You need more welding fuel to complete this task." return - src.add_fingerprint(user) - if(istype(I, /obj/item/weapon/screwdriver)) - if(mode==0) - mode=1 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You remove the screws around the power connection." - return - else if(mode==1) - mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You attach the screws around the power connection." - return - else if(istype(I,/obj/item/weapon/weldingtool) && mode==1) - var/obj/item/weapon/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the floorweld off the disposal outlet." - if(do_after(user,20)) - if(!src || !W.isOn()) return - user << "You sliced the floorweld off the disposal outlet." - var/obj/structure/disposalconstruct/C = new (src.loc) - src.transfer_fingerprints_to(C) - C.ptype = 7 // 7 = outlet - C.update() - C.anchored = 1 - C.density = 1 - qdel(src) - return - else - user << "You need more welding fuel to complete this task." - return // called when movable is expelled from a disposal pipe or outlet // by default does nothing, override for special behaviour diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index c729c53bb4b..4b92a0c5818 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -318,7 +318,7 @@ var/turf/T = get_turf(src) for(var/atom/movable/AM in contents) AM.loc = T - ..() + return ..() /obj/item/device/destTagger name = "destination tagger" @@ -335,10 +335,10 @@ var/dat = "

TagMaster 2.3

" dat += "" - for(var/i = 1, i <= tagger_locations.len, i++) - dat += "" + for(var/i = 1, i <= SSdisposals.tagger_locations.len, i++) + dat += "" - if (i%4==0) + if (i % 4==0) dat += "" dat += "
[tagger_locations[i]][SSdisposals.tagger_locations[i]]

Current Selection: [currTag ? currTag : "None"]
" @@ -352,7 +352,7 @@ /obj/item/device/destTagger/Topic(href, href_list) src.add_fingerprint(usr) - if(href_list["nextTag"] && href_list["nextTag"] in tagger_locations) + if(href_list["nextTag"] && href_list["nextTag"] in SSdisposals.tagger_locations) src.currTag = href_list["nextTag"] if(href_list["nextTag"] == "CUSTOM") var/dest = input("Please enter custom location.", "Location", src.currTag ? src.currTag : "None") @@ -370,12 +370,11 @@ var/c_mode = 0 -/obj/machinery/disposal/deliveryChute/New() - ..() - spawn(5) - trunk = locate() in src.loc - if(trunk) - trunk.linked = src // link the pipe trunk to self +/obj/machinery/disposal/deliveryChute/Initialize() + . = ..() + trunk = locate() in src.loc + if(trunk) + trunk.linked = src // link the pipe trunk to self /obj/machinery/disposal/deliveryChute/interact() return @@ -406,7 +405,7 @@ /obj/machinery/disposal/deliveryChute/flush() flushing = 1 flick("intake-closing", src) - var/obj/structure/disposalholder/H = new() // virtual holder object which actually + var/obj/disposalholder/H = new() // virtual holder object which actually // travels through the pipes. air_contents = new() // new empty gas resv. @@ -462,4 +461,4 @@ /obj/machinery/disposal/deliveryChute/Destroy() if(trunk) trunk.linked = null - ..() + return ..() diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index cd3b49b55cc..595fe11a0f4 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -21,8 +21,8 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). idle_power_usage = 30 active_power_usage = 2500 -/obj/machinery/r_n_d/circuit_imprinter/New() - ..() +/obj/machinery/r_n_d/circuit_imprinter/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index f5208bc45cd..9485a01754f 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -318,7 +318,7 @@ other types of metals and chemistry for reagents). id = "plasmacutter" req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3) materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 500, "gold" = 500, "phoron" = 500) - build_path = /obj/item/weapon/pickaxe/plasmacutter + build_path = /obj/item/weapon/gun/energy/plasmacutter sort_string = "KAAAC" /datum/design/item/weapon/mining/pick_diamond @@ -1658,6 +1658,13 @@ CIRCUITS BELOW build_path = /obj/item/weapon/circuitboard/ntnet_relay sort_string = "WAAAA" +/datum/design/circuit/crusher_base + name = "trash compactor" + id = "crusher_base" + req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 1, TECH_MAGNET = 1, TECH_MATERIALS = 3) + build_path = /obj/item/weapon/circuitboard/crusher + sort_string = "WAAAB" + /datum/design/circuit/aicore name = "AI core" id = "aicore" diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 6ff6e7dd2ba..e5b5be93336 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -16,8 +16,8 @@ Note: Must be placed within 3 tiles of the R&D Console idle_power_usage = 30 active_power_usage = 2500 -/obj/machinery/r_n_d/destructive_analyzer/New() - ..() +/obj/machinery/r_n_d/destructive_analyzer/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index e1a77f6bcc1..6bb7f37c49e 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -695,7 +695,7 @@ id = "plasmacutter_module" req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_PHORON = 4) materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250) - build_path = /obj/item/rig_module/device/plasmacutter + build_path = /obj/item/rig_module/mounted/plasmacutter /datum/design/hardsuitmodules/jet_module name = "hardsuit maneuvering jets" diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 3db5b1f5257..6d85ad30ca3 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -77,8 +77,8 @@ var/global/list/obj/machinery/message_server/message_servers = list() /obj/machinery/message_server/Destroy() message_servers -= src - ..() - return + + return ..() /obj/machinery/message_server/proc/GenerateKey() //Feel free to move to Helpers. @@ -161,65 +161,6 @@ var/global/list/obj/machinery/message_server/message_servers = list() else icon_state = "server-on" - return - - -/datum/feedback_variable - var/variable - var/value - var/details - -/datum/feedback_variable/New(var/param_variable,var/param_value = 0) - variable = param_variable - value = param_value - -/datum/feedback_variable/proc/inc(var/num = 1) - if(isnum(value)) - value += num - else - value = text2num(value) - if(isnum(value)) - value += num - else - value = num - -/datum/feedback_variable/proc/dec(var/num = 1) - if(isnum(value)) - value -= num - else - value = text2num(value) - if(isnum(value)) - value -= num - else - value = -num - -/datum/feedback_variable/proc/set_value(var/num) - if(isnum(num)) - value = num - -/datum/feedback_variable/proc/get_value() - return value - -/datum/feedback_variable/proc/get_variable() - return variable - -/datum/feedback_variable/proc/set_details(var/text) - if(istext(text)) - details = text - -/datum/feedback_variable/proc/add_details(var/text) - if(istext(text)) - if(!details) - details = text - else - details += " [text]" - -/datum/feedback_variable/proc/get_details() - return details - -/datum/feedback_variable/proc/get_parsed() - return list(variable,value,details) - var/obj/machinery/blackbox_recorder/blackbox /obj/machinery/blackbox_recorder @@ -231,21 +172,8 @@ var/obj/machinery/blackbox_recorder/blackbox use_power = 1 idle_power_usage = 10 active_power_usage = 100 - var/list/messages = list() //Stores messages of non-standard frequencies - var/list/messages_admin = list() - - var/list/msg_common = list() - var/list/msg_science = list() - var/list/msg_command = list() - var/list/msg_medical = list() - var/list/msg_engineering = list() - var/list/msg_security = list() - var/list/msg_deathsquad = list() - var/list/msg_syndicate = list() - var/list/msg_cargo = list() - var/list/msg_service = list() - - var/list/datum/feedback_variable/feedback = new() + + // Note: actual logging has been moved to SSfeedback. //Only one can exist in the world! /obj/machinery/blackbox_recorder/New() @@ -257,147 +185,4 @@ var/obj/machinery/blackbox_recorder/blackbox /obj/machinery/blackbox_recorder/Destroy() feedback_set_details("blackbox_destroyed","true") feedback_set("blackbox_destroyed",1) - var/turf/T = locate(1,1,2) - if(T) - blackbox = null - var/obj/machinery/blackbox_recorder/BR = new/obj/machinery/blackbox_recorder(T) - BR.msg_common = msg_common - BR.msg_science = msg_science - BR.msg_command = msg_command - BR.msg_medical = msg_medical - BR.msg_engineering = msg_engineering - BR.msg_security = msg_security - BR.msg_deathsquad = msg_deathsquad - BR.msg_syndicate = msg_syndicate - BR.msg_cargo = msg_cargo - BR.msg_service = msg_service - BR.feedback = feedback - BR.messages = messages - BR.messages_admin = messages_admin - if(blackbox != BR) - blackbox = BR - ..() - -/obj/machinery/blackbox_recorder/proc/find_feedback_datum(var/variable) - for(var/datum/feedback_variable/FV in feedback) - if(FV.get_variable() == variable) - return FV - var/datum/feedback_variable/FV = new(variable) - feedback += FV - return FV - -/obj/machinery/blackbox_recorder/proc/get_round_feedback() - return feedback - -/obj/machinery/blackbox_recorder/proc/round_end_data_gathering() - - var/pda_msg_amt = 0 - var/rc_msg_amt = 0 - - for(var/obj/machinery/message_server/MS in machines) - if(MS.pda_msgs.len > pda_msg_amt) - pda_msg_amt = MS.pda_msgs.len - if(MS.rc_msgs.len > rc_msg_amt) - rc_msg_amt = MS.rc_msgs.len - - feedback_set_details("radio_usage","") - - feedback_add_details("radio_usage","COM-[msg_common.len]") - feedback_add_details("radio_usage","SCI-[msg_science.len]") - feedback_add_details("radio_usage","HEA-[msg_command.len]") - feedback_add_details("radio_usage","MED-[msg_medical.len]") - feedback_add_details("radio_usage","ENG-[msg_engineering.len]") - feedback_add_details("radio_usage","SEC-[msg_security.len]") - feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]") - feedback_add_details("radio_usage","SYN-[msg_syndicate.len]") - feedback_add_details("radio_usage","CAR-[msg_cargo.len]") - feedback_add_details("radio_usage","SRV-[msg_service.len]") - feedback_add_details("radio_usage","OTH-[messages.len]") - feedback_add_details("radio_usage","PDA-[pda_msg_amt]") - feedback_add_details("radio_usage","RC-[rc_msg_amt]") - - - feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set. - - -//This proc is only to be called at round end. -/obj/machinery/blackbox_recorder/proc/save_all_data_to_sql() - if(!feedback) - return - - if (!config.sql_enabled || !config.sql_stats) - return - - round_end_data_gathering() //round_end time logging and some other data processing - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) - return - - for(var/datum/feedback_variable/FV in feedback) - var/sql = "INSERT INTO ss13_feedback VALUES (null, Now(), \"[game_id]\", \"[FV.get_variable()]\", [FV.get_value()], \"[FV.get_details()]\")" - var/DBQuery/query_insert = dbcon.NewQuery(sql) - query_insert.Execute() - -// Sanitize inputs to avoid SQL injection attacks -proc/sql_sanitize_text(var/text) - text = replacetext(text, "'", "''") - text = replacetext(text, ";", "") - text = replacetext(text, "&", "") - return text - -proc/feedback_set(var/variable,var/value) - if(!blackbox) return - - variable = sql_sanitize_text(variable) - - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) - - if(!FV) return - - FV.set_value(value) - -proc/feedback_inc(var/variable,var/value) - if(!blackbox) return - - variable = sql_sanitize_text(variable) - - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) - - if(!FV) return - - FV.inc(value) - -proc/feedback_dec(var/variable,var/value) - if(!blackbox) return - - variable = sql_sanitize_text(variable) - - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) - - if(!FV) return - - FV.dec(value) - -proc/feedback_set_details(var/variable,var/details) - if(!blackbox) return - - variable = sql_sanitize_text(variable) - details = sql_sanitize_text(details) - - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) - - if(!FV) return - - FV.set_details(details) - -proc/feedback_add_details(var/variable,var/details) - if(!blackbox) return - - variable = sql_sanitize_text(variable) - details = sql_sanitize_text(details) - - var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable) - - if(!FV) return - - FV.add_details(details) + return ..() diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index b27db2ac745..997439e3b24 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -16,8 +16,8 @@ var/mat_efficiency = 1 var/speed = 1 -/obj/machinery/r_n_d/protolathe/New() - ..() +/obj/machinery/r_n_d/protolathe/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/protolathe(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 238d20478f8..4c56b259082 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -118,15 +118,13 @@ won't update every console in existence) but it's more of a hassle to do. Also, C.files.AddDesign2Known(D) C.files.RefreshResearch() -/obj/machinery/computer/rdconsole/New() - ..() +/obj/machinery/computer/rdconsole/Initialize() + . = ..() files = new /datum/research(src) //Setup the research data holder. if(!id) for(var/obj/machinery/r_n_d/server/centcom/S in machines) - S.initialize() + S.setup() break - -/obj/machinery/computer/rdconsole/initialize() SyncRDevices() /obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 63165e68a60..78d0ffb6b78 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -14,19 +14,9 @@ var/delay = 10 req_access = list(access_rd) //Only the R&D can change server settings. -/obj/machinery/r_n_d/server/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/rdserver(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/stack/cable_coil(src) - component_parts += new /obj/item/stack/cable_coil(src) - RefreshParts() - initialize(); - /obj/machinery/r_n_d/server/Destroy() griefProtection() - ..() + return ..() /obj/machinery/r_n_d/server/RefreshParts() var/tot_rating = 0 @@ -34,7 +24,18 @@ tot_rating += SP.rating idle_power_usage /= max(1, tot_rating) -/obj/machinery/r_n_d/server/initialize() +/obj/machinery/r_n_d/server/Initialize() + . = ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/rdserver(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/stack/cable_coil(src) + component_parts += new /obj/item/stack/cable_coil(src) + RefreshParts() + + setup() + +/obj/machinery/r_n_d/server/proc/setup() if(!files) files = new /datum/research(src) var/list/temp_list @@ -123,7 +124,7 @@ name = "Central R&D Database" server_id = -1 -/obj/machinery/r_n_d/server/centcom/initialize() +/obj/machinery/r_n_d/server/centcom/setup() ..() var/list/no_id_servers = list() var/list/server_ids = list() diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index e01088e1faa..ca1884b6156 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -107,12 +107,17 @@ /obj/structure/boulder/Bumped(AM) . = ..() + if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) + var/obj/item/weapon/pickaxe/P = H.l_hand + if(P.autodrill) + attackby(H.l_hand,H) else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.r_hand + if(P.autodrill) + attackby(H.r_hand,H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm index 081683b0443..110aeda01b6 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm @@ -31,6 +31,6 @@ new /obj/item/weapon/material/shard(src.loc) if(prob(25)) new /obj/item/weapon/material/shard(src.loc) - ..() + return ..() //todo: laser_act diff --git a/code/modules/research/xenoarchaeology/artifact/effect.dm b/code/modules/research/xenoarchaeology/artifact/effect.dm index 23bb649ac78..07b6c4cb181 100644 --- a/code/modules/research/xenoarchaeology/artifact/effect.dm +++ b/code/modules/research/xenoarchaeology/artifact/effect.dm @@ -71,7 +71,7 @@ /datum/artifact_effect/proc/DoEffectPulse(var/atom/holder) /datum/artifact_effect/proc/UpdateMove() -/datum/artifact_effect/proc/process() +/datum/artifact_effect/process() if(chargelevel < chargelevelmax) chargelevel++ diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm index 0a709dbf833..00d1106f145 100644 --- a/code/modules/research/xenoarchaeology/finds/finds.dm +++ b/code/modules/research/xenoarchaeology/finds/finds.dm @@ -323,7 +323,7 @@ apply_material_decorations = 0 if(23) apply_prefix = 0 - new_item = getFromPool(/obj/item/stack/rods, src.loc) + new_item = new /obj/item/stack/rods(src.loc) apply_image_decorations = 0 apply_material_decorations = 0 if(24) diff --git a/code/modules/research/xenoarchaeology/finds/finds_special.dm b/code/modules/research/xenoarchaeology/finds/finds_special.dm index 359ba673603..75be4846a85 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_special.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_special.dm @@ -7,14 +7,16 @@ /obj/item/weapon/reagent_containers/glass/replenishing/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSprocessing, src) spawning_id = pick("blood","holywater","lube","stoxin","ethanol","ice","glycerol","fuel","cleaner") /obj/item/weapon/reagent_containers/glass/replenishing/process() reagents.add_reagent(spawning_id, 0.3) - +/obj/item/weapon/reagent_containers/glass/replenishing/Destroy() + STOP_PROCESSING(SSprocessing, src) + return ..() //a talking gas mask! /obj/item/clothing/mask/gas/poltergeist @@ -23,11 +25,11 @@ var/max_stored_messages = 100 /obj/item/clothing/mask/gas/poltergeist/New() - processing_objects.Add(src) + START_PROCESSING(SSprocessing, src) listening_objects += src /obj/item/clothing/mask/gas/poltergeist/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSprocessing, src) listening_objects -= src return ..() diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm index 58cfdbb0311..98aad243ece 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm @@ -22,7 +22,7 @@ if(holder_atom) processing_objects.Add(src) -/datum/talking_atom/proc/process() +/datum/talking_atom/process() if(!holder_atom) processing_objects.Remove(src) diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm index 535a0b4f073..f621cb21592 100644 --- a/code/modules/research/xenoarchaeology/geosample.dm +++ b/code/modules/research/xenoarchaeology/geosample.dm @@ -105,15 +105,15 @@ artifact_distance = rand() artifact_id = container.artifact_find.artifact_id else - if(master_controller) //Sanity check due to runtimes ~Z - for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs) + if (SSxenoarch) //Sanity check due to runtimes ~Z + for(var/turf/simulated/mineral/T in SSxenoarch.artifact_spawning_turfs) if(T.artifact_find) var/cur_dist = get_dist(container, T) * 2 if( (artifact_distance < 0 || cur_dist < artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range ) artifact_distance = cur_dist + rand() * 2 - 1 artifact_id = T.artifact_find.artifact_id else - master_controller.artifact_spawning_turfs.Remove(T) + SSxenoarch.artifact_spawning_turfs.Remove(T) /* #undef FIND_PLANT diff --git a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm index 117a3040715..eccaba7b61d 100644 --- a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm +++ b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm @@ -192,7 +192,7 @@ /obj/item/weapon/anodevice/Destroy() processing_objects.Remove(src) - ..() + return ..() /obj/item/weapon/anodevice/attack(mob/living/M as mob, mob/living/user as mob, def_zone) if (!istype(M)) diff --git a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm index ab738d6ec34..b971f75cc61 100644 --- a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm +++ b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm @@ -315,7 +315,7 @@ /obj/machinery/suspension_gen/Destroy() //safety checks: clear the field and drop anything it's holding deactivate() - ..() + return ..() /obj/machinery/suspension_gen/verb/rotate_ccw() set src in view(1) @@ -347,4 +347,4 @@ /obj/effect/suspension_field/Destroy() for(var/obj/I in src) I.loc = src.loc - ..() + return ..() diff --git a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm index 6f79f8d8ba8..1369b190c8c 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm @@ -12,7 +12,8 @@ var/last_scan_time = 0 var/scan_delay = 25 -/obj/item/device/ano_scanner/initialize() +/obj/item/device/ano_scanner/Initialize() + . = ..() scan() /obj/item/device/ano_scanner/attack_self(var/mob/user as mob) @@ -38,8 +39,8 @@ last_scan_time = world.time nearest_artifact_distance = -1 var/turf/cur_turf = get_turf(src) - if(master_controller) //Sanity check due to runtimes ~Z - for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs) + if (SSxenoarch) //Sanity check due to runtimes ~Z + for(var/turf/simulated/mineral/T in SSxenoarch.artifact_spawning_turfs) if(T.artifact_find) if(T.z == cur_turf.z) var/cur_dist = get_dist(cur_turf, T) * 2 @@ -47,5 +48,5 @@ nearest_artifact_distance = cur_dist + rand() * 2 - 1 nearest_artifact_id = T.artifact_find.artifact_id else - master_controller.artifact_spawning_turfs.Remove(T) + SSxenoarch.artifact_spawning_turfs.Remove(T) cur_turf.visible_message("[src] clicks.") diff --git a/code/modules/research/xenoarchaeology/tools/tools_locater.dm b/code/modules/research/xenoarchaeology/tools/tools_locater.dm index fb6adf795ac..e3c1421e538 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_locater.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_locater.dm @@ -18,7 +18,7 @@ /obj/item/device/beacon_locator/Destroy() processing_objects.Remove(src) - ..() + return ..() /obj/item/device/beacon_locator/process() if(target_radio) diff --git a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm index e8bedc09878..147fbf436a5 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm @@ -8,11 +8,17 @@ icon_state = "pick_brush" item_state = "syringe_0" digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 2.0 desc = "Thick metallic wires for clearing away dust and loose scree (1 centimetre excavation depth)." excavation_amount = 0.5 drill_sound = 'sound/weapons/thudswoosh.ogg' drill_verb = "brushing" w_class = 2 + can_wield = 0 + + action_button_name = null /obj/item/weapon/pickaxe/one_pick name = "1/6 pick" @@ -20,11 +26,17 @@ icon_state = "pick1" item_state = "syringe_0" digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 2.0 desc = "A miniature excavation tool for precise digging (2 centimetre excavation depth)." excavation_amount = 1 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" w_class = 2 + can_wield = 0 + + action_button_name = null /obj/item/weapon/pickaxe/two_pick name = "1/3 pick" @@ -32,11 +44,17 @@ icon_state = "pick2" item_state = "syringe_0" digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 2.0 desc = "A miniature excavation tool for precise digging (4 centimetre excavation depth)." excavation_amount = 2 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" w_class = 2 + can_wield = 0 + + action_button_name = null /obj/item/weapon/pickaxe/three_pick name = "1/2 pick" @@ -44,11 +62,17 @@ icon_state = "pick3" item_state = "syringe_0" digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 2.0 desc = "A miniature excavation tool for precise digging (6 centimetre excavation depth)." excavation_amount = 3 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" w_class = 2 + can_wield = 0 + + action_button_name = null /obj/item/weapon/pickaxe/four_pick name = "2/3 pick" @@ -56,11 +80,17 @@ icon_state = "pick4" item_state = "syringe_0" digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 2.0 desc = "A miniature excavation tool for precise digging (8 centimetre excavation depth)." excavation_amount = 4 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" w_class = 2 + can_wield = 0 + + action_button_name = null /obj/item/weapon/pickaxe/five_pick name = "5/6 pick" @@ -68,11 +98,17 @@ icon_state = "pick5" item_state = "syringe_0" digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 2.0 desc = "A miniature excavation tool for precise digging (10 centimetre excavation depth)." excavation_amount = 5 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" w_class = 2 + can_wield = 0 + + action_button_name = null /obj/item/weapon/pickaxe/six_pick name = "1/1 pick" @@ -80,23 +116,35 @@ icon_state = "pick6" item_state = "syringe_0" digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 2.0 desc = "A miniature excavation tool for precise digging (12 centimetre excavation depth)." excavation_amount = 6 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" w_class = 2 + can_wield = 0 + + action_button_name = null /obj/item/weapon/pickaxe/hand name = "hand pickaxe" icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "pick_hand" item_state = "syringe_0" - digspeed = 30 + digspeed = 20 + digspeed_unwielded = 20 + digspeed_wielded = 20 + force = 10.0 desc = "A smaller, more precise version of the pickaxe (30 centimetre excavation depth)." excavation_amount = 15 drill_sound = 'sound/items/Crowbar.ogg' drill_verb = "clearing" w_class = 3 + can_wield = 0 + + action_button_name = null //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Pack for holding pickaxes diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm index 87c6fa5ea36..dead30e4a7b 100644 --- a/code/modules/scripting/Implementations/Telecomms.dm +++ b/code/modules/scripting/Implementations/Telecomms.dm @@ -258,7 +258,7 @@ datum/signal freq = text2num(freq) newsign.frequency = freq - var/datum/radio_frequency/connection = radio_controller.return_frequency(freq) + var/datum/radio_frequency/connection = SSradio.return_frequency(freq) newsign.data["connection"] = connection diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index c05b4b8fa25..1631a34fa33 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -167,7 +167,7 @@ /obj/machinery/keycard_auth/proc/is_ert_blocked() if(config.ert_admin_call_only) return 1 - return ticker.mode && ticker.mode.ert_disabled + return SSticker.mode && SSticker.mode.ert_disabled var/global/maint_all_access = 0 diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm index ca6f503d7f3..1d51ee00054 100644 --- a/code/modules/security levels/security levels.dm +++ b/code/modules/security levels/security levels.dm @@ -25,24 +25,18 @@ if(SEC_LEVEL_GREEN) security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green.") security_level = SEC_LEVEL_GREEN - if (nl_ctrl.manual_override == 2) // Disable override if it was set by code-red. - nl_ctrl.manual_override = 0 - nl_ctrl.doWork(FALSE) // Update night lighting if it was turned off by red alert. + SSnightlight.end_temp_disable() if(SEC_LEVEL_BLUE) if(security_level < SEC_LEVEL_BLUE) security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue.") else security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue.") security_level = SEC_LEVEL_BLUE - if (nl_ctrl.manual_override == 2) - nl_ctrl.manual_override = 0 - nl_ctrl.doWork(FALSE) // Update night lighting if it was turned off by red alert. + SSnightlight.end_temp_disable() if(SEC_LEVEL_RED) if(security_level < SEC_LEVEL_RED) security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Security level elevated to red!") - nl_ctrl.deactivate(0) // Disable nightmode globally - if (!nl_ctrl.manual_override) - nl_ctrl.manual_override = 2 + SSnightlight.temp_disable() else security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") security_level = SEC_LEVEL_RED @@ -53,6 +47,7 @@ if(SEC_LEVEL_DELTA) security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta security level reached!", new_sound = 'sound/effects/siren.ogg') security_level = SEC_LEVEL_DELTA + SSnightlight.temp_disable() var/newlevel = get_security_level() for(var/obj/machinery/firealarm/FA in machines) diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 7ff46d2b476..5481a951b87 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -36,7 +36,7 @@ opacity = 0 density = 0 update_nearby_tiles() - ..() + return ..() /obj/machinery/shield/CanPass(atom/movable/mover, turf/target, height, air_group) if(!height || air_group) return 0 @@ -134,7 +134,7 @@ /obj/machinery/shieldgen/Destroy() collapse_shields() - ..() + return ..() /obj/machinery/shieldgen/proc/shields_up() if(active) return 0 //If it's already turned on, how did this get called? diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm index 04b471182b6..4d01f0bfe2a 100644 --- a/code/modules/shieldgen/energy_field.dm +++ b/code/modules/shieldgen/energy_field.dm @@ -19,7 +19,7 @@ /obj/effect/energy_field/Destroy() update_nearby_tiles() - ..() + return ..() /obj/effect/energy_field/ex_act(var/severity) Stress(0.5 + severity) diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm index 696caa5ed47..9a034a42076 100644 --- a/code/modules/shieldgen/sheldwallgen.dm +++ b/code/modules/shieldgen/sheldwallgen.dm @@ -211,7 +211,7 @@ src.cleanup(2) src.cleanup(4) src.cleanup(8) - ..() + return ..() /obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj) storedpower -= 400 * Proj.get_structure_damage() @@ -256,7 +256,7 @@ /obj/machinery/shieldwall/Destroy() update_nearby_tiles() - ..() + return ..() /obj/machinery/shieldwall/attack_hand(mob/user as mob) return diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm index 67941303eab..66a35b0d2b0 100644 --- a/code/modules/shieldgen/shield_gen.dm +++ b/code/modules/shieldgen/shield_gen.dm @@ -30,20 +30,19 @@ var/energy_conversion_rate = 0.0002 //how many renwicks per watt? use_power = 0 //doesn't use APC power -/obj/machinery/shield_gen/New() - spawn(10) - for(var/obj/machinery/shield_capacitor/possible_cap in range(1, src)) - if(get_dir(possible_cap, src) == possible_cap.dir) - owned_capacitor = possible_cap - break - field = new/list() - ..() +/obj/machinery/shield_gen/Initialize() + for(var/obj/machinery/shield_capacitor/possible_cap in range(1, src)) + if(get_dir(possible_cap, src) == possible_cap.dir) + owned_capacitor = possible_cap + break + field = list() + . = ..() /obj/machinery/shield_gen/Destroy() for(var/obj/effect/energy_field/D in field) field.Remove(D) D.loc = null - ..() + return ..() /obj/machinery/shield_gen/emag_act(var/remaining_charges, var/mob/user) if(prob(75)) diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index bed4cccf5dd..d92adfa2d51 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -75,8 +75,8 @@ /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth name = "escape pod berth controller" -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/initialize() - ..() +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/Initialize() + . = ..() docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src) program = docking_program diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 03942ee5f05..fb0724de611 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -6,6 +6,8 @@ /datum/shuttle var/warmup_time = 0 var/moving_status = SHUTTLE_IDLE + var/lift = 0 //To make zlevel stuff work right + var/lift_lowest_zlevel = 1 //At least 1 unless you always want open floor var/docking_controller_tag //tag of the controller used to coordinate docking var/datum/computer/file/embedded_program/docking/docking_controller //the controller itself. (micro-controller, not game controller) @@ -105,7 +107,7 @@ for(var/atom/movable/AM as mob|obj in T) AM.Move(D) if(istype(T, /turf/simulated)) - qdel(T) + T.ChangeTurf(/turf/space) for(var/mob/living/carbon/bug in destination) bug.gib() diff --git a/code/modules/shuttles/shuttle_arrival.dm b/code/modules/shuttles/shuttle_arrival.dm new file mode 100644 index 00000000000..d07a7c34d74 --- /dev/null +++ b/code/modules/shuttles/shuttle_arrival.dm @@ -0,0 +1,54 @@ +/datum/shuttle/ferry/arrival + +/datum/shuttle/ferry/arrival/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction) + if(isnull(location)) + return + + if(!destination) + destination = get_location_area(!location) + if(!departing) + departing = get_location_area(location) + + direction = !location + + if(moving_status != SHUTTLE_IDLE) return + + //it would be cool to play a sound here + moving_status = SHUTTLE_WARMUP + spawn(warmup_time*10) + if (moving_status == SHUTTLE_IDLE) + return //someone cancelled the launch + + if (at_station() && forbidden_atoms_check()) + //cancel the launch because of forbidden atoms. announce over supply channel? + moving_status = SHUTTLE_IDLE + global_announcer.autosay("Unacceptable items detected aboard the arrivals shuttle. Launch attempt failed. Restarting launch in one minute.", "Arrivals Shuttle Oversight") + SSarrivals.set_launch_countdown(60) + return + + if (!forbidden_atoms_check() && !at_station()) + //cancel the launch because of there's no one on the shuttle. + moving_status = SHUTTLE_IDLE + return + + if(!at_station()) + global_announcer.autosay("Central Command Arrivals shuttle inbound to NSS Aurora II. ETA: one minute.", "Arrivals Shuttle Oversight") + arrive_time = world.time + travel_time*10 + moving_status = SHUTTLE_INTRANSIT + move(departing, interim, direction) + + + while (world.time < arrive_time) + sleep(5) + + move(interim, destination, direction) + moving_status = SHUTTLE_IDLE + +/datum/shuttle/ferry/arrival/arrived() + SSarrivals.shuttle_arrived() + +/datum/shuttle/ferry/arrival/proc/forbidden_atoms_check() + return SSarrivals.forbidden_atoms_check(get_location_area()) + +/datum/shuttle/ferry/arrival/proc/at_station() + return (!location) diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm index 5d6663f3b57..9024b0dddfb 100644 --- a/code/modules/shuttles/shuttle_ferry.dm +++ b/code/modules/shuttles/shuttle_ferry.dm @@ -67,7 +67,7 @@ Please ensure that long_jump() and short_jump() are only called from here. This applies to subtypes as well. Doing so will ensure that multiple jumps cannot be initiated in parallel. */ -/datum/shuttle/ferry/proc/process() +/datum/shuttle/ferry/process() switch(process_state) if (WAIT_LAUNCH) if (skip_docking_checks() || docking_controller.can_launch()) diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm index c4122434e76..cfcd6c4e6c2 100644 --- a/code/modules/shuttles/shuttle_supply.dm +++ b/code/modules/shuttles/shuttle_supply.dm @@ -27,7 +27,7 @@ return if (!at_station()) //at centcom - supply_controller.buy() + SScargo.buy() //We pretend it's a long_jump by making the shuttle stay at centcom for the "in-transit" period. var/area/away_area = get_location_area(away_location) @@ -38,7 +38,7 @@ move(origin, away_area) //wait ETA here. - arrive_time = world.time + supply_controller.movetime + arrive_time = world.time + SScargo.movetime while (world.time <= arrive_time) sleep(5) @@ -52,14 +52,14 @@ moving_status = SHUTTLE_IDLE if (!at_station()) //at centcom - supply_controller.sell() + SScargo.sell() // returns 1 if the supply shuttle should be prevented from moving because it contains forbidden atoms /datum/shuttle/ferry/supply/proc/forbidden_atoms_check() if (!at_station()) return 0 //if badmins want to send mobs or a nuke on the supply shuttle from centcom we don't care - return supply_controller.forbidden_atoms_check(get_location_area()) + return SScargo.forbidden_atoms_check(get_location_area()) /datum/shuttle/ferry/supply/proc/at_station() return (!location) diff --git a/code/modules/spells/aoe_turf/charge.dm b/code/modules/spells/aoe_turf/charge.dm index 3b13a4e6057..05e2258df4a 100644 --- a/code/modules/spells/aoe_turf/charge.dm +++ b/code/modules/spells/aoe_turf/charge.dm @@ -23,7 +23,7 @@ cast_charge(A) /spell/aoe_turf/charge/proc/mob_charge(var/mob/living/M) - if(M.spell_list.len != 0) + if(LAZYLEN(M.spell_list)) for(var/spell/S in M.spell_list) if(!istype(S, /spell/aoe_turf/charge)) S.charge_counter = S.charge_max diff --git a/code/modules/spells/aoe_turf/conjure/grove.dm b/code/modules/spells/aoe_turf/conjure/grove.dm index b70b5f77695..da17a885b0c 100644 --- a/code/modules/spells/aoe_turf/conjure/grove.dm +++ b/code/modules/spells/aoe_turf/conjure/grove.dm @@ -22,7 +22,7 @@ if(seed_type) seed = new seed_type() else - seed = plant_controller.create_random_seed(1) + seed = SSplants.create_random_seed(1) /spell/aoe_turf/conjure/grove/before_cast() var/turf/T = get_turf(holder) diff --git a/code/modules/spells/general/mark_recall.dm b/code/modules/spells/general/mark_recall.dm index 1bf2f727c39..f31a62b1310 100644 --- a/code/modules/spells/general/mark_recall.dm +++ b/code/modules/spells/general/mark_recall.dm @@ -66,7 +66,7 @@ /obj/effect/decal/wizard_mark/Destroy() spell.mark = null //dereference pls. spell = null - ..() + return ..() /obj/effect/decal/wizard_mark/attack_hand(var/mob/user) if(user == spell.holder) diff --git a/code/modules/spells/hand/hand_item.dm b/code/modules/spells/hand/hand_item.dm index 91dd67c7361..93b87a604cc 100644 --- a/code/modules/spells/hand/hand_item.dm +++ b/code/modules/spells/hand/hand_item.dm @@ -53,4 +53,4 @@ Basically: I can use it to target things where I click. I can then pass these ta /obj/item/magic_hand/Destroy() //better save than sorry. hand_spell = null - ..() \ No newline at end of file + return ..() diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm index 657789dbe5e..0451ce3dc5a 100644 --- a/code/modules/spells/spell_code.dm +++ b/code/modules/spells/spell_code.dm @@ -66,7 +66,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now //still_recharging_msg = "[name] is still recharging." charge_counter = charge_max -/spell/proc/process() +/spell/process() if(processing) return processing = 1 diff --git a/code/modules/spells/spell_projectile.dm b/code/modules/spells/spell_projectile.dm index 6afc7b5afdc..f9c02f50813 100644 --- a/code/modules/spells/spell_projectile.dm +++ b/code/modules/spells/spell_projectile.dm @@ -26,14 +26,16 @@ /obj/item/projectile/spell_projectile/before_move() if(proj_trail && src && src.loc) //pretty trails - var/obj/effect/overlay/trail = getFromPool(/obj/effect/overlay, src.loc) + var/obj/effect/overlay/trail = new /obj/effect/overlay(src.loc) trails += trail trail.icon = proj_trail_icon trail.icon_state = proj_trail_icon_state trail.density = 0 - spawn(proj_trail_lifespan) - trails -= trail - qdel(trail) + addtimer(CALLBACK(src, .proc/post_trail, trail), proj_trail_lifespan) + +/obj/item/projectile/spell_projectile/proc/post_trail(obj/effect/overlay/trail) + trails -= trail + qdel(trail) /obj/item/projectile/spell_projectile/proc/prox_cast(var/list/targets) if(loc) diff --git a/code/modules/spells/spell_verb.dm b/code/modules/spells/spell_verb.dm index d66818216a6..d764efe6c89 100644 --- a/code/modules/spells/spell_verb.dm +++ b/code/modules/spells/spell_verb.dm @@ -3,8 +3,8 @@ set name = "Cast" set desc = "Cast a spell" - if(!spell_list.len) + if(!LAZYLEN(spell_list)) src.verbs -= /mob/proc/cast_spell return - spell.perform(usr) \ No newline at end of file + spell.perform(usr) diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm index 5e378f46a39..d5a8217f61a 100644 --- a/code/modules/spells/spells.dm +++ b/code/modules/spells/spells.dm @@ -16,7 +16,7 @@ /mob/Stat() . = ..() - if(. && spell_list && spell_list.len) + if(. && LAZYLEN(spell_list)) for(var/spell/S in spell_list) if((!S.connected_button) || !statpanel(S.panel)) continue //Not showing the noclothes spell @@ -40,7 +40,7 @@ if(spell_masters.len) for(var/obj/screen/movable/spell_master/spell_master in spell_masters) if(spell_master.type == master_type) - spell_list.Add(spell_to_add) + LAZYADD(spell_list, spell_to_add) spell_master.add_spell(spell_to_add) return 1 @@ -52,7 +52,7 @@ if(spell_base) new_spell_master.icon_state = spell_base spell_masters.Add(new_spell_master) - spell_list.Add(spell_to_add) + LAZYADD(spell_list, spell_to_add) if(mind) if(!mind.learned_spells) mind.learned_spells = list() @@ -72,7 +72,7 @@ if(mind && mind.learned_spells) mind.learned_spells.Remove(spell_to_remove) - spell_list.Remove(spell_to_remove) + LAZYREMOVE(spell_list, spell_to_remove) for(var/obj/screen/movable/spell_master/spell_master in spell_masters) spell_master.remove_spell(spell_to_remove) return 1 diff --git a/code/modules/spells/targeted/mind_transfer.dm b/code/modules/spells/targeted/mind_transfer.dm index 05aa83aa678..ad6dc717fd3 100644 --- a/code/modules/spells/targeted/mind_transfer.dm +++ b/code/modules/spells/targeted/mind_transfer.dm @@ -50,7 +50,7 @@ victim.verbs -= V var/mob/dead/observer/ghost = victim.ghostize(0) - ghost.spell_list += victim.spell_list//If they have spells, transfer them. Now we basically have a backup mob. + LAZYADD(ghost.spell_list, victim.spell_list) //If they have spells, transfer them. Now we basically have a backup mob. caster.mind.transfer_to(victim) for(var/spell/S in victim.spell_list) @@ -68,7 +68,8 @@ caster.key = ghost.key //have to transfer the key since the mind was not active for(var/spell/S in ghost.spell_list) caster.add_spell(S) - ghost.spell_list = list() + + LAZYCLEARLIST(ghost.spell_list) if(caster.mind.special_verbs.len)//If they had any special verbs, we add them here. for(var/V in caster.mind.special_verbs) diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index bf08fa1d8c3..7781ebbd9cc 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -360,6 +360,8 @@ /obj/machinery/power/supermatter/Bumped(atom/AM as mob|obj) + if(!AM.simulated) + return if(istype(AM, /obj/effect)) return if(istype(AM, /mob/living)) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 2d66fa43b33..ae0587fdee9 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -55,7 +55,7 @@ /datum/surgery_step/fix_dead_tissue //Debridement priority = 2 allowed_tools = list( - /obj/item/weapon/scalpel = 100, + /obj/item/weapon/scalpel = 100, /obj/item/weapon/material/knife = 75, /obj/item/weapon/material/shard = 50 ) @@ -173,7 +173,7 @@ allowed_tools = list( /obj/item/weapon/weldingtool = 80, /obj/item/weapon/circular_saw = 60, - /obj/item/weapon/pickaxe/plasmacutter = 100 + /obj/item/weapon/gun/energy/plasmacutter = 100 ) can_infect = 0 diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 12a1a449a2c..e625018e55d 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -121,7 +121,7 @@ /datum/surgery_step/robotics/repair_brute allowed_tools = list( /obj/item/weapon/weldingtool = 100, - /obj/item/weapon/pickaxe/plasmacutter = 50 + /obj/item/weapon/gun/energy/plasmacutter = 50 ) min_duration = 50 diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index d9951141d5a..89f3cb27e02 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -113,22 +113,6 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool) //not returning 1 so people and borgs can still use things, like syringes and hyposprays, while their patients are on the table return 0 -proc/sort_surgeries() - var/gap = surgery_steps.len - var/swapped = 1 - while (gap > 1 || swapped) - swapped = 0 - if(gap > 1) - gap = round(gap / 1.247330950103979) - if(gap < 1) - gap = 1 - for(var/i = 1; gap + i <= surgery_steps.len; i++) - var/datum/surgery_step/l = surgery_steps[i] //Fucking hate - var/datum/surgery_step/r = surgery_steps[gap+i] //how lists work here - if(l.priority < r.priority) - surgery_steps.Swap(i, gap + i) - swapped = 1 - /datum/surgery_status/ var/eyes = 0 var/face = 0 diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index a839bb15d7e..43c39a0d530 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -63,8 +63,8 @@ take_damage(rand(50,150)) -/obj/structure/table/initialize() - ..() +/obj/structure/table/Initialize() + . = ..() // One table per turf. for(var/obj/structure/table/T in loc) @@ -88,7 +88,7 @@ update_connections(1) // Update tables around us to ignore us (material=null forces no connections) for(var/obj/structure/table/T in oview(src, 1)) T.update_icon() - ..() + return ..() /obj/structure/table/examine(mob/user) . = ..() @@ -305,14 +305,14 @@ /obj/structure/table/update_icon() if(flipped != 1) icon_state = "blank" - overlays.Cut() + cut_overlays() var/image/I // Base frame shape. Mostly done for glass/diamond tables, where this is visible. for(var/i = 1 to 4) I = image(icon, dir = 1<<(i-1), icon_state = connections[i]) - overlays += I + add_overlay(I) // Standard table image if(material) @@ -320,7 +320,7 @@ I = image(icon, "[material.icon_base]_[connections[i]]", dir = 1<<(i-1)) if(material.icon_colour) I.color = material.icon_colour I.alpha = 255 * material.opacity - overlays += I + add_overlay(I) // Reinforcements if(reinforced) @@ -328,14 +328,14 @@ I = image(icon, "[reinforced.icon_reinf]_[connections[i]]", dir = 1<<(i-1)) I.color = reinforced.icon_colour I.alpha = 255 * reinforced.opacity - overlays += I + add_overlay(I) if(carpeted) for(var/i = 1 to 4) I = image(icon, "carpet_[connections[i]]", dir = 1<<(i-1)) - overlays += I + add_overlay(I) else - overlays.Cut() + cut_overlays() var/type = 0 var/tabledirs = 0 for(var/direction in list(turn(dir,90), turn(dir,-90)) ) @@ -356,7 +356,7 @@ var/image/I = image(icon, "[material.icon_base]_flip[type]") I.color = material.icon_colour I.alpha = 255 * material.opacity - overlays += I + add_overlay(I) name = "[material.display_name] table" else name = "table frame" @@ -365,10 +365,10 @@ var/image/I = image(icon, "[reinforced.icon_reinf]_flip[type]") I.color = reinforced.icon_colour I.alpha = 255 * reinforced.opacity - overlays += I + add_overlay(I) if(carpeted) - overlays += "carpet_flip[type]" + add_overlay("carpet_flip[type]") // set propagate if you're updating a table that should update tables around it too, for example if it's a new table or something important has changed (like material). /obj/structure/table/proc/update_connections(propagate=0) diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm index a90e3eeb8a2..6d127061962 100644 --- a/code/modules/tables/update_triggers.dm +++ b/code/modules/tables/update_triggers.dm @@ -11,7 +11,7 @@ T.update_connections() T.update_icon() loc=oldloc - ..() + return ..() /obj/structure/window/Move() var/oldloc = loc @@ -19,4 +19,4 @@ if(loc != oldloc) for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1)) T.update_connections() - T.update_icon() \ No newline at end of file + T.update_icon() diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index 3ea12461f42..a6157133f2b 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -1,4 +1,7 @@ var/list/GPS_list = list() + +var/global/list/gps_by_type = list() + /obj/item/device/gps name = "global positioning system" desc = "Helping lost spacemen find their way through the planets since 2016." @@ -7,28 +10,35 @@ var/list/GPS_list = list() w_class = 2 slot_flags = SLOT_BELT origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) + var/gps_prefix = "COM" var/gpstag = "COM0" var/emped = 0 var/turf/locked_location -/obj/item/device/gps/New() - ..() +/obj/item/device/gps/Initialize() + . = ..() GPS_list.Add(src) + LAZYADD(gps_by_type["[type]"], src) + gpstag = "[gps_prefix][LAZYLEN(gps_by_type["[type]"])]" name = "global positioning system ([gpstag])" - overlays += "working" + add_overlay("working") /obj/item/device/gps/Destroy() GPS_list.Remove(src) + var/list/typelist = gps_by_type["[type]"] + LAZYREMOVE(typelist, src) return ..() /obj/item/device/gps/emp_act(severity) emped = 1 - overlays -= "working" - overlays += "emp" - spawn(300) - emped = 0 - overlays -= "emp" - overlays += "working" + cut_overlay("working") + add_overlay("emp") + addtimer(CALLBACK(src, .proc/post_emp), 300) + +/obj/item/device/gps/proc/post_emp() + emped = 0 + cut_overlay("emp") + add_overlay("working") /obj/item/device/gps/attack_self(mob/user) @@ -69,13 +79,16 @@ var/list/GPS_list = list() /obj/item/device/gps/science icon_state = "gps-s" + gps_prefix = "SCI" gpstag = "SCI0" /obj/item/device/gps/engineering icon_state = "gps-e" + gps_prefix = "ENG" gpstag = "ENG0" /obj/item/device/gps/mining icon_state = "gps-m" - gpstag = "MINE0" + gps_prefix = "MIN" + gpstag = "MIN0" desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 565a67f6f4b..cc6ad954919 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -10,8 +10,8 @@ active_power_usage = 5000 var/efficiency -/obj/machinery/telepad/New() - ..() +/obj/machinery/telepad/Initialize() + . = ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/telesci_pad(null) component_parts += new /obj/item/bluespace_crystal/artificial(null) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 97611c6610b..d7bba1294d7 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -30,10 +30,6 @@ var/list/crystals = list() var/obj/item/device/gps/inserted_gps -/obj/machinery/computer/telescience/New() - ..() - recalibrate() - /obj/machinery/computer/telescience/Destroy() eject() if(inserted_gps) @@ -45,8 +41,9 @@ ..() user << "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots." -/obj/machinery/computer/telescience/initialize() - ..() +/obj/machinery/computer/telescience/Initialize() + . = ..() + recalibrate() for(var/i = 1; i <= starting_crystals; i++) crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals diff --git a/code/modules/turbolift/_Aurora-areas.dm b/code/modules/turbolift/_Aurora-areas.dm new file mode 100644 index 00000000000..e3100436ca4 --- /dev/null +++ b/code/modules/turbolift/_Aurora-areas.dm @@ -0,0 +1,285 @@ +/obj/turbolift_map_holder/aurora + depth = 2 + lift_size_x = 4 + lift_size_y = 4 + clear_objects = 0 + +//Main Lift +/obj/turbolift_map_holder/aurora/civilian + name = "Aurora lift placeholder - Main" + dir = SOUTH + + depth = 3 + lift_size_x = 6 + lift_size_y = 6 + + areas_to_use = list( + /area/turbolift/main_station, + /area/turbolift/main_mid, + /area/turbolift/main_arrivals + ) + +/area/turbolift/main_arrivals + name = "Civilian Lift - Arrivals" + lift_announce_str = "Arriving at Arrivals" + + lift_floor_label = "Arrivals" + lift_floor_name = "Arrivals" + +/area/turbolift/main_station + name = "Civilian Lift - Main" + lift_announce_str = "Arriving at Main floor" + + lift_floor_label = "Main" + lift_floor_name = "Main" + +/area/turbolift/main_mid + name = "Civilian Lift - Mid Level" + lift_announce_str = "Arriving at Unknown" + + lift_floor_label = "Under construction" + lift_floor_name = "Under construction" + +//Security +/obj/turbolift_map_holder/aurora/security + name = "Aurora lift placeholder - Security" + dir = SOUTH + + depth = 2 + + areas_to_use = list( + /area/turbolift/security_maintenance, + /area/turbolift/security_station + ) + +/area/turbolift/security_station + name = "Station - By Security" + lift_announce_str = "Arriving at the station level, by the Security department." + + lift_floor_label = "Security Main" + lift_floor_name = "Security Main" + +/area/turbolift/security_maintenance + name = "Maintenance - Below Security" + lift_announce_str = "Arriving at the maintenance level, below the Security department." + base_turf = /turf/simulated/floor/plating + + lift_floor_label = "Lower Sec" + lift_floor_name = "Lower Sec" + +//Research +/obj/turbolift_map_holder/aurora/research + name = "Aurora lift placeholder - Research" + dir = NORTH + + lift_size_x = 4 + lift_size_y = 4 + depth = 2 + + areas_to_use = list( + /area/turbolift/research_maintenance, + /area/turbolift/research_station + ) + +/area/turbolift/research_station + name = "Station - By Research" + lift_announce_str = "Arriving at the station level, by the R&D department." + + lift_floor_label = "R&D Main" + lift_floor_name = "R&D Main" + +/area/turbolift/research_maintenance + name = "Maintenance - Below Research" + lift_announce_str = "Arriving at the maintenance level, below the R&D department." + base_turf = /turf/simulated/floor/plating + + lift_floor_label = "Lower R&D" + lift_floor_name = "Lower R&D" + +//Engineering +/obj/turbolift_map_holder/aurora/engineering + name = "Aurora lift placeholder - Engineering" + dir = SOUTH + + lift_size_x = 5 + lift_size_y = 4 + depth = 2 + + areas_to_use = list( + /area/turbolift/engineering_maintenance, + /area/turbolift/engineering_station + ) + +/area/turbolift/engineering_station + name = "Station - By Engineering" + lift_announce_str = "Arriving at the station level, by the Engineering department." + + lift_floor_label = "Engineering Main" + lift_floor_name = "Engineering Main" + +/area/turbolift/engineering_maintenance + name = "Maintenance - Below Engineering" + lift_announce_str = "Arriving at the maintenance level, below the Engineering department." + + lift_floor_label = "Lower Engineering" + lift_floor_name = "Lower Engineering" + +//Cargo +/obj/turbolift_map_holder/aurora/cargo + name = "Aurora lift placeholder - Cargo" + dir = EAST + + lift_size_x = 5 + lift_size_y = 5 + depth = 3 + + areas_to_use = list( + /area/turbolift/cargo_station, + /area/turbolift/cargo_mid, + /area/turbolift/cargo_deliverys + ) + +/area/turbolift/cargo_station + name = "Station - By Cargo" + lift_announce_str = "Arriving at the station level, by the Cargo department." + + lift_floor_label = "Cargo Main" + lift_floor_name = "Cargo Main" + +/area/turbolift/cargo_deliverys + name = "Arrivals - Cargo" + lift_announce_str = "Arriving at Cargo department, Deliverys." + + lift_floor_label = "Cargo Arrivals" + lift_floor_name = "Cargo Arrivals" + +/area/turbolift/cargo_mid + name = "Arrivals - Cargo" + lift_announce_str = "Arriving at Unknown." + + lift_floor_label = "Cargo Arrivals" + lift_floor_name = "Cargo Arrivals" + + +//Medical +/obj/turbolift_map_holder/aurora/medical + name = "Aurora lift placeholder - Medical" + dir = WEST + + lift_size_x = 4 + lift_size_y = 4 + depth = 2 + + areas_to_use = list( + /area/turbolift/medical_sub, + /area/turbolift/medical_station + ) + +/area/turbolift/medical_station + name = "Medical Lift - Main" + lift_announce_str = "Arriving at Medical bay" + + lift_floor_label = "Medical Main" + lift_floor_name = "Medical Main" + +/area/turbolift/medical_sub + name = "Medical Lift - Sub" + lift_announce_str = "Arriving at lower Medical" + + lift_floor_label = "Lower Medical" + lift_floor_name = "Lower Medical" + +//AI Access +/obj/turbolift_map_holder/aurora/aiaccess + name = "Aurora lift placeholder - AI Access" + dir = NORTH + + lift_size_x = 4 + lift_size_y = 4 + depth = 2 + + areas_to_use = list( + /area/turbolift/ai_sub, + /area/turbolift/ai_station + ) + +/area/turbolift/ai_station + name = "AI Access Lift - Main" + lift_announce_str = "Arriving at Main Floor" + + lift_floor_label = "Main" + lift_floor_name = "AI Control Main" + +/area/turbolift/ai_sub + name = "AI Access Lift - Lower" + lift_announce_str = "Arriving at AI control" + + lift_floor_label = "AI Control" + lift_floor_name = "AI Control" + + + +//Vault +/obj/turbolift_map_holder/aurora/vault + name = "Aurora lift placeholder - Vault" + dir = SOUTH + + lift_size_x = 4 + lift_size_y = 4 + depth = 2 + + areas_to_use = list( + /area/turbolift/vault_sub, + /area/turbolift/vault_station + ) + +/area/turbolift/vault_station + name = "Vault Access Lift - Main" + lift_announce_str = "Arriving at Main floor" + + lift_floor_label = "Main" + lift_floor_name = "Vault Main" + + +/area/turbolift/vault_sub + name = "Vault Access Lift - sub" + lift_announce_str = "Arriving at Vault Access" + + lift_floor_label = "Vault Access" + lift_floor_name = "Vault Access" + + +//Command +/obj/turbolift_map_holder/aurora/command + name = "Aurora lift placeholder - Command" + dir = NORTH + + lift_size_x = 4 + lift_size_y = 4 + depth = 3 + + areas_to_use = list( + /area/turbolift/command_sub, + /area/turbolift/command_mid, + /area/turbolift/command_station + ) + +/area/turbolift/command_station + name = "Command Lift - Main" + lift_announce_str = "Arriving at Main floor" + + lift_floor_label = "Main" + lift_floor_name = "Command Main" + +/area/turbolift/command_sub + name = "Command Lift - Sub" + lift_announce_str = "Arriving at Command level" + + lift_floor_label = "Meeting/Escape Pods" + lift_floor_name = "Command Meeting" + +/area/turbolift/command_mid + name = "Command Lift - Mid" + lift_announce_str = "Arriving at Command Unknown" + lift_floor_label = "Command Floor" + lift_floor_name = "Secret Command Floor" diff --git a/code/modules/turbolift/_turbolift.dm b/code/modules/turbolift/_turbolift.dm new file mode 100644 index 00000000000..2b42d636074 --- /dev/null +++ b/code/modules/turbolift/_turbolift.dm @@ -0,0 +1,10 @@ +/* + * Turbolifts! Sort of like multishuttles-lite. + * + * How-to: Map /obj/turbolift_map_holder in at the bottom of the shaft, give it a depth + * value equivalent to the number of floors it should span (inclusive of the first), + * and at runtime it will update the map, set areas and create control panels and + * wifi-set doors appropriate to itself. You will save time at init if you map the + * elevator shaft in properly before runtime, but ultimately you're just avoiding a + * bunch of ChangeTurf() calls. + */ diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm new file mode 100644 index 00000000000..140b92a5bd0 --- /dev/null +++ b/code/modules/turbolift/turbolift.dm @@ -0,0 +1,136 @@ +var/global/list/turbolifts = list() + +// Lift master datum. One per turbolift. +/datum/turbolift + var/datum/turbolift_floor/target_floor // Where are we going? + var/datum/turbolift_floor/current_floor // Where is the lift currently? + var/list/doors = list() // Doors inside the lift structure. + var/list/queued_floors = list() // Where are we moving to next? + var/list/floors = list() // All floors in this system. + var/move_delay = 30 // Time between floor changes. + var/floor_wait_delay = 85 // Time to wait at floor stops. + var/obj/structure/lift/panel/control_panel_interior // Lift control panel. + var/doors_closing = 0 // Whether doors are in the process of closing + + var/tmp/moving_upwards + var/tmp/busy + + var/move_timer + +/datum/turbolift/proc/emergency_stop() + deltimer(move_timer) + queued_floors.Cut() + target_floor = null + open_doors() + +/datum/turbolift/proc/doors_are_open(var/datum/turbolift_floor/use_floor = current_floor) + for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) + if(!door.density) + return 1 + return 0 + +/datum/turbolift/proc/open_doors(var/datum/turbolift_floor/use_floor = current_floor) + for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) + door.command("open") + +/datum/turbolift/proc/close_doors(var/datum/turbolift_floor/use_floor = current_floor) + for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) + door.command("close") + +/datum/turbolift/proc/do_move() + + var/current_floor_index = floors.Find(current_floor) + + if(!target_floor) + if(!queued_floors || !queued_floors.len) + return 0 + target_floor = queued_floors[1] + queued_floors -= target_floor + if(current_floor_index < floors.Find(target_floor)) + moving_upwards = 1 + else + moving_upwards = 0 + + if(doors_are_open()) + if(!doors_closing) + close_doors() + doors_closing = 1 + return 1 + else // We failed to close the doors - probably, someone is blocking them; stop trying to move + doors_closing = 0 + open_doors() + control_panel_interior.audible_message("\The [current_floor.ext_panel] buzzes loudly.") + playsound(control_panel_interior.loc, "sound/machines/buzz-two.ogg", 50, 1) + return 0 + + doors_closing = 0 // The doors weren't open, so they are done closing + + var/area/turbolift/origin = locate(current_floor.area_ref) + + if(target_floor == current_floor) + + playsound(control_panel_interior.loc, origin.arrival_sound, 50, 1) + target_floor.arrived(src) + target_floor = null + + sleep(15) + control_panel_interior.visible_message("The elevator announces, \"[origin.lift_announce_str]\"") + sleep(floor_wait_delay) + + return 1 + + // Work out where we're headed. + var/datum/turbolift_floor/next_floor + if(moving_upwards) + next_floor = floors[current_floor_index+1] + else + next_floor = floors[current_floor_index-1] + + var/area/turbolift/destination = locate(next_floor.area_ref) + + if(!istype(origin) || !istype(destination) || (origin == destination)) + return 0 + + for(var/turf/T in destination) + for(var/atom/movable/AM in T) + if(istype(AM, /mob/living)) + var/mob/living/M = AM + M.gib() + else if(AM.simulated) + qdel(AM) + + origin.move_contents_to(destination) + + if((locate(/obj/machinery/power) in destination) || (locate(/obj/structure/cable) in destination)) + makepowernets() + + current_floor = next_floor + control_panel_interior.visible_message("The elevator [moving_upwards ? "rises" : "descends"] smoothly.") + + return 1 + +/datum/turbolift/proc/queue_move_to(var/datum/turbolift_floor/floor) + if(!floor || !(floor in floors) || (floor in queued_floors)) + return // STOP PRESSING THE BUTTON. + floor.pending_move(src) + queued_floors |= floor + queue_movement() + +// TODO: dummy machine ('lift mechanism') in powered area for functionality/blackout checks. +/datum/turbolift/proc/is_functional() + return 1 + +/datum/turbolift/proc/handle_movement() + busy = TRUE + + if (!do_move()) + if (target_floor) + target_floor.ext_panel.reset() + target_floor = null + else + queue_movement() + + busy = FALSE + +/datum/turbolift/proc/queue_movement() + move_timer = addtimer(CALLBACK(src, .proc/handle_movement), move_delay, TIMER_STOPPABLE) diff --git a/code/modules/turbolift/turbolift_areas.dm b/code/modules/turbolift/turbolift_areas.dm new file mode 100644 index 00000000000..c3adce35970 --- /dev/null +++ b/code/modules/turbolift/turbolift_areas.dm @@ -0,0 +1,12 @@ +// Used for creating the exchange areas. +/area/turbolift + name = "Turbolift" + base_turf = /turf/simulated/open + requires_power = 0 + station_area = 1 + sound_env = SMALL_ENCLOSED + + var/lift_floor_label = null + var/lift_floor_name = null + var/lift_announce_str = "Ding!" + var/arrival_sound = 'sound/machines/ding.ogg' diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm new file mode 100644 index 00000000000..2adf7cb8449 --- /dev/null +++ b/code/modules/turbolift/turbolift_console.dm @@ -0,0 +1,154 @@ +// Base type, do not use. +/obj/structure/lift + name = "turbolift control component" + icon = 'icons/obj/turbolift.dmi' + anchored = 1 + density = 0 + + var/datum/turbolift/lift + +/obj/structure/lift/set_dir(var/newdir) + . = ..() + pixel_x = 0 + pixel_y = 0 + if(dir & NORTH) + pixel_y = -32 + else if(dir & SOUTH) + pixel_y = 32 + else if(dir & EAST) + pixel_x = -32 + else if(dir & WEST) + pixel_x = 32 + +/obj/structure/lift/proc/pressed(var/mob/user) + if(!istype(user, /mob/living/silicon)) + if(user.a_intent == I_HURT) + user.visible_message("\The [user] hammers on the lift button!") + else + user.visible_message("\The [user] presses the lift button.") + + +/obj/structure/lift/New(var/newloc, var/datum/turbolift/_lift) + lift = _lift + return ..(newloc) + +/obj/structure/lift/attack_ai(var/mob/user) + return attack_hand(user) + +/obj/structure/lift/attack_generic(var/mob/user) + return attack_hand(user) + +/obj/structure/lift/attack_hand(var/mob/user) + return interact(user) + +/obj/structure/lift/interact(var/mob/user) + if(!lift.is_functional()) + return 0 + return 1 +// End base. + +// Button. No HTML interface, just calls the associated lift to its floor. +/obj/structure/lift/button + name = "elevator button" + desc = "A call button for an elevator. Be sure to hit it three hundred times." + icon_state = "button" + var/light_up = FALSE + var/datum/turbolift_floor/floor + +/obj/structure/lift/button/Destroy() + if(floor && floor.ext_panel == src) + floor.ext_panel = null + floor = null + return ..() + +/obj/structure/lift/button/proc/reset() + light_up = FALSE + update_icon() + +/obj/structure/lift/button/interact(var/mob/user) + if(!..()) + return + light_up() + pressed(user) + if(floor == lift.current_floor) + lift.open_doors() + addtimer(CALLBACK(src, .proc/reset), 3) + return + lift.queue_move_to(floor) + +/obj/structure/lift/button/proc/light_up() + light_up = TRUE + update_icon() + +/obj/structure/lift/button/update_icon() + if(light_up) + icon_state = "button_lit" + else + icon_state = initial(icon_state) + +// End button. + +// Panel. Lists floors (HTML), moves with the elevator, schedules a move to a given floor. +/obj/structure/lift/panel + name = "elevator control panel" + icon_state = "panel" + + +/obj/structure/lift/panel/attack_ghost(var/mob/user) + return interact(user) + +/obj/structure/lift/panel/interact(var/mob/user) + if(!..()) + return + + var/dat = list() + dat += "
Lift panel
" + + //the floors list stores levels in order of increasing Z + //therefore, to display upper levels at the top of the menu and + //lower levels at the bottom, we need to go through the list in reverse + for(var/i in lift.floors.len to 1 step -1) + var/datum/turbolift_floor/floor = lift.floors[i] + if(floor) + var/label = floor.label? floor.label : "Level #[i]" + dat += "" + dat += "[label]: [floor.name]
" + + dat += "
" + if(lift.doors_are_open()) + dat += "Close Doors
" + else + dat += "Open Doors
" + dat += "Emergency Stop" + dat += "
" + + var/datum/browser/popup = new(user, "turbolift_panel", "Lift Panel", 230, 260) + popup.set_content(jointext(dat, null)) + popup.open() + return + +/obj/structure/lift/panel/Topic(href, href_list) + . = ..() + if(.) + return + + var/panel_interact + if(href_list["move_to_floor"]) + lift.queue_move_to(locate(href_list["move_to_floor"])) + panel_interact = 1 + if(href_list["open_doors"]) + panel_interact = 1 + lift.open_doors() + if(href_list["close_doors"]) + panel_interact = 1 + lift.close_doors() + if(href_list["emergency_stop"]) + panel_interact = 1 + lift.emergency_stop() + + if(panel_interact) + pressed(usr) + + return 0 + +// End panel. diff --git a/code/modules/turbolift/turbolift_door.dm b/code/modules/turbolift/turbolift_door.dm new file mode 100644 index 00000000000..4be831ec64c --- /dev/null +++ b/code/modules/turbolift/turbolift_door.dm @@ -0,0 +1,45 @@ +/obj/machinery/door/airlock/lift + name = "Elevator Door" + desc = "Ding." + req_access = list(access_maint_tunnels) + opacity = 0 + autoclose = 0 + glass = 1 + icon = 'icons/obj/doors/doorlift.dmi' + hashatch = 0 + + var/datum/turbolift/lift + var/datum/turbolift_floor/floor + +/obj/machinery/door/airlock/lift/Destroy() + if(lift) + lift.doors -= src + if(floor) + floor.doors -= src + return ..() + +/obj/machinery/door/airlock/lift/bumpopen(var/mob/user) + return // No accidental sprinting into open elevator shafts. + +/obj/machinery/door/airlock/lift/allowed(mob/M) + return FALSE //only the lift machinery is allowed to operate this door + +/obj/machinery/door/airlock/lift/close(var/forced=0) + for(var/turf/turf in locs) + for(var/mob/living/LM in turf) + if(LM.mob_size <= MOB_TINY) + var/moved = 0 + for(dir in shuffle(cardinal.Copy())) + var/dest = get_step(LM,dir) + if(!(locate(/obj/machinery/door/airlock/lift) in dest)) + if(LM.Move(dest)) + moved = 1 + LM.visible_message("\The [LM] scurries away from the closing doors.") + break + if(!moved) // nowhere to go.... + LM.gib() + else // the mob is too big to just move, so we need to give up what we're doing + audible_message("\The [src]'s motors grind as they quickly reverse direction, unable to safely close.") + cur_command = null // the door will just keep trying otherwise + return 0 + return ..() diff --git a/code/modules/turbolift/turbolift_floor.dm b/code/modules/turbolift/turbolift_floor.dm new file mode 100644 index 00000000000..7761f092843 --- /dev/null +++ b/code/modules/turbolift/turbolift_floor.dm @@ -0,0 +1,33 @@ +// Simple holder for each floor in the lift. +/datum/turbolift_floor + var/area_ref + var/label + var/name + var/announce_str + var/arrival_sound + + var/list/doors = list() + var/obj/structure/lift/button/ext_panel + +/datum/turbolift_floor/proc/set_area_ref(var/ref) + var/area/turbolift/A = locate(ref) + if(!istype(A)) + log_debug("Turbolift floor area was of the wrong type: ref=[ref]") + return + + area_ref = ref + label = A.lift_floor_label + name = A.lift_floor_name ? A.lift_floor_name : A.name + announce_str = A.lift_announce_str + arrival_sound = A.arrival_sound + +//called when a lift has queued this floor as a destination +/datum/turbolift_floor/proc/pending_move(var/datum/turbolift/lift) + if(ext_panel) + ext_panel.light_up() + +//called when a lift arrives at this floor +/datum/turbolift_floor/proc/arrived(var/datum/turbolift/lift) + lift.open_doors(src) + if(ext_panel) + ext_panel.reset() \ No newline at end of file diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm new file mode 100644 index 00000000000..a6a3b236fd0 --- /dev/null +++ b/code/modules/turbolift/turbolift_map.dm @@ -0,0 +1,232 @@ +// Map object. +/obj/turbolift_map_holder + name = "turbolift map placeholder" + icon = 'icons/obj/turbolift_preview_3x3.dmi' + dir = SOUTH // Direction of the holder determines the placement of the lift control panel and doors. + var/clear_objects = 1 + var/depth = 1 // Number of floors to generate, including the initial floor. + var/lift_size_x = 2 // Number of turfs on each axis to generate in addition to the first + var/lift_size_y = 2 // ie. a 3x3 lift would have a value of 2 in each of these variables. + + // Various turf and door types used when generating the turbolift floors. + var/wall_type = /turf/simulated/wall/elevator + var/floor_type = /turf/simulated/floor/tiled/dark + var/door_type = /obj/machinery/door/airlock/lift + + var/list/areas_to_use = list() + +/obj/turbolift_map_holder/Destroy() + global.turbolifts -= src + return ..() + +/obj/turbolift_map_holder/Initialize() + ..() + global.turbolifts += src + + // Create our system controller. + var/datum/turbolift/lift = new() + + // Holder values since we're moving this object to null ASAP. + var/ux = x + var/uy = y + var/uz = z + var/udir = dir + forceMove(null) + + // These modifiers are used in relation to the origin + // to place the system control panels and doors. + var/int_panel_x + var/int_panel_y + var/ext_panel_x + var/ext_panel_y + var/door_x1 + var/door_y1 + var/door_x2 + var/door_y2 + var/light_x1 + var/light_x2 + var/light_y1 + var/light_y2 + + var/az = 1 + var/ex = (ux+lift_size_x) + var/ey = (uy+lift_size_y) + var/ez = (uz+(depth-1)) + + switch(dir) + + if(NORTH) + + int_panel_x = ux + Floor(lift_size_x/2) + int_panel_y = uy + 1 + ext_panel_x = ux + ext_panel_y = ey + 2 + + door_x1 = ux + 1 + door_y1 = ey + door_x2 = ex - 1 + door_y2 = ey + 1 + + light_x1 = ux + 1 + light_y1 = uy + 1 + light_x2 = ux + lift_size_x - 1 + light_y2 = uy + 1 + + if(SOUTH) + + int_panel_x = ux + Floor(lift_size_x/2) + int_panel_y = ey - 1 + ext_panel_x = ex + ext_panel_y = uy - 2 + + door_x1 = ux + 1 + door_y1 = uy - 1 + door_x2 = ex - 1 + door_y2 = uy + + light_x1 = ux + 1 + light_y1 = uy + 2 + light_x2 = ux + lift_size_x - 1 + light_y2 = uy + lift_size_y - 1 + + if(EAST) + + int_panel_x = ux+1 + int_panel_y = uy + Floor(lift_size_y/2) + ext_panel_x = ex+2 + ext_panel_y = ey + + door_x1 = ex + door_y1 = uy + 1 + door_x2 = ex + 1 + door_y2 = ey - 1 + + light_x1 = ux + 1 + light_y1 = uy + 1 + light_x2 = ux + 1 + light_y2 = uy + lift_size_x - 1 + + if(WEST) + + int_panel_x = ex-1 + int_panel_y = uy + Floor(lift_size_y/2) + ext_panel_x = ux-2 + ext_panel_y = uy + + door_x1 = ux - 1 + door_y1 = uy + 1 + door_x2 = ux + door_y2 = ey - 1 + + light_x1 = ux + lift_size_x - 1 + light_y1 = uy + 1 + light_x2 = ux + lift_size_x - 1 + light_y2 = uy + lift_size_y - 1 + + // Generate each floor and store it in the controller datum. + if(uz != 1) + for(var/i = 1, i < uz, i++) + lift.floors += null // This silly hack allows lifts to not start on the first zlevel + + for(var/cz = uz;cz<=ez;cz++) + + var/datum/turbolift_floor/cfloor = new() + lift.floors += cfloor + + var/list/floor_turfs = list() + // Update the appropriate turfs. + for(var/tx = ux to ex) + for(var/ty = uy to ey) + + var/turf/checking = locate(tx,ty,cz) + + if(!istype(checking)) + log_debug("[name] cannot find a component turf at [tx],[ty] on floor [cz]. Aborting.") + qdel(src) + return + + // Update path appropriately if needed. + var/swap_to = /turf/simulated/open + if(cz == uz) // Elevator. + if((tx == ux || ty == uy || tx == ex || ty == ey) && !(tx >= door_x1 && tx <= door_x2 && ty >= door_y1 && ty <= door_y2)) + swap_to = wall_type + else + swap_to = floor_type + + if(checking.type != swap_to) + checking.ChangeTurf(swap_to) + // Let's make absolutely sure that we have the right turf. + checking = locate(tx,ty,cz) + + // Clear out contents. + if(clear_objects) + for(var/atom/movable/thing in checking.contents) + if(thing.simulated) + qdel(thing) + + if(tx >= ux && tx <= ex && ty >= uy && ty <= ey) + floor_turfs += checking + + // Place exterior doors. + for(var/tx = door_x1 to door_x2) + for(var/ty = door_y1 to door_y2) + var/turf/checking = locate(tx,ty,cz) + var/internal = 1 + if(!(checking in floor_turfs)) + internal = 0 + if(checking.type != floor_type) + checking.ChangeTurf(floor_type) + checking = locate(tx,ty,cz) + for(var/atom/movable/thing in checking.contents) + if(thing.simulated) + qdel(thing) + if(checking.type == floor_type) // Don't build over empty space on lower levels. + var/obj/machinery/door/airlock/lift/newdoor = new door_type(checking) + if(internal) + lift.doors += newdoor + newdoor.lift = cfloor + else + cfloor.doors += newdoor + newdoor.floor = cfloor + + // Place exterior control panel. + var/turf/placing = locate(ext_panel_x, ext_panel_y, cz) + var/obj/structure/lift/button/panel_ext = new(placing, lift) + panel_ext.floor = cfloor + panel_ext.set_dir(udir) + cfloor.ext_panel = panel_ext + + // Place lights + var/turf/placing1 = locate(light_x1, light_y1, cz) + var/turf/placing2 = locate(light_x2, light_y2, cz) + var/obj/machinery/light/light1 = new(placing1, light) + var/obj/machinery/light/light2 = new(placing2, light) + if(udir == NORTH || udir == SOUTH) + light1.set_dir(WEST) + light2.set_dir(EAST) + else + light1.set_dir(SOUTH) + light2.set_dir(NORTH) + + // Update area. + if(az > areas_to_use.len) + log_debug("Insufficient defined areas in turbolift datum, aborting.") + qdel(src) + return + + var/area_path = areas_to_use[az] + for(var/thing in floor_turfs) + new area_path(thing) + var/area/A = locate(area_path) + cfloor.set_area_ref("\ref[A]") + az++ + + // Place lift panel. + var/turf/T = locate(int_panel_x, int_panel_y, uz) + lift.control_panel_interior = new(T, lift) + lift.control_panel_interior.set_dir(udir) + lift.current_floor = lift.floors[uz] + + lift.open_doors() + + return INITIALIZE_HINT_QDEL diff --git a/code/modules/turbolift/turbolift_turfs.dm b/code/modules/turbolift/turbolift_turfs.dm new file mode 100644 index 00000000000..632160efaa1 --- /dev/null +++ b/code/modules/turbolift/turbolift_turfs.dm @@ -0,0 +1,2 @@ +/turf/simulated/wall/elevator/New(var/newloc) + ..(newloc,"elevatorium") diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm index f251bd38374..1cceef28f64 100644 --- a/code/modules/vehicles/bike.dm +++ b/code/modules/vehicles/bike.dm @@ -139,4 +139,4 @@ /obj/vehicle/bike/Destroy() qdel(ion) - ..() + return ..() diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 7e084e0f360..52d4c70a5dc 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -38,11 +38,11 @@ //------------------------------------------- // Standard procs //------------------------------------------- -/obj/vehicle/train/cargo/engine/New() - ..() +/obj/vehicle/train/cargo/engine/Initialize() + . = ..() cell = new /obj/item/weapon/cell/high(src) key = new(src) - var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs + var/image/I = new(icon = icon, icon_state = "[icon_state]_overlay", layer = src.layer + 0.2) //over mobs overlays += I turn_off() //so engine verbs are correctly set diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index e4f6935657b..21e788c5a36 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -17,11 +17,14 @@ var/obj/vehicle/train/lead var/obj/vehicle/train/tow + can_hold_mob = TRUE + //------------------------------------------- // Standard procs //------------------------------------------- -/obj/vehicle/train/initialize() +/obj/vehicle/train/Initialize() + . = ..() for(var/obj/vehicle/train/T in orange(1, src)) latch(T) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index be3dfa4b676..583a5d28774 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -143,21 +143,23 @@ /obj/vehicle/emp_act(severity) var/was_on = on stat |= EMPED - var/obj/effect/overlay/pulse2 = getFromPool(/obj/effect/overlay, src.loc) + var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(src.loc) pulse2.icon = 'icons/effects/effects.dmi' pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" pulse2.anchored = 1 pulse2.set_dir(pick(cardinal)) - spawn(10) - qdel(pulse2) + QDEL_IN(pulse2, 10) if(on) turn_off() - spawn(severity*300) - stat &= ~EMPED - if(was_on) - turn_on() + + addtimer(CALLBACK(src, .proc/post_emp, was_on), severity * 300) + +/obj/vehicle/proc/post_emp(was_on) + stat &= ~EMPED + if(was_on) + turn_on() /obj/vehicle/attack_ai(mob/user as mob) return @@ -196,8 +198,8 @@ src.visible_message("\red [src] blows apart!", 1) var/turf/Tsec = get_turf(src) - getFromPool(/obj/item/stack/rods, Tsec) - getFromPool(/obj/item/stack/rods, Tsec) + new /obj/item/stack/rods(Tsec) + new /obj/item/stack/rods(Tsec) new /obj/item/stack/cable_coil/cut(Tsec) if(cell) diff --git a/code/modules/wireless/interfaces.dm b/code/modules/wireless/interfaces.dm index a872933c2d2..7d50608a5f1 100644 --- a/code/modules/wireless/interfaces.dm +++ b/code/modules/wireless/interfaces.dm @@ -24,8 +24,7 @@ before it is setup. Add or modify the objects Destroy() proc to include: - qdel(wifi_receiver) - wifi_receiver = null + QDEL_NULL(wifi_receiver) Senders are setup the same way, except with a var/datum/wifi/sender/subtype/wifi_sender variable instead of (or in addition to) a /wifi/receiver variable. @@ -45,27 +44,27 @@ var/list/connected_devices var/id -/datum/wifi/New(var/new_id, var/obj/O) +/datum/wifi/New(new_id, obj/O) connected_devices = new() id = new_id if(istype(O)) parent = O -/datum/wifi/Destroy(var/wifi/device) +/datum/wifi/Destroy(wifi/device) parent = null for(var/datum/wifi/D in connected_devices) D.disconnect_device(src) disconnect_device(D) return ..() -/datum/wifi/proc/connect_device(var/datum/wifi/device) +/datum/wifi/proc/connect_device(datum/wifi/device) if(connected_devices) connected_devices |= device else connected_devices = new() connected_devices |= device -/datum/wifi/proc/disconnect_device(var/datum/wifi/device) +/datum/wifi/proc/disconnect_device(datum/wifi/device) if(connected_devices) connected_devices -= device @@ -74,12 +73,12 @@ //------------------------------- /datum/wifi/receiver/New() ..() - if(wirelessProcess) - wirelessProcess.add_device(src) + if(SSwireless) + SSwireless.add_device(src) /datum/wifi/receiver/Destroy() - if(wirelessProcess) - wirelessProcess.remove_device(src) + if(SSwireless) + SSwireless.remove_device(src) return ..() //------------------------------- @@ -89,12 +88,12 @@ ..() send_connection_request() -/datum/wifi/sender/proc/set_target(var/new_target) +/datum/wifi/sender/proc/set_target(new_target) id = new_target /datum/wifi/sender/proc/send_connection_request() var/datum/connection_request/C = new(src, id) - wirelessProcess.add_request(C) + SSwireless.add_request(C) /datum/wifi/sender/proc/activate(mob/living/user) return @@ -109,7 +108,7 @@ var/datum/wifi/sender/source //wifi/sender object creating the request var/id //id tag of the target device(s) to try to connect to -/datum/connection_request/New(var/datum/wifi/sender/sender, var/receiver) +/datum/connection_request/New(datum/wifi/sender/sender, receiver) if(istype(sender)) source = sender id = receiver diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm index 18c210a6dc4..9037cd02456 100644 --- a/code/modules/xgm/xgm_gas_mixture.dm +++ b/code/modules/xgm/xgm_gas_mixture.dm @@ -15,8 +15,18 @@ //List of active tile overlays for this gas_mixture. Updated by check_tile_graphic() var/list/graphic = list() -/datum/gas_mixture/New(vol = CELL_VOLUME) - volume = vol +/datum/gas_mixture/New(_volume = CELL_VOLUME, _temperature = 0, _group_multiplier = 1) + volume = _volume + temperature = _temperature + group_multiplier = _group_multiplier + +/datum/gas_mixture/proc/get_gas(gasid) + if(!gas.len) + return 0 //if the list is empty BYOND treats it as a non-associative list, which runtimes + return gas[gasid] * group_multiplier + +/datum/gas_mixture/proc/get_total_moles() + return total_moles * group_multiplier //Takes a gas string and the amount of moles to adjust by. Calls update_values() if update isn't 0. /datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1) @@ -95,11 +105,16 @@ update_values() - +// Used to equalize the mixture between two zones before sleeping an edge. /datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer) var/our_heatcap = heat_capacity() var/share_heatcap = sharer.heat_capacity() + // Special exception: there isn't enough air around to be worth processing this edge next tick, zap both to zero. + if(total_moles + sharer.total_moles <= MINIMUM_AIR_TO_SUSPEND) + gas.Cut() + sharer.gas.Cut() + for(var/g in gas|sharer.gas) var/comb = gas[g] + sharer.gas[g] comb /= volume + sharer.volume @@ -110,6 +125,9 @@ temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap) sharer.temperature = temperature + update_values() + sharer.update_values() + return 1 @@ -123,6 +141,7 @@ //Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB. /datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy) + if (total_moles == 0) return 0 @@ -267,6 +286,12 @@ return removed +//Returns the amount of gas that has the given flag, in moles +/datum/gas_mixture/proc/get_by_flag(flag) + . = 0 + for(var/g in gas) + if(gas_data.flags[g] & flag) + . += gas[g] //Copies gas and temperature from another gas_mixture. /datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample) @@ -279,9 +304,16 @@ //Checks if we are within acceptable range of another gas_mixture to suspend processing or merge. -/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample) +/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample, var/vacuum_exception = 0) if(!sample) return 0 + if(vacuum_exception) + // Special case - If one of the two is zero pressure, the other must also be zero. + // This prevents suspending processing when an air-filled room is next to a vacuum, + // an edge case which is particually obviously wrong to players + if(total_moles == 0 && sample.total_moles != 0 || sample.total_moles == 0 && total_moles != 0) + return 0 + var/list/marked = list() for(var/g in gas) if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \ @@ -290,6 +322,9 @@ return 0 marked[g] = 1 + if(abs(return_pressure() - sample.return_pressure()) > MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND) + return 0 + for(var/g in sample.gas) if(!marked[g]) if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \ @@ -314,29 +349,25 @@ //Two lists can be passed by reference if you need know specifically which graphics were added and removed. /datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null) for(var/g in gas_data.overlay_limit) - if(graphic.Find(gas_data.tile_overlay[g])) + if (graphic[gas_data.tile_overlay[g]]) //Overlay is already applied for this gas, check if it's still valid. if(gas[g] <= gas_data.overlay_limit[g]) - if(!graphic_remove) - graphic_remove = list() - graphic_remove += gas_data.tile_overlay[g] + LAZYADD(graphic_remove, gas_data.tile_overlay[g]) else //Overlay isn't applied for this gas, check if it's valid and needs to be added. if(gas[g] > gas_data.overlay_limit[g]) - if(!graphic_add) - graphic_add = list() - graphic_add += gas_data.tile_overlay[g] + LAZYADD(graphic_add, gas_data.tile_overlay[g]) . = 0 //Apply changes - if(graphic_add && graphic_add.len) - graphic += graphic_add + if(LAZYLEN(graphic_add)) + for (var/entry in graphic_add) + graphic[entry] = TRUE // This is an assoc list to make checking it a bit faster. . = 1 - if(graphic_remove && graphic_remove.len) + if(LAZYLEN(graphic_remove)) graphic -= graphic_remove . = 1 - //Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier. /datum/gas_mixture/proc/add(datum/gas_mixture/right_side) for(var/g in right_side.gas) @@ -424,7 +455,6 @@ /datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air) return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1) - //Equalizes a list of gas mixtures. Used for pipe networks. /proc/equalize_gases(datum/gas_mixture/list/gases) //Calculate totals from individual components @@ -464,3 +494,12 @@ gasmix.multiply(gasmix.volume) return 1 + +/datum/gas_mixture/proc/get_mass() + for(var/g in gas) + . += gas[g] * gas_data.molar_mass[g] * group_multiplier + +/datum/gas_mixture/proc/specific_mass() + var/M = get_total_moles() + if(M) + return get_mass()/M diff --git a/code/unit_tests/foundation_tests.dm b/code/unit_tests/foundation_tests.dm index 1b03b73221e..d4ff6e93648 100644 --- a/code/unit_tests/foundation_tests.dm +++ b/code/unit_tests/foundation_tests.dm @@ -20,7 +20,7 @@ datum/unit_test/foundation/step_shall_return_true_on_success/start_test() return 1 datum/unit_test/foundation/proc/TestStep(type_to_test) - var/turf/start = locate(20,20,1) + var/turf/start = locate(20,120,1) var/atom/movable/T = new type_to_test(start) . = step(T, NORTH) diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm index d81d73e6bf3..edc2ec10aaa 100644 --- a/code/unit_tests/map_tests.dm +++ b/code/unit_tests/map_tests.dm @@ -11,34 +11,44 @@ datum/unit_test/apc_area_test - name = "MAP: Area Test APC / Scrubbers / Vents Z level 1" + name = "MAP: Area Test APC / Scrubbers / Vents (Station)" datum/unit_test/apc_area_test/start_test() var/list/bad_areas = list() var/area_test_count = 0 - var/list/exempt_areas = typesof(/area/space, \ - /area/syndicate_station, \ - /area/skipjack_station, \ - /area/solar, \ - /area/shuttle, \ - /area/holodeck, \ - /area/supply/station \ - ) - var/list/exempt_from_atmos = typesof( /area/maintenance, \ - /area/storage, \ - /area/engineering/atmos/storage, \ - /area/rnd/test_area, \ - /area/construction, \ - /area/server - ) + // This is formatted strangely because it fails the indentation test if it's formatted properly. + // ¯\_(ツ)_/¯ + var/list/exempt_areas = typesof(/area/space + ,/area/syndicate_station + ,/area/skipjack_station + ,/area/solar + ,/area/shuttle + ,/area/holodeck + ,/area/supply/station + ,/area/wizard_station + ,/area/tdome + ,/area/centcom + ,/area/syndicate_mothership + ,/area/beach + ,/area/prison + ,/area/supply/dock + ) - var/list/exempt_from_apc = typesof( /area/construction, \ - /area/medical/genetics - ) + var/list/exempt_from_atmos = typesof(/area/maintenance + ,/area/storage + ,/area/engineering/atmos/storage + ,/area/rnd/test_area + ,/area/construction + ,/area/server + ) + + var/list/exempt_from_apc = typesof(/area/construction + ,/area/medical/genetics + ) for(var/area/A in world) - if(A.z == 1 && !(A.type in exempt_areas)) + if(A.z in list(2,3,4,5) && !(A.type in exempt_areas)) area_test_count++ var/area_good = 1 var/bad_msg = "[ascii_red]--------------- [A.name]([A.type])" @@ -69,7 +79,7 @@ datum/unit_test/apc_area_test/start_test() //======================================================================================= datum/unit_test/wire_test - name = "MAP: Cable Test Z level 1" + name = "MAP: Cable Test (Station)" datum/unit_test/wire_test/start_test() var/wire_test_count = 0 @@ -83,7 +93,7 @@ datum/unit_test/wire_test/start_test() T = null T = get_turf(C) - if(T && T.z == 1) + if(T && T.z in list(2,3,4,5)) cable_turfs |= get_turf(C) for(T in cable_turfs) diff --git a/code/unit_tests/observation_tests.dm b/code/unit_tests/observation_tests.dm index 2a49dedec91..7dc522aa8f4 100644 --- a/code/unit_tests/observation_tests.dm +++ b/code/unit_tests/observation_tests.dm @@ -19,8 +19,8 @@ datum/unit_test/observation/moved_observer_shall_register_on_follow/start_test() else fail("The observer is not following the mob.") - qdel(H) - qdel(O) + QDEL_IN(H, 10 SECONDS) + QDEL_IN(O, 10 SECONDS) return 1 datum/unit_test/observation/moved_observer_shall_unregister_on_nofollow @@ -38,8 +38,8 @@ datum/unit_test/observation/moved_observer_shall_unregister_on_nofollow/start_te else fail("The observer is still following the mob.") - qdel(H) - qdel(O) + QDEL_IN(H, 10 SECONDS) + QDEL_IN(O, 10 SECONDS) return 1 datum/unit_test/observation/moved_shall_not_register_on_enter_without_listeners @@ -56,8 +56,8 @@ datum/unit_test/observation/moved_shall_not_register_on_enter_without_listeners/ else fail("The mob has registered to the closet's moved event.") - qdel(C) - qdel(H) + QDEL_IN(C, 10 SECONDS) + QDEL_IN(H, 10 SECONDS) return 1 datum/unit_test/observation/moved_shall_registers_recursively_on_new_listener @@ -78,9 +78,9 @@ datum/unit_test/observation/moved_shall_registers_recursively_on_new_listener/st else fail("Recursive moved registration failed. Human listening to closet: [listening_to_closet] - Observer listening to human: [listening_to_human]") - qdel(C) - qdel(H) - qdel(O) + QDEL_IN(C, 10 SECONDS) + QDEL_IN(H, 10 SECONDS) + QDEL_IN(O, 10 SECONDS) return 1 datum/unit_test/observation/moved_shall_registers_recursively_with_existing_listener @@ -101,8 +101,8 @@ datum/unit_test/observation/moved_shall_registers_recursively_with_existing_list else fail("Recursive moved registration failed. Human listening to closet: [listening_to_closet] - Observer listening to human: [listening_to_human]") - qdel(C) - qdel(H) - qdel(O) + QDEL_IN(C, 10 SECONDS) + QDEL_IN(H, 10 SECONDS) + QDEL_IN(O, 10 SECONDS) return 1 diff --git a/code/unit_tests/ss_test.dm b/code/unit_tests/ss_test.dm new file mode 100644 index 00000000000..3fdd3fe16cf --- /dev/null +++ b/code/unit_tests/ss_test.dm @@ -0,0 +1,79 @@ +// This file exists so unit tests work with SMC. +// It initializes last in the subsystem order, and queues +// the tests to start about 20 seconds after init is done. + +#ifdef UNIT_TEST + +/datum/controller/subsystem/unit_tests + name = "Unit Tests" + init_order = -1e6 // last. + flags = SS_NO_FIRE + +/datum/controller/subsystem/unit_tests/Initialize(timeofday) + log_unit_test("Initializing Unit Testing") + + // + //Start the Round. + // + + world.save_mode("extended") + + addtimer(CALLBACK(GLOBAL_PROC, .proc/_ut_start_game), 10 SECONDS) + +/proc/_ut_start_game() + if (SSticker.current_state == GAME_STATE_PREGAME) + SSticker.current_state = GAME_STATE_SETTING_UP + + log_unit_test("Round has been started.") + + addtimer(CALLBACK(GLOBAL_PROC, .proc/_ut_do_tests), 10 SECONDS) + +/proc/_ut_do_tests() + var/list/test_datums = typesof(/datum/unit_test) + + var/list/async_test = list() + var/list/started_tests = list() + + log_unit_test("Testing Started.") + + for (var/test in test_datums) + var/datum/unit_test/d = new test() + + if(d.disabled) + d.pass("[ascii_red]Check Disabled: [d.why_disabled]") + continue + + if(findtext(d.name, "template")) + continue + + if(isnull(d.start_test())) // Start the test. + d.fail("Test Runtimed") + if(d.async) // If it's async then we'll need to check back on it later. + async_test.Add(d) + total_unit_tests++ + + // + // Check the async tests to see if they are finished. + // + + while(async_test.len) + for(var/datum/unit_test/test in async_test) + if(test.check_result()) + async_test.Remove(test) + sleep(1) + + // + // Make sure all Unit Tests reported a result + // + + for(var/datum/unit_test/test in started_tests) + if(!test.reported) + test.fail("Test failed to report a result.") + + if(all_unit_tests_passed) + log_unit_test("[ascii_green]**** All Unit Tests Passed \[[total_unit_tests]\] ****[ascii_reset]") + del world + else + log_unit_test("[ascii_red]**** \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed ****[ascii_reset]") + del world +#endif diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm index dac62a552eb..e44da99a335 100644 --- a/code/unit_tests/unit_test.dm +++ b/code/unit_tests/unit_test.dm @@ -73,87 +73,3 @@ proc/load_unit_test_changes() log_unit_test("Overiding Configuration option for Asteroid Generation to ENABLED") config.generate_asteroid = 1 // The default map requires it, the example config doesn't have this enabled. */ - - - - -proc/initialize_unit_tests() - log_unit_test("Initializing Unit Testing") - - // - //Start the Round. - // - - if(!ticker) - crash_with("No Ticker") - world.Del() - - var/said_msg = 0 - while(ticker.pregame_timeleft && ticker.pregame_timeleft > 160) // Make sure the initial startup is complete. - if(ticker.pregame_timeleft < 175 && !said_msg) - said_msg = 1 - log_unit_test("Pregame Count down has started, giving it 20 seconds to finish.") - sleep(1) - - world.save_mode("extended") - - sleep(1) - - ticker.current_state = GAME_STATE_SETTING_UP - - log_unit_test("Round has been started. Waiting 10 seconds to start tests.") - sleep(100) - - // - // Run Tests - // - - var/list/test_datums = typesof(/datum/unit_test) - - var/list/async_test = list() - var/list/started_tests = list() - - log_unit_test("Testing Started.") - - for (var/test in test_datums) - var/datum/unit_test/d = new test() - - if(d.disabled) - d.pass("[ascii_red]Check Disabled: [d.why_disabled]") - continue - - if(findtext(d.name, "template")) - continue - - if(isnull(d.start_test())) // Start the test. - d.fail("Test Runtimed") - if(d.async) // If it's async then we'll need to check back on it later. - async_test.Add(d) - total_unit_tests++ - - - - // - // Check the async tests to see if they are finished. - // - - while(async_test.len) - for(var/datum/unit_test/test in async_test) - if(test.check_result()) - async_test.Remove(test) - sleep(1) - - // - // Make sure all Unit Tests reported a result - // - - for(var/datum/unit_test/test in started_tests) - if(!test.reported) - test.fail("Test failed to report a result.") - - if(all_unit_tests_passed) - log_unit_test("[ascii_green]**** All Unit Tests Passed \[[total_unit_tests]\] ****[ascii_reset]") - world.Del() - else - log_unit_test("[ascii_red]**** \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed ****[ascii_reset]") - world.Del() diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm index 81d0179b2a5..0772f9f1c26 100644 --- a/code/unit_tests/zas_tests.dm +++ b/code/unit_tests/zas_tests.dm @@ -126,15 +126,13 @@ datum/unit_test/zas_area_test/arrival_maint datum/unit_test/zas_area_test/mining_shuttle_at_station name = "ZAS: Mining Shuttle (Station)" area_path = /area/shuttle/mining/station + disabled = 1 + why_disabled = "This test has not been updated for newmap." datum/unit_test/zas_area_test/ name = "ZAS: Cargo Maintenance" area_path = /area/maintenance/cargo -datum/unit_test/zas_area_test/eng_shuttle - name = "ZAS: Construction Site Shuttle (Station)" - area_path = /area/shuttle/constructionsite/station - datum/unit_test/zas_area_test/incinerator name = "ZAS: Incinerator" area_path = /area/maintenance/incinerator @@ -149,13 +147,16 @@ datum/unit_test/zas_area_test/xenobio name = "ZAS: Xenobiology" area_path = /area/rnd/xenobiology +/* Hey, this area doesn't exist on the Aurora II. datum/unit_test/zas_area_test/research_maint_starboard name = "ZAS: Research Starboard Maintenance" area_path = /area/maintenance/research_starboard + Nor does this one. datum/unit_test/zas_area_test/west_hall_mining_outpost name = "ZAS: Mining outpost West Hallway" area_path = /area/outpost/mining_main/west_hall +*/ /* datum/unit_test/zas_area_test/mining_area @@ -178,6 +179,8 @@ datum/unit_test/zas_area_test/ datum/unit_test/zas_supply_shuttle_moved name = "ZAS: Supply Shuttle (When Moved)" async=1 // We're moving the shuttle using built in procs. + disabled = 1 + why_disabled = "This test has not been updated for newmap." var/datum/shuttle/ferry/supply/Shuttle = null @@ -189,7 +192,7 @@ datum/unit_test/zas_supply_shuttle_moved/start_test() fail("Shuttle Controller not setup at time of test.") Shuttle = shuttle_controller.shuttles["Supply"] - supply_controller.movetime = 5 // Speed up the shuttle movement. + SScargo.movetime = 5 // Speed up the shuttle movement. if(isnull(Shuttle)) fail("Unable to locate the supply shuttle") diff --git a/code/world.dm b/code/world.dm index 66db0ad5a1a..60e826f2a9c 100644 --- a/code/world.dm +++ b/code/world.dm @@ -6,16 +6,12 @@ 1. All global variables are initialized (including the global_init instance). 2. The map is initialized, and map objects are created. - 3. world/New() runs, creating the process scheduler (and the old master controller) and spawning their setup. - 4. processScheduler/setup() runs, creating all the processes. game_controller/setup() runs, calling initialize() on all movable atoms in the world. - 5. The gameticker is created. + 3. world/New() runs, creating & starting the master controller. + 4. The master controller initializes the rest of the game. */ var/global/datum/global_init/init = new () -// The list of objects that will need to be initialized in ticker creation. -var/global/list/objects_init_list = list() - /* Pre-map initialization stuff should go here. */ @@ -29,6 +25,11 @@ var/global/list/objects_init_list = list() initialize_chemical_reactions() qdel(src) //we're done + init = null + +/datum/global_init/Destroy() + ..() + return 3 // QDEL_HINT_HARDDEL ain't defined here, so magic number it is. /var/game_id = null /proc/generate_gameid() @@ -87,53 +88,16 @@ var/global/list/objects_init_list = list() . = ..() -#ifndef UNIT_TEST - - sleep_offline = 1 - -#else +#ifdef UNIT_TEST log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.") load_unit_test_changes() #endif - // Set up roundstart seed list. - plant_controller = new() + // Do not add initialization stuff to this file, unless it *must* run before the MC initializes! + // (hint: you generally won't need this) + // To do things on server-start, create a subsystem or shove it into one of the miscellaneous init subsystems. - // This is kinda important. Set up details of what the hell things are made of. - populate_material_list() - - if(config.generate_asteroid) - // These values determine the specific area that the map is applied to. - // If you do not use the official Baycode moonbase map, you will need to change them. - //Create the mining Z-level. - new /datum/random_map/automata/cave_system(null,1,1,5,255,255) - //new /datum/random_map/noise/volcanism(null,1,1,5,255,255) // Not done yet! Pretty, though. - // Create the mining ore distribution map. - new /datum/random_map/noise/ore(null, 1, 1, 5, 64, 64) - // Update all turfs to ensure everything looks good post-generation. Yes, - // it's brute-forcey, but frankly the alternative is a mine turf rewrite. - - // Create autolathe recipes, as above. - populate_lathe_recipes() - - // Create robolimbs for chargen. - populate_robolimb_list() - - processScheduler = new - master_controller = new /datum/controller/game_controller() - spawn(1) - processScheduler.deferSetupFor(/datum/controller/process/ticker) - processScheduler.setup() - master_controller.setup() -#ifdef UNIT_TEST - initialize_unit_tests() -#endif - - - - spawn(3000) //so we aren't adding to the round-start lag - if(config.ToRban) - ToRban_autoupdate() + Master.Initialize(10, FALSE) #undef RECOMMENDED_VERSION @@ -150,10 +114,10 @@ var/list/world_api_rate_limit = list() log_debug("API: Request Received - from:[addr], master:[master], key:[key]") diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key], auth:[auth] [log_end]" - if (!ticker) //If the game is not started most API Requests would not work because of the throtteling + /*if (!SSticker) //If the game is not started most API Requests would not work because of the throtteling response["statuscode"] = 500 response["response"] = "Game not started yet!" - return json_encode(response) + return json_encode(response)*/ if (isnull(query)) log_debug("API - Bad Request - No query specified") @@ -210,7 +174,7 @@ var/list/world_api_rate_limit = list() world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')) // random end sounds!! - LastyBatsy */ - processScheduler.stop() + Master.Shutdown() if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite for(var/client/C in clients) @@ -348,7 +312,7 @@ var/inerror = 0 var/list/features = list() - if(ticker) + if(Master.initializing) if(master_mode) features += master_mode else diff --git a/config/example/config.txt b/config/example/config.txt index 6685da1a160..84f0ab098a7 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -436,7 +436,12 @@ API_RATE_LIMIT 50 ## IPs are separated by ; API_RATE_LIMIT_WHITELIST 127.0.0.1 +# The maximum amount of a tick that the MC is permitted to use during server startup. +# If not set will default to 98%. +#MC_TICKLIMIT_INIT 98 + + ## GELF Logging Configuration LOG_GELF_ENABLED 0 LOG_GELF_IP 192.168.100.80 -LOG_GELF_PORT 12201 \ No newline at end of file +LOG_GELF_PORT 12201 diff --git a/html/changelogs/LordFowl - VaurcaBug1.yml b/html/changelogs/LordFowl - VaurcaBug1.yml new file mode 100644 index 00000000000..f0acaa6e520 --- /dev/null +++ b/html/changelogs/LordFowl - VaurcaBug1.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: N3X15 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed Vaurca not spawning with appropriate footwear." + - bugfix: "Fixed K'ois Spores not properly spawning in hydroponics." diff --git a/html/changelogs/arrow768-crusher.yml b/html/changelogs/arrow768-crusher.yml new file mode 100644 index 00000000000..833ce0303d5 --- /dev/null +++ b/html/changelogs/arrow768-crusher.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Arrow768 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added the crusher." diff --git a/html/changelogs/lohikar-smc.yml b/html/changelogs/lohikar-smc.yml new file mode 100644 index 00000000000..0cf86d2d8bb --- /dev/null +++ b/html/changelogs/lohikar-smc.yml @@ -0,0 +1,55 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Lohikar + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - experiment: "Replaced our master controller & ProcessScheduler with /tg/'s StonedMC, which should lead to better overall server performance." + - tweak: "Added lag-checks to the Singularity." + - tweak: "Tesla beams now travel between objects instantly instead of bouncing." + - tweak: "Tesla mini-balls will increase the Tesla's bolt rate instead of increasing the energy per bolt." + - tweak: "The Tesla will now lose power over time like the singularity if not powered with a particle accelerator." + - imageadd: "Tweaked how lattices' icons are generated." + - experiment: "Added lagchecks to ZAS & Airflow." + - bugfix: "Fixed a bug where paper's icon did not update in certain cases." + - tweak: "Conveyor belts' switches are now more responsive." + - experiment: "Refactored a lot of backend code which should lead to better performance or improved response times for certain objects. See the PR on GitHub for details." + - tweak: "Slowed down blob growth a bit." + - experiment: "Reworked how the server boots up; server restarts should be significantly faster." + - tweak: "Added some lag-checks to quick-pickup bags so they won't lag the entire server." + - experiment: "Changed how the server sends some resource files to clients in an effort to reduce connection delay." + - experiment: "Made some tweaks to the server's decision-making process for when to run lighting updates in an effort to reduce lag." + - tweak: "Reduced APC icon update delay." + - tweak: "Exosuit fabricators' material insert animation is now colored based on what material is being inserted into the fabricator." + - tweak: "Fixed a regression in lighting performance caused by a fix for infinite darkness." + - tweak: "Tweaked how some common shades of lighting are drawn client-side in an effort to improve client-side performance in common situations." + - tweak: "Tweaked how queued lighting updates are processed, allowing the lighting engine to do partial lighting updates instead of always doing a complete update cycle." diff --git a/html/changelogs/lohikar-smcnm.yml b/html/changelogs/lohikar-smcnm.yml new file mode 100644 index 00000000000..323ede89216 --- /dev/null +++ b/html/changelogs/lohikar-smcnm.yml @@ -0,0 +1,5 @@ +author: Lohikar +delete-after: True +changes: + - rscadd: "Added a new icon generation system for openturfs, allowing mobs & objects below to be drawn in real-time without a meaningful performance impact." + - tweak: "Added a safety check to prevent admin commands from starting the game before server initialization has completed." diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 521aea66d40..894ad6365a9 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi index d0d43312a53..897eaf53a50 100644 Binary files a/icons/effects/lighting_overlay.dmi and b/icons/effects/lighting_overlay.dmi differ diff --git a/icons/effects/projectiles.dmi b/icons/effects/projectiles.dmi index 10d8f489ade..83ee8e92bd9 100644 Binary files a/icons/effects/projectiles.dmi and b/icons/effects/projectiles.dmi differ diff --git a/icons/mecha/mech_bay.dmi b/icons/mecha/mech_bay.dmi index 2be6a4bd7d9..a45960b58fd 100644 Binary files a/icons/mecha/mech_bay.dmi and b/icons/mecha/mech_bay.dmi differ diff --git a/icons/misc/beach.dmi b/icons/misc/beach.dmi index 4caa0d10d77..3e9ad2ef433 100644 Binary files a/icons/misc/beach.dmi and b/icons/misc/beach.dmi differ diff --git a/icons/misc/openspace.dmi b/icons/misc/openspace.dmi new file mode 100644 index 00000000000..006e59e6c0d Binary files /dev/null and b/icons/misc/openspace.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index ecb15c81417..188266bc48d 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/cavern.dmi b/icons/mob/cavern.dmi new file mode 100644 index 00000000000..e781b837aa0 Binary files /dev/null and b/icons/mob/cavern.dmi differ diff --git a/icons/mob/held_mobs.dmi b/icons/mob/held_mobs.dmi index c25c4b7c68e..6dcd071c52b 100644 Binary files a/icons/mob/held_mobs.dmi and b/icons/mob/held_mobs.dmi differ diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index bbbe3e86e39..523f03086ce 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index 28aa9c74a2e..e77b65917b8 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 1815c4b15ad..10b053ee228 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi index 8b9cad0bffa..3519217d2db 100644 Binary files a/icons/obj/Cryogenic2.dmi and b/icons/obj/Cryogenic2.dmi differ diff --git a/icons/obj/banner.dmi b/icons/obj/banner.dmi new file mode 100644 index 00000000000..38b3351ebc2 Binary files /dev/null and b/icons/obj/banner.dmi differ diff --git a/icons/obj/cart.dmi b/icons/obj/cart.dmi new file mode 100644 index 00000000000..b2d219592a2 Binary files /dev/null and b/icons/obj/cart.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index bb53ac22ffb..5c5f54f644b 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index f8c2746755d..b892ff1d673 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 353d39ba989..494ae65ad49 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/doors/DoorHazard.dmi b/icons/obj/doors/DoorHazard.dmi index 35f4c474bf3..7f6114aa2e3 100644 Binary files a/icons/obj/doors/DoorHazard.dmi and b/icons/obj/doors/DoorHazard.dmi differ diff --git a/icons/obj/doors/DoorSAC.dmi b/icons/obj/doors/DoorSAC.dmi new file mode 100644 index 00000000000..c1f0ade52a5 Binary files /dev/null and b/icons/obj/doors/DoorSAC.dmi differ diff --git a/icons/obj/doors/doorlift.dmi b/icons/obj/doors/doorlift.dmi new file mode 100644 index 00000000000..3b037a89568 Binary files /dev/null and b/icons/obj/doors/doorlift.dmi differ diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi index 852c69bc3aa..4210cb891a5 100644 Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 77e08f2b402..fd0618fd340 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/machines/SpaceShip.dmi b/icons/obj/machines/SpaceShip.dmi new file mode 100644 index 00000000000..fb7f84f410d Binary files /dev/null and b/icons/obj/machines/SpaceShip.dmi differ diff --git a/icons/obj/machines/crusherbase.dmi b/icons/obj/machines/crusherbase.dmi new file mode 100644 index 00000000000..cea8c97a4cb Binary files /dev/null and b/icons/obj/machines/crusherbase.dmi differ diff --git a/icons/obj/machines/crusherpiston.dmi b/icons/obj/machines/crusherpiston.dmi new file mode 100644 index 00000000000..37784e6a5c2 Binary files /dev/null and b/icons/obj/machines/crusherpiston.dmi differ diff --git a/icons/obj/machines/floor_light.dmi b/icons/obj/machines/floor_light.dmi index c2386492806..bcdb8413045 100644 Binary files a/icons/obj/machines/floor_light.dmi and b/icons/obj/machines/floor_light.dmi differ diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi index af660e2475e..51b639afe02 100644 Binary files a/icons/obj/machines/mining_machines.dmi and b/icons/obj/machines/mining_machines.dmi differ diff --git a/icons/obj/machines/particle_accelerator.dmi b/icons/obj/machines/particle_accelerator.dmi index c601b8d1b6a..54180bf7b70 100644 Binary files a/icons/obj/machines/particle_accelerator.dmi and b/icons/obj/machines/particle_accelerator.dmi differ diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index b9a83d510ef..8cf4eafcae2 100644 Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index 213946eb68b..6817043e1ae 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/mining_contained.dmi b/icons/obj/mining_contained.dmi new file mode 100644 index 00000000000..26531af6000 Binary files /dev/null and b/icons/obj/mining_contained.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index dc1fa69de3e..d33b682de2f 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi index c53e7823cab..77e76430b15 100644 Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ diff --git a/icons/obj/sac.dmi b/icons/obj/sac.dmi new file mode 100644 index 00000000000..7f943f83c47 Binary files /dev/null and b/icons/obj/sac.dmi differ diff --git a/icons/obj/smooth/lattice.dmi b/icons/obj/smooth/lattice.dmi new file mode 100644 index 00000000000..5adab0caf1b Binary files /dev/null and b/icons/obj/smooth/lattice.dmi differ diff --git a/icons/obj/smoothtrack.dmi b/icons/obj/smoothtrack.dmi new file mode 100644 index 00000000000..f238330684a Binary files /dev/null and b/icons/obj/smoothtrack.dmi differ diff --git a/icons/obj/stairs.dmi b/icons/obj/stairs.dmi index d29408d8808..73aedef1472 100644 Binary files a/icons/obj/stairs.dmi and b/icons/obj/stairs.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 6b22cffe5ee..3c10bf00818 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index c2fa9ddbc98..628904b1863 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/turbolift.dmi b/icons/obj/turbolift.dmi new file mode 100644 index 00000000000..cffc8aa140c Binary files /dev/null and b/icons/obj/turbolift.dmi differ diff --git a/icons/obj/turbolift_preview_2x2.dmi b/icons/obj/turbolift_preview_2x2.dmi new file mode 100644 index 00000000000..f0f1ec491e1 Binary files /dev/null and b/icons/obj/turbolift_preview_2x2.dmi differ diff --git a/icons/obj/turbolift_preview_3x3.dmi b/icons/obj/turbolift_preview_3x3.dmi new file mode 100644 index 00000000000..443a6fb1324 Binary files /dev/null and b/icons/obj/turbolift_preview_3x3.dmi differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index e70275591fc..cbb58bb9fb7 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 7f2133ab83c..78b2dfbe5b6 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 38ed502aed7..6c237f33b12 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/icons/turf/cliff.dmi b/icons/turf/cliff.dmi new file mode 100644 index 00000000000..4db912e9455 Binary files /dev/null and b/icons/turf/cliff.dmi differ diff --git a/icons/turf/flooring/asteroid.dmi b/icons/turf/flooring/asteroid.dmi index 293c991c173..438eeb5a18a 100644 Binary files a/icons/turf/flooring/asteroid.dmi and b/icons/turf/flooring/asteroid.dmi differ diff --git a/icons/turf/flooring/decals.dmi b/icons/turf/flooring/decals.dmi index c5b2a54b0b4..d095873334e 100644 Binary files a/icons/turf/flooring/decals.dmi and b/icons/turf/flooring/decals.dmi differ diff --git a/icons/turf/flooring/plating.dmi b/icons/turf/flooring/plating.dmi index ca7394380a1..48820f62c89 100644 Binary files a/icons/turf/flooring/plating.dmi and b/icons/turf/flooring/plating.dmi differ diff --git a/icons/turf/flooring/tiles.dmi b/icons/turf/flooring/tiles.dmi index 7d160b70708..e94c78f6b72 100644 Binary files a/icons/turf/flooring/tiles.dmi and b/icons/turf/flooring/tiles.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index d66ddc0b5cf..3c1a4e37367 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/smooth/ash.dmi b/icons/turf/smooth/ash.dmi new file mode 100644 index 00000000000..718cd120194 Binary files /dev/null and b/icons/turf/smooth/ash.dmi differ diff --git a/icons/turf/smooth/cult_wall.dmi b/icons/turf/smooth/cult_wall.dmi new file mode 100644 index 00000000000..5239f7b1e06 Binary files /dev/null and b/icons/turf/smooth/cult_wall.dmi differ diff --git a/icons/turf/smooth/riveted.dmi b/icons/turf/smooth/riveted.dmi new file mode 100644 index 00000000000..90d1e96297b Binary files /dev/null and b/icons/turf/smooth/riveted.dmi differ diff --git a/icons/turf/smooth/rock_wall.dmi b/icons/turf/smooth/rock_wall.dmi new file mode 100644 index 00000000000..c07657149ac Binary files /dev/null and b/icons/turf/smooth/rock_wall.dmi differ diff --git a/icons/turf/total_floors.dmi b/icons/turf/total_floors.dmi new file mode 100644 index 00000000000..4cf1ecea6ef Binary files /dev/null and b/icons/turf/total_floors.dmi differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi index 24ff726d2f4..1bfa504b035 100644 Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 4ee3988958a..e2cf8f873d1 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1953,6 +1953,32 @@ window "outputwindow" enable-http-images = false max-lines = 0 image = "" + elem "asset_cache_browser" + type = BROWSER + pos = 0,0 + size = 200x200 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + show-history = false + show-url = false + auto-format = true + use-title = false + on-show = "" + on-hide = "" window "rpane" elem "rpane" diff --git a/maps/Aurora-MapDev/aurora-0.dmm b/maps/Aurora-MapDev/aurora-0.dmm new file mode 100644 index 00000000000..d80863955f0 --- /dev/null +++ b/maps/Aurora-MapDev/aurora-0.dmm @@ -0,0 +1,2519 @@ +"aa" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns15,/area/space) +"ab" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns5,/area/space) +"ac" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns9,/area/space) +"ad" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns8,/area/space) +"ae" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns12,/area/space) +"af" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns6,/area/space) +"ag" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns3,/area/space) +"ah" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns7,/area/space) +"ai" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns14,/area/space) +"aj" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns4,/area/space) +"ak" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns11,/area/space) +"al" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns1,/area/space) +"am" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns2,/area/space) +"an" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns13,/area/space) +"ao" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns10,/area/space) +"ap" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns10,/area/space) +"aq" = (/turf/space/transit/east/shuttlespace_ew13,/area/space) +"ar" = (/turf/space/transit/east/shuttlespace_ew14,/area/space) +"as" = (/turf/space/transit/east/shuttlespace_ew15,/area/space) +"at" = (/turf/space/transit/east/shuttlespace_ew1,/area/space) +"au" = (/turf/space/transit/east/shuttlespace_ew2,/area/space) +"av" = (/turf/space/transit/east/shuttlespace_ew3,/area/space) +"aw" = (/turf/space/transit/east/shuttlespace_ew4,/area/space) +"ax" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew5,/area/space) +"ay" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew7,/area/space) +"az" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew6,/area/space) +"aA" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew9,/area/space) +"aB" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew8,/area/space) +"aC" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew11,/area/space) +"aD" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew10,/area/space) +"aE" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew13,/area/space) +"aF" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew12,/area/space) +"aG" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew15,/area/space) +"aH" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew14,/area/space) +"aI" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew2,/area/space) +"aJ" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew1,/area/space) +"aK" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew4,/area/space) +"aL" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew3,/area/space) +"aM" = (/turf/space{icon_state = "black"},/area/space) +"aN" = (/turf/space,/area/space) +"aO" = (/turf/unsimulated/wall/riveted,/area/prison/solitary) +"aP" = (/turf/unsimulated/wall/riveted,/area/space) +"aQ" = (/turf/unsimulated/wall,/area/space) +"aR" = (/obj/structure/window/reinforced,/turf/unsimulated/wall/riveted,/area/space) +"aS" = (/turf/space/transit/north/shuttlespace_ns8,/area/space) +"aT" = (/turf/space/transit/north/shuttlespace_ns4,/area/space) +"aU" = (/turf/space/transit/north/shuttlespace_ns11,/area/space) +"aV" = (/turf/space/transit/north/shuttlespace_ns7,/area/space) +"aW" = (/turf/space/transit/north/shuttlespace_ns2,/area/space) +"aX" = (/turf/space/transit/north/shuttlespace_ns5,/area/space) +"aY" = (/turf/space/transit/north/shuttlespace_ns6,/area/space) +"aZ" = (/turf/space/transit/north/shuttlespace_ns14,/area/space) +"ba" = (/turf/space/transit/north/shuttlespace_ns3,/area/space) +"bb" = (/turf/space/transit/north/shuttlespace_ns13,/area/space) +"bc" = (/turf/space/transit/north/shuttlespace_ns15,/area/space) +"bd" = (/turf/space/transit/north/shuttlespace_ns10,/area/space) +"be" = (/turf/space/transit/north/shuttlespace_ns12,/area/space) +"bf" = (/turf/space/transit/north/shuttlespace_ns1,/area/space) +"bg" = (/turf/space/transit/north/shuttlespace_ns9,/area/space) +"bh" = (/turf/space/transit/east/shuttlespace_ew5,/area/space) +"bi" = (/turf/space/transit/east/shuttlespace_ew6,/area/space) +"bj" = (/turf/space/transit/east/shuttlespace_ew7,/area/space) +"bk" = (/turf/space/transit/east/shuttlespace_ew8,/area/space) +"bl" = (/turf/space/transit/east/shuttlespace_ew10,/area/space) +"bm" = (/turf/space/transit/east/shuttlespace_ew11,/area/space) +"bn" = (/turf/space/transit/east/shuttlespace_ew12,/area/space) +"bo" = (/turf/space/transit/east/shuttlespace_ew9,/area/space) +"bp" = (/obj/structure/bed,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"bq" = (/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"br" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"bs" = (/obj/structure/bed,/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/prison/solitary) +"bt" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"bu" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall/riveted,/area/space) +"bv" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall,/area/space) +"bw" = (/turf/simulated/floor/holofloor/desert,/area/space) +"bx" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/desert,/area/space) +"by" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall/riveted,/area/space) +"bz" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass,/area/space) +"bA" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass,/area/space) +"bB" = (/obj/structure/table/rack/holorack,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/head/hairflower,/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"bC" = (/obj/effect/landmark/costume,/obj/structure/table/rack/holorack,/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"bD" = (/turf/simulated/floor/holofloor/tiled,/area/space) +"bE" = (/obj/structure/window/reinforced/holowindow{dir = 4},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/holofloor/tiled,/area/space) +"bF" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space) +"bG" = (/turf/simulated/floor/holofloor/reinforced,/area/space) +"bH" = (/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"bI" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled,/area/space) +"bJ" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space) +"bK" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space) +"bL" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space) +"bM" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space) +"bN" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall/riveted,/area/space) +"bO" = (/obj/effect/landmark{name = "prisonwarp"},/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"bP" = (/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) +"bQ" = (/turf/unsimulated/floor{icon_state = "platingdmg3"},/area/prison/solitary) +"bR" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/desert,/area/space) +"bS" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass,/area/space) +"bT" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass,/area/space) +"bU" = (/obj/machinery/door/window/holowindoor,/turf/simulated/floor/holofloor/tiled,/area/space) +"bV" = (/turf/simulated/floor/holofloor/wood,/area/space) +"bW" = (/obj/effect/landmark{name = "Holocarp Spawn"},/turf/simulated/floor/holofloor/reinforced,/area/space) +"bX" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/holofloor/tiled,/area/space) +"bY" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/holofloor/tiled,/area/space) +"bZ" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/holofloor/grass,/area/space) +"ca" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/space) +"cb" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/space) +"cc" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{icon_state = "spline_fancy_corner";dir = 8},/turf/simulated/floor/holofloor/grass,/area/space) +"cd" = (/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space) +"ce" = (/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/space) +"cf" = (/obj/structure/window/reinforced/holowindow{dir = 1},/obj/structure/window/reinforced/holowindow{dir = 8},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space) +"cg" = (/obj/structure/window/reinforced/holowindow{dir = 1},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space) +"ch" = (/obj/machinery/door/window/holowindoor{dir = 1;name = "Jury Box"},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space) +"ci" = (/obj/machinery/door/window/holowindoor{name = "Red Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"cj" = (/obj/structure/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary) +"ck" = (/obj/structure/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) +"cl" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 6},/turf/simulated/floor/holofloor/grass,/area/space) +"cm" = (/obj/effect/decal/cleanable/dirt,/obj/structure/holostool,/turf/simulated/floor/holofloor/desert,/area/space) +"cn" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/desert,/area/space) +"co" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 8},/turf/simulated/floor/holofloor/grass,/area/space) +"cp" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space) +"cq" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space) +"cr" = (/obj/structure/window/reinforced/holowindow,/obj/machinery/door/window/holowindoor{dir = 1;name = "Court Reporter's Box"},/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/space) +"cs" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/wood,/area/space) +"ct" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/turf/simulated/floor/holofloor/wood,/area/space) +"cu" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/wood,/area/space) +"cv" = (/obj/structure/window/reinforced/holowindow,/obj/machinery/door/window/holowindoor{base_state = "right";dir = 1;icon_state = "right";name = "Witness Box"},/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/space) +"cw" = (/obj/structure/window/reinforced/holowindow{dir = 8},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space) +"cx" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space) +"cy" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet/corners{icon_state = "carpet_corners";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space) +"cz" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space) +"cA" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space) +"cB" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space) +"cC" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space) +"cD" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space) +"cE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space) +"cF" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space) +"cG" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space) +"cH" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space) +"cI" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/wall/riveted,/area/prison/solitary) +"cJ" = (/turf/unsimulated/floor{icon_state = "platingdmg1"},/area/prison/solitary) +"cK" = (/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/prison/solitary) +"cL" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/desert,/area/space) +"cM" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 8},/turf/simulated/floor/holofloor/grass,/area/space) +"cN" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/turf/simulated/floor/holofloor/carpet,/area/space) +"cO" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space) +"cP" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space) +"cQ" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space) +"cR" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space) +"cS" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space) +"cT" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space) +"cU" = (/turf/space,/area/shuttle/escape/transit) +"cV" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space) +"cW" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/carpet,/area/space) +"cX" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space) +"cY" = (/obj/structure/table/woodentable/holotable,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space) +"cZ" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/carpet,/area/space) +"da" = (/turf/simulated/floor/holofloor/carpet,/area/space) +"db" = (/obj/structure/table/woodentable/holotable,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space) +"dc" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/holofloor/tiled,/area/space) +"dd" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/holofloor/tiled,/area/space) +"de" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space) +"df" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space) +"dg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space,/area/space) +"dh" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 1},/turf/simulated/floor/holofloor/grass,/area/space) +"di" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 5},/turf/simulated/floor/holofloor/grass,/area/space) +"dj" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 1},/turf/simulated/floor/holofloor/grass,/area/space) +"dk" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space) +"dl" = (/obj/structure/bed/chair/holochair{dir = 1},/turf/simulated/floor/holofloor/carpet,/area/space) +"dm" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space) +"dn" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space) +"do" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{icon_state = "spline_fancy_corner";dir = 1},/turf/simulated/floor/holofloor/grass,/area/space) +"dp" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{icon_state = "spline_fancy_corner";dir = 4},/turf/simulated/floor/holofloor/grass,/area/space) +"dq" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space) +"dr" = (/obj/machinery/door/window/holowindoor{base_state = "right";icon_state = "right"},/turf/simulated/floor/holofloor/tiled,/area/space) +"ds" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space) +"dt" = (/obj/machinery/door/window/holowindoor{base_state = "right";icon_state = "right";name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"du" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew3,/area/space) +"dv" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew2,/area/space) +"dw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew5,/area/space) +"dx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew4,/area/space) +"dy" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew7,/area/space) +"dz" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew6,/area/space) +"dA" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew9,/area/space) +"dB" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew8,/area/space) +"dC" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew14,/area/space) +"dD" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew10,/area/space) +"dE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew15,/area/space) +"dF" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/turf/simulated/floor/holofloor/carpet,/area/space) +"dG" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/space) +"dH" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/turf/simulated/floor/holofloor/carpet,/area/space) +"dI" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/turf/simulated/floor/holofloor/carpet,/area/space) +"dJ" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/turf/simulated/floor/holofloor/carpet,/area/space) +"dK" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space) +"dL" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew11,/area/space) +"dM" = (/turf/space/transit/east/shuttlespace_ew7,/area/shuttle/arrival/transit) +"dN" = (/turf/space/transit/east/shuttlespace_ew8,/area/shuttle/arrival/transit) +"dO" = (/turf/space/transit/east/shuttlespace_ew9,/area/shuttle/arrival/transit) +"dP" = (/turf/space/transit/east/shuttlespace_ew10,/area/shuttle/arrival/transit) +"dQ" = (/turf/space/transit/east/shuttlespace_ew11,/area/shuttle/arrival/transit) +"dR" = (/turf/space/transit/east/shuttlespace_ew12,/area/shuttle/arrival/transit) +"dS" = (/turf/space/transit/east/shuttlespace_ew13,/area/shuttle/arrival/transit) +"dT" = (/turf/space/transit/east/shuttlespace_ew14,/area/shuttle/arrival/transit) +"dU" = (/turf/space/transit/east/shuttlespace_ew15,/area/shuttle/arrival/transit) +"dV" = (/turf/space/transit/east/shuttlespace_ew1,/area/shuttle/arrival/transit) +"dW" = (/turf/space/transit/east/shuttlespace_ew2,/area/shuttle/arrival/transit) +"dX" = (/turf/space/transit/east/shuttlespace_ew3,/area/shuttle/arrival/transit) +"dY" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/holofloor/tiled,/area/space) +"dZ" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space) +"ea" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/turf/simulated/floor/holofloor/carpet,/area/space) +"eb" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/space) +"ec" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/turf/simulated/floor/holofloor/carpet,/area/space) +"ed" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/holofloor/tiled,/area/space) +"ee" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space) +"ef" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space) +"eg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew1,/area/space) +"eh" = (/turf/space/transit/east/shuttlespace_ew6,/area/shuttle/arrival/transit) +"ei" = (/turf/unsimulated/wall{icon_state = "iron7"},/area/space) +"ej" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall/riveted,/area/space) +"ek" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall/riveted,/area/space) +"el" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space) +"em" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space) +"en" = (/turf/space/transit/east/shuttlespace_ew4,/area/shuttle/arrival/transit) +"eo" = (/turf/space/transit/east/shuttlespace_ew5,/area/shuttle/arrival/transit) +"ep" = (/turf/simulated/floor/holofloor/space,/area/space) +"eq" = (/turf/simulated/floor/holofloor/snow,/area/space) +"er" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/holofloor/wood,/area/space) +"es" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space) +"et" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space) +"eu" = (/obj/structure/holohoop,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space) +"ev" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space) +"ew" = (/turf/simulated/floor/beach/sand{icon_state = "desert1"},/area/space) +"ex" = (/turf/simulated/floor/beach/sand{icon_state = "desert"},/area/space) +"ey" = (/turf/simulated/floor/beach/sand{icon_state = "desert4"},/area/space) +"ez" = (/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space) +"eA" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space) +"eB" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space) +"eC" = (/obj/structure/table/holotable,/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space) +"eD" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"eE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space) +"eF" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space) +"eG" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space) +"eH" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space) +"eI" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew13,/area/space) +"eJ" = (/obj/effect/landmark{name = "Holocarp Spawn Random"},/turf/simulated/floor/holofloor/space,/area/space) +"eK" = (/obj/structure/flora/grass/both,/turf/simulated/floor/holofloor/snow,/area/space) +"eL" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/space) +"eM" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space) +"eN" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space) +"eO" = (/turf/simulated/floor/beach/sand{icon_state = "desert3"},/area/space) +"eP" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/beach/sand{icon_state = "desert"},/area/space) +"eQ" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"eR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space) +"eS" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/holofloor/snow,/area/space) +"eT" = (/obj/effect/overlay/palmtree_l,/obj/effect/overlay/coconut,/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space) +"eU" = (/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space) +"eV" = (/obj/machinery/door/window/holowindoor{base_state = "right";dir = 2;icon_state = "right";name = "Red Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"eW" = (/obj/structure/window/reinforced/holowindow,/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"eX" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space) +"eY" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/holofloor/snow,/area/space) +"eZ" = (/turf/simulated/floor/holofloor/lino,/area/space) +"fa" = (/obj/item/weapon/beach_ball,/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space) +"fb" = (/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"fc" = (/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"fd" = (/obj/structure/flora/grass/green,/turf/simulated/floor/holofloor/snow,/area/space) +"fe" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space) +"ff" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/turf/simulated/floor/holofloor/carpet,/area/space) +"fg" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space) +"fh" = (/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/holofloor/tiled,/area/space) +"fi" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space) +"fj" = (/obj/item/weapon/beach_ball/holoball,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space) +"fk" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space) +"fl" = (/obj/item/weapon/inflatable_duck,/turf/simulated/floor/beach/sand{icon_state = "desert"},/area/space) +"fm" = (/turf/simulated/floor/beach/sand{icon_state = "beachcorner";dir = 2},/area/space) +"fn" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space) +"fo" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space) +"fp" = (/turf/simulated/floor/beach/sand{icon_state = "beach"},/area/space) +"fq" = (/turf/simulated/floor/beach/sand{icon_state = "beachcorner";dir = 1},/area/space) +"fr" = (/turf/simulated/floor/beach/sand{icon_state = "beach";dir = 6},/area/space) +"fs" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space) +"ft" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space) +"fu" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space) +"fv" = (/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/holofloor/tiled,/area/space) +"fw" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space) +"fx" = (/turf/simulated/floor/beach/sand{icon_state = "seashallow";dir = 2},/area/space) +"fy" = (/turf/simulated/floor/beach/sand{icon_state = "beach";dir = 10},/area/space) +"fz" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space) +"fA" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space) +"fB" = (/obj/structure/flora/grass/brown,/turf/simulated/floor/holofloor/snow,/area/space) +"fC" = (/obj/structure/window/reinforced/holowindow{dir = 1},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"fD" = (/obj/machinery/door/window/holowindoor{dir = 1;name = "Green Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"fE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space) +"fF" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/holofloor/tiled,/area/space) +"fG" = (/obj/structure/holohoop{dir = 1},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space) +"fH" = (/obj/structure/table/holotable,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/holofloor/tiled,/area/space) +"fI" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space) +"fJ" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space) +"fK" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen";item_state = "boxinggreen"},/turf/simulated/floor/holofloor/tiled/dark,/area/space) +"fL" = (/turf/unsimulated/wall{icon_state = "iron5"},/area/space) +"fM" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall/riveted,/area/space) +"fN" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space) +"fO" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space) +"fP" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space) +"fQ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space) +"fR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space) +"fS" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space) +"fT" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space) +"fU" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space) +"fV" = (/turf/space/transit/north/shuttlespace_ns14,/area/shuttle/escape/transit) +"fW" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape/transit) +"fX" = (/turf/space/transit/north/shuttlespace_ns11,/area/shuttle/escape/transit) +"fY" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape/transit) +"fZ" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape/transit) +"ga" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/syndicate_mothership) +"gb" = (/turf/unsimulated/wall/riveted,/area/syndicate_mothership) +"gc" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership) +"gd" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership) +"ge" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership) +"gf" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership) +"gg" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership) +"gh" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership) +"gi" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate_elite/mothership) +"gj" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership) +"gk" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space) +"gl" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space) +"gm" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space) +"gn" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space) +"go" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space) +"gp" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space) +"gq" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space) +"gr" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space) +"gs" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space) +"gt" = (/obj/effect/landmark{name = "Syndicate-Commando-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership) +"gu" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1213;listening = 1;name = "Syndicate Ops Intercom";pixel_y = 0;subspace_transmission = 1;syndie = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "circuit"},/area/syndicate_mothership) +"gv" = (/mob/living/silicon/decoy{icon_state = "ai-malf";name = "GLaDOS"},/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/syndicate_mothership/control) +"gw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space) +"gx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space) +"gy" = (/turf/space/transit/north/shuttlespace_ns6,/area/syndicate_station/transit) +"gz" = (/turf/space/transit/north/shuttlespace_ns8,/area/syndicate_station/transit) +"gA" = (/turf/space/transit/north/shuttlespace_ns3,/area/syndicate_station/transit) +"gB" = (/turf/space/transit/north/shuttlespace_ns5,/area/syndicate_station/transit) +"gC" = (/turf/space/transit/north/shuttlespace_ns9,/area/syndicate_station/transit) +"gD" = (/turf/space/transit/north/shuttlespace_ns2,/area/syndicate_station/transit) +"gE" = (/turf/space/transit/north/shuttlespace_ns13,/area/syndicate_station/transit) +"gF" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space) +"gG" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership) +"gH" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership) +"gI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership) +"gJ" = (/turf/space/transit/north/shuttlespace_ns11,/area/syndicate_station/transit) +"gK" = (/turf/space/transit/north/shuttlespace_ns7,/area/syndicate_station/transit) +"gL" = (/turf/space/transit/north/shuttlespace_ns14,/area/syndicate_station/transit) +"gM" = (/turf/space/transit/north/shuttlespace_ns4,/area/syndicate_station/transit) +"gN" = (/turf/space/transit/north/shuttlespace_ns10,/area/syndicate_station/transit) +"gO" = (/turf/space/transit/north/shuttlespace_ns1,/area/syndicate_station/transit) +"gP" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space) +"gQ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space) +"gR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space) +"gS" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space) +"gT" = (/turf/space,/area/syndicate_mothership/elite_squad) +"gU" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership/elite_squad) +"gV" = (/obj/machinery/computer/pod{id = "syndicate_elite";name = "Hull Door Control"},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad) +"gW" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1213;listening = 0;name = "Syndicate Ops Intercom";pixel_y = 28;subspace_transmission = 1;syndie = 1},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad) +"gX" = (/obj/effect/landmark{name = "Syndicate-Commando"},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad) +"gY" = (/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad) +"gZ" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad) +"ha" = (/obj/mecha/combat/marauder/mauler,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership) +"hb" = (/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership) +"hc" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns12,/area/space) +"hd" = (/turf/space/transit/north/shuttlespace_ns12,/area/syndicate_station/transit) +"he" = (/turf/space/transit/north/shuttlespace_ns15,/area/syndicate_station/transit) +"hf" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space) +"hg" = (/turf/space/transit/north/shuttlespace_ns3,/area/skipjack_station/transit) +"hh" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space,/area/space) +"hi" = (/turf/space,/area/skipjack_station/transit) +"hj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership/elite_squad) +"hk" = (/turf/space/transit/north/shuttlespace_ns2,/area/skipjack_station/transit) +"hl" = (/turf/space/transit/north/shuttlespace_ns6,/area/skipjack_station/transit) +"hm" = (/turf/space/transit/north/shuttlespace_ns11,/area/skipjack_station/transit) +"hn" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock";req_access = list(150)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "syndicate_elite";name = "Side Hull Door";opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership) +"ho" = (/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership/elite_squad) +"hp" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership/elite_squad) +"hq" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space) +"hr" = (/turf/space/transit/north/shuttlespace_ns1,/area/skipjack_station/transit) +"hs" = (/turf/space/transit/north/shuttlespace_ns5,/area/skipjack_station/transit) +"ht" = (/turf/space/transit/north/shuttlespace_ns10,/area/skipjack_station/transit) +"hu" = (/obj/machinery/door/airlock/glass_security{name = "Airlock";req_access = list(150)},/obj/machinery/door/blast/regular{id = "syndicate_elite_mech_room";name = "Mech Room Door"},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad) +"hv" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space) +"hw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space) +"hx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space) +"hy" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space) +"hz" = (/turf/space/transit/north/shuttlespace_ns15,/area/skipjack_station/transit) +"hA" = (/turf/space/transit/north/shuttlespace_ns4,/area/skipjack_station/transit) +"hB" = (/turf/space/transit/north/shuttlespace_ns9,/area/skipjack_station/transit) +"hC" = (/obj/machinery/computer/pod{id = "syndicate_elite";name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership) +"hD" = (/obj/machinery/computer/syndicate_elite_shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership) +"hE" = (/turf/simulated/mineral/random,/area/space) +"hF" = (/turf/space/transit/north/shuttlespace_ns5,/area/shuttle/escape_pod2/transit) +"hG" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod2/transit) +"hH" = (/turf/space/transit/north/shuttlespace_ns2,/area/shuttle/escape_pod2/transit) +"hI" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space) +"hJ" = (/turf/space/transit/north/shuttlespace_ns8,/area/skipjack_station/transit) +"hK" = (/turf/space/transit/north/shuttlespace_ns14,/area/skipjack_station/transit) +"hL" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership) +"hM" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock";req_access = list(150)},/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "syndicate_elite";name = "Front Hull Door";opacity = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate_elite/mothership) +"hN" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3 (NORTHWEST)";icon_state = "diagonalWall3";dir = 9},/area/shuttle/syndicate_elite/mothership) +"hO" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape_pod2/transit) +"hP" = (/turf/space/transit/north/shuttlespace_ns11,/area/shuttle/escape_pod2/transit) +"hQ" = (/turf/space/transit/north/shuttlespace_ns1,/area/shuttle/escape_pod2/transit) +"hR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space) +"hS" = (/turf/space/transit/north/shuttlespace_ns7,/area/skipjack_station/transit) +"hT" = (/turf/space/transit/north/shuttlespace_ns13,/area/skipjack_station/transit) +"hU" = (/turf/space,/area/syndicate_mothership) +"hV" = (/turf/space,/area/shuttle/syndicate_elite/mothership) +"hW" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape_pod2/transit) +"hX" = (/turf/space/transit/north/shuttlespace_ns10,/area/shuttle/escape_pod2/transit) +"hY" = (/turf/space/transit/north/shuttlespace_ns15,/area/shuttle/escape_pod2/transit) +"hZ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space) +"ia" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space) +"ib" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space) +"ic" = (/turf/space/transit/north/shuttlespace_ns12,/area/skipjack_station/transit) +"id" = (/turf/space/transit/north/shuttlespace_ns9,/area/shuttle/escape_pod2/transit) +"ie" = (/turf/space/transit/north/shuttlespace_ns14,/area/shuttle/escape_pod2/transit) +"if" = (/obj/structure/lattice,/turf/space,/area/space) +"ig" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/space) +"ih" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 4},/area/space) +"ii" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c"},/area/space) +"ij" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/space) +"ik" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space) +"il" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space) +"im" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space) +"in" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space) +"io" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor,/area/space) +"ip" = (/obj/structure/grille,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space) +"iq" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space) +"ir" = (/obj/item/stack/material/cyborg/steel,/turf/space,/area/space) +"is" = (/obj/item/weapon/material/shard/shrapnel,/turf/space,/area/space) +"it" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space) +"iu" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/space) +"iv" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space) +"iw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space) +"ix" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space) +"iy" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/space) +"iz" = (/obj/item/stack/rods,/turf/space,/area/space) +"iA" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape_pod1/transit) +"iB" = (/turf/space/transit/north/shuttlespace_ns6,/area/shuttle/escape_pod1/transit) +"iC" = (/turf/space/transit/north/shuttlespace_ns1,/area/shuttle/escape_pod1/transit) +"iD" = (/turf/space/transit/north/shuttlespace_ns11,/area/shuttle/escape_pod3/transit) +"iE" = (/turf/space/transit/north/shuttlespace_ns8,/area/shuttle/escape_pod3/transit) +"iF" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape_pod3/transit) +"iG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/space) +"iH" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/corpse/engineer/rotten,/turf/simulated/shuttle/floor,/area/space) +"iI" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape_pod1/transit) +"iJ" = (/turf/space/transit/north/shuttlespace_ns5,/area/shuttle/escape_pod1/transit) +"iK" = (/turf/space/transit/north/shuttlespace_ns15,/area/shuttle/escape_pod1/transit) +"iL" = (/turf/space/transit/north/shuttlespace_ns10,/area/shuttle/escape_pod3/transit) +"iM" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape_pod3/transit) +"iN" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape_pod3/transit) +"iO" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor,/area/space) +"iP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/space) +"iQ" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space) +"iR" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space) +"iS" = (/turf/space,/area/shuttle/escape_pod2/centcom) +"iT" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape_pod1/transit) +"iU" = (/turf/space/transit/north/shuttlespace_ns13,/area/shuttle/escape_pod1/transit) +"iV" = (/turf/space/transit/north/shuttlespace_ns2,/area/shuttle/escape_pod1/transit) +"iW" = (/turf/space/transit/north/shuttlespace_ns13,/area/shuttle/escape_pod3/transit) +"iX" = (/turf/space/transit/north/shuttlespace_ns6,/area/shuttle/escape_pod3/transit) +"iY" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/space) +"iZ" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/space) +"ja" = (/turf/simulated/mineral/random,/area/shuttle/escape_pod2/centcom) +"jb" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod1/transit) +"jc" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod3/transit) +"jd" = (/turf/space/transit/north/shuttlespace_ns5,/area/shuttle/escape_pod3/transit) +"je" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space) +"jf" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'ESTIMATED PICKUP TIME: 2-4 DAYS. CONSERVE RESOURCES.'.";name = "\improper NSS AURORA II ESCAPE POD ZONE"},/turf/simulated/wall/r_wall,/area/space) +"jg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space) +"jh" = (/obj/structure/bed/chair{dir = 1},/turf/space,/area/space) +"ji" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space) +"jj" = (/turf/space,/area/shuttle/escape_pod3/centcom) +"jk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 8},/area/space) +"jl" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 8},/area/space) +"jm" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space) +"jn" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/space,/area/space) +"jo" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/space) +"jp" = (/obj/structure/window/shuttle,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space) +"jq" = (/obj/structure/bed/chair{dir = 8},/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor,/area/space) +"jr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse,/turf/simulated/shuttle/floor,/area/space) +"js" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = null;locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/space) +"jt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space) +"ju" = (/turf/space,/area/shuttle/escape_pod1/centcom) +"jv" = (/turf/space,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/space) +"jw" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 8},/area/space) +"jx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space) +"jy" = (/obj/structure/grille,/obj/structure/window/shuttle,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space) +"jz" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/space) +"jA" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jB" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jD" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jE" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jF" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jG" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jI" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "ninjastart"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jL" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jM" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jN" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jO" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jP" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jR" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jS" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jT" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"}) +"jU" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space) +"jV" = (/turf/simulated/mineral,/area/space) +"jW" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/space) +"jX" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) +"jY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) +"jZ" = (/obj/structure/lattice,/obj/structure/grille/broken,/turf/space,/area/space) +"ka" = (/turf/unsimulated/wall,/area/syndicate_mothership) +"kb" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4;pixel_y = 8},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"kc" = (/obj/structure/table/standard,/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"kd" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"ke" = (/turf/unsimulated/wall/fakeglass{dir = 1;icon_state = "fakewindows"},/area/syndicate_mothership) +"kf" = (/obj/structure/bed,/obj/item/weapon/bedsheet/hos,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"kg" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"kh" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"ki" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2";dir = 1},/area/syndicate_mothership) +"kj" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership) +"kk" = (/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"kl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"km" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"kn" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"ko" = (/obj/machinery/door/airlock/centcom{name = "Barracks";opacity = 1;req_access = list(150)},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"kp" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/syndicate_station/start) +"kq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "syndieshutters";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"kr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "syndieshutters";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"ks" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/syndicate_station/start) +"kt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "syndieshutters";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"ku" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"kv" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kw" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kx" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"ky" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp";prices = list()},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kz" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full{pixel_x = 2;pixel_y = 6},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1;pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kB" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kC" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kD" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start) +"kE" = (/obj/machinery/recharger,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kF" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kG" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kH" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kI" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters";name = "remote shutter control";req_access = list(150)},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kJ" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kK" = (/obj/machinery/door/airlock/centcom{name = "Kitchen";opacity = 1;req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kL" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kM" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1;pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kN" = (/obj/machinery/microwave{pixel_x = -1;pixel_y = 2},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kO" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kP" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kQ" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kR" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen{pixel_y = 4},/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kS" = (/obj/item/weapon/folder{pixel_y = 2},/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kT" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"kU" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"kV" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"kW" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"kX" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"kY" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 2;pixel_y = 3},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"kZ" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"la" = (/obj/structure/computerframe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lb" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"lc" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks";prices = list()},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"ld" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"le" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"lf" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3;pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{pixel_x = -1;pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) +"lg" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"lh" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"li" = (/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100;maxcharge = 15000},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lj" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_y = -32;subspace_transmission = 1;syndie = 1},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lk" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"ll" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine";prices = list();products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership) +"lm" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"ln" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"lo" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_station/start) +"lp" = (/obj/machinery/door/window/northright{name = "Flight Deck";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lq" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/syndicate_station/start) +"lr" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"ls" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"lt" = (/turf/unsimulated/floor{icon_state = "bar";dir = 2},/area/syndicate_mothership) +"lu" = (/obj/structure/urinal{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership) +"lv" = (/obj/machinery/shower{pixel_y = 32},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership) +"lw" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership) +"lx" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"ly" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/merc{pixel_x = 2;pixel_y = 2},/obj/item/clothing/suit/storage/vest/merc{pixel_x = -2;pixel_y = -2},/obj/item/clothing/head/helmet/merc,/obj/item/clothing/head/helmet/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"lz" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32;pixel_y = 0;req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lA" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lB" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lC" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lD" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/military,/obj/item/weapon/storage/belt/military,/obj/item/ammo_magazine/mc9mm,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"lF" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership) +"lG" = (/obj/machinery/door/airlock/centcom{name = "Bathroom";opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership) +"lH" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership) +"lI" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lJ" = (/obj/structure/bed/chair{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lK" = (/obj/structure/closet,/obj/item/weapon/pickaxe/diamonddrill,/obj/item/weapon/pickaxe/diamonddrill,/obj/item/weapon/pickaxe/diamonddrill,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"lM" = (/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership) +"lN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"lO" = (/obj/machinery/door/airlock/centcom{name = "Suit Storage";opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"lP" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lQ" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lR" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) +"lS" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"lT" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"lU" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/rifle/sts35,/obj/item/weapon/gun/projectile/automatic/rifle/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"lV" = (/obj/structure/sign/poster{poster_type = "/datum/poster/bay_50";pixel_x = -32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lW" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"lX" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space) +"lY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1331;id_tag = "merc_base";pixel_x = -25;pixel_y = -5},/turf/unsimulated/floor{icon_state = "bar";dir = 2},/area/syndicate_mothership) +"lZ" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"ma" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mb" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mc" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) +"md" = (/obj/machinery/flasher{id = "syndieflash";pixel_x = 0;pixel_y = 28},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) +"me" = (/obj/item/device/radio/electropack,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) +"mf" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 0;pixel_y = -32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mg" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mh" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/airlock_sensor{frequency = 1331;id_tag = "merc_shuttle_sensor";pixel_x = 8;pixel_y = 25},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mi" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1331;id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mj" = (/obj/machinery/door/airlock/external{density = 1;frequency = 1331;id_tag = "merc_shuttle_outer";name = "Ship External Access";req_access = list(150)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "smindicate";name = "Outer Airlock";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"mk" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1331;id_tag = "merc_shuttle_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331;id_tag = "merc_shuttle";pixel_x = -8;pixel_y = 25;req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"ml" = (/obj/machinery/door/airlock/external{frequency = 1331;id_tag = "merc_base_hatch";req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mm" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mn" = (/obj/machinery/door/airlock/vault{name = "Armory";req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mo" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mp" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_station/start) +"mr" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) +"ms" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) +"mt" = (/obj/machinery/door/window{dir = 2;name = "Seating";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mu" = (/obj/structure/table/standard,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4;name = "Blast Door Control";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mv" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mw" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1331;id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mx" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"my" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mz" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mB" = (/obj/machinery/door/window{dir = 1;name = "Cell";req_access = list(150)},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = -32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mC" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mD" = (/obj/machinery/vending/assist{contraband = null;name = "AntagCorpVend";products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"mF" = (/obj/machinery/door/airlock/external{frequency = 1331;id_tag = "merc_shuttle_inner";name = "Ship External Access";req_access = list(0)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space) +"mH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership) +"mI" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4;pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/smokebombs,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mJ" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mK" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mL" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit/improved,/obj/item/device/suit_cooling_unit/improved,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mM" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine";prices = list();products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mN" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash";name = "Flasher";pixel_x = 27;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mO" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4;start_pressure = 740.5},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mP" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mQ" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1331;master_tag = "merc_shuttle";name = "interior access button";pixel_x = 25;pixel_y = 25;req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mR" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mS" = (/obj/machinery/door/airlock/centcom{name = "Hardsuit Storage";opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mT" = (/obj/item/weapon/material/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3;pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3;pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3;pixel_y = 9},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/table/glass,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mU" = (/obj/machinery/door/window{dir = 4;name = "Brig";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mV" = (/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Preparation";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mW" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mX" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mY" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"mZ" = (/obj/machinery/door/window{base_state = "right";dir = 4;icon_state = "right";name = "Brig";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"na" = (/obj/machinery/door/window{base_state = "left";dir = 8;icon_state = "left";name = "Preparation";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nb" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1;pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nc" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nd" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"ne" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nf" = (/obj/structure/table/standard,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"ng" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32;req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4;pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4;pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nh" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = -32;subspace_transmission = 1;syndie = 1},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"ni" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nj" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nk" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nl" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8;pixel_y = 4},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 4},/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nm" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8;pixel_y = 4},/obj/item/clothing/glasses/night,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nn" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "syndieshutters_infirmary";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"no" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = -32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"np" = (/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "syndieshutters_workshop";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"nr" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"ns" = (/obj/machinery/bodyscanner{dir = 8;icon_state = "body_scanner_0";tag = "icon-body_scanner_0 (EAST)"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "syndieshutters_infirmary";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"nu" = (/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nv" = (/obj/machinery/door/window{dir = 4;name = "Infirmary";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nw" = (/obj/machinery/door/window/westright{name = "Tool Storage";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nx" = (/obj/item/weapon/stool/padded,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"ny" = (/obj/effect/spawner/newbomb/timer/syndicate,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "syndieshutters_workshop";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"nA" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "syndieshutters_infirmary";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"nB" = (/obj/machinery/door/window{base_state = "right";dir = 4;icon_state = "right";name = "Infirmary";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nC" = (/obj/machinery/door/window{dir = 8;name = "Tool Storage";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nD" = (/obj/item/weapon/aicard,/obj/effect/spawner/newbomb/timer/syndicate,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "syndieshutters_workshop";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"nF" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary";name = "remote shutter control";pixel_x = -25},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nG" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 32;subspace_transmission = 1;syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nH" = (/obj/machinery/door/window{dir = 1;name = "Secure Storage";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nI" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nK" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_telebay";name = "remote shutter control";pixel_x = 0;pixel_y = -25;req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nL" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_workshop";name = "remote shutter control";pixel_x = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nN" = (/obj/machinery/door/window{dir = 1;name = "Surgery";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nO" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nP" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nQ" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nR" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nS" = (/obj/structure/sign/securearea{name = "\improper CAUTION";pixel_x = 32},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nT" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nU" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay";name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"nV" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nW" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/surgicaldrill,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32;pixel_y = 0;req_access = list(150)},/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"nX" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nY" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"nZ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"oa" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"ob" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"oc" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"od" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"oe" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"of" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"og" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"oh" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_station/start) +"oi" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_station/start) +"oj" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_station/start) +"ok" = (/turf/unsimulated/wall/riveted,/area/centcom) +"ol" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom) +"om" = (/turf/unsimulated/wall/riveted,/area/centcom/living) +"on" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 1},/area/centcom) +"oo" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 1},/area/centcom/living) +"op" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 9},/area/centcom/living) +"oq" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 5},/area/centcom/living) +"or" = (/turf/unsimulated/floor{name = "plating"},/area/centcom) +"os" = (/turf/unsimulated/floor,/area/centcom/living) +"ot" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (NORTHWEST)";icon_state = "wall3";dir = 9},/area/shuttle/administration/centcom) +"ou" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom) +"ov" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3 (SOUTHEAST)";icon_state = "diagonalWall3";dir = 6},/area/shuttle/administration/centcom) +"ow" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom) +"ox" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oy" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oz" = (/obj/machinery/computer/shuttle_control{req_access = list(101);shuttle_tag = "Administration"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oA" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oB" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oC" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 10},/area/centcom/living) +"oD" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 6},/area/centcom/living) +"oE" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oF" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oG" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oH" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oI" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oJ" = (/turf/unsimulated/floor{icon_state = "warnplate"},/area/centcom/living) +"oK" = (/obj/machinery/turretid{pixel_x = 28;pixel_y = -28;req_access = list(101)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oL" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "administration_shuttle";pixel_x = 0;pixel_y = -25;req_one_access = list(13);tag_door = "administration_shuttle_hatch"},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oM" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oN" = (/obj/machinery/door/airlock/centcom{icon_state = "door_locked";locked = 1;name = "To: Administration Level"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living) +"oO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oP" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oQ" = (/obj/machinery/computer/security,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oR" = (/obj/structure/AIcore/deactivated,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oS" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oT" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"oU" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"oV" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living) +"oW" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/living) +"oX" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/living) +"oY" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living) +"oZ" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle Cockpit"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"pa" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living) +"pb" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/living) +"pc" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/living) +"pd" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"pe" = (/obj/machinery/mech_recharger,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom) +"pf" = (/obj/mecha/combat/marauder,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom) +"pg" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"ph" = (/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/living) +"pi" = (/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/living) +"pj" = (/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/living) +"pk" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space) +"pl" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/rifle/pulse,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom) +"pm" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom) +"pn" = (/obj/structure/closet/secure_closet/guncabinet{name = "Heavy Asset Protection";req_access = list(103)},/obj/item/rig_module/mounted,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/shoes/magboots,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/rig_module/mounted/plasmacutter,/obj/item/weapon/rig/ert/assetprotection,/obj/item/device/radio/headset/ert,/obj/item/clothing/under/syndicate/combat,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom) +"po" = (/obj/machinery/door/airlock/centcom{name = "To: NMSS Odin Hab Complex"},/turf/unsimulated/floor,/area/centcom/living) +"pp" = (/obj/machinery/door/airlock/centcom{name = "To: Departures Deck"},/turf/unsimulated/floor,/area/centcom/living) +"pq" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/rifle/pulse,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom) +"pr" = (/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/living) +"ps" = (/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/living) +"pt" = (/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/living) +"pu" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2;pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"pv" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "heavyass";locked = 1;name = "Heavy Asset Protection"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom) +"pw" = (/turf/unsimulated/wall/riveted,/area/centcom/suppy) +"px" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"py" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom) +"pz" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 1},/area/centcom/suppy) +"pA" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 9},/area/centcom/suppy) +"pB" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 5},/area/centcom/suppy) +"pC" = (/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"pD" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"pE" = (/obj/structure/bed/chair/comfy/red,/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living) +"pF" = (/obj/structure/bed/chair/comfy/blue,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living) +"pG" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living) +"pH" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living) +"pI" = (/turf/unsimulated/floor,/area/centcom/suppy) +"pJ" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/suppy) +"pK" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy) +"pL" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy) +"pM" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/suppy) +"pN" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/suppy) +"pO" = (/obj/item/weapon/stool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"pP" = (/turf/unsimulated/floor{icon_state = "bluered";dir = 9},/area/centcom/living) +"pQ" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 4},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living) +"pR" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/living) +"pS" = (/turf/unsimulated/floor{icon_state = "redblue";dir = 5},/area/centcom/living) +"pT" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 8},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living) +"pU" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/supply/dock) +"pV" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/supply/dock) +"pW" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/supply/dock) +"pX" = (/obj/machinery/porta_turret/stationary,/obj/effect/decal/warning_stripes,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"pY" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"pZ" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/zippo,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"qa" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"qb" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/living) +"qc" = (/obj/structure/bed/chair/comfy/red{dir = 4},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living) +"qd" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/living) +"qe" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview";dir = 8},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living) +"qf" = (/turf/simulated/shuttle/wall{dir = 2;icon_state = "swall_straight"},/area/supply/dock) +"qg" = (/turf/simulated/shuttle/floor,/area/supply/dock) +"qh" = (/obj/machinery/light/spot,/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/suppy) +"qi" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"qj" = (/turf/unsimulated/floor{icon_state = "bluered";dir = 10},/area/centcom/living) +"qk" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/living) +"ql" = (/turf/unsimulated/floor{icon_state = "redblue";dir = 6},/area/centcom/living) +"qm" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 10},/area/centcom/suppy) +"qn" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 6},/area/centcom/suppy) +"qo" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/suppy) +"qp" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor,/area/supply/dock) +"qq" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/supply/dock) +"qr" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"qs" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"qt" = (/obj/machinery/vending/cigarette,/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"qu" = (/obj/machinery/vending/boozeomat,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom) +"qv" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"qw" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview";dir = 1},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living) +"qx" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 1},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living) +"qy" = (/turf/unsimulated/floor{icon_state = "warnplate"},/area/centcom/suppy) +"qz" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/shuttle/floor,/area/supply/dock) +"qA" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock) +"qB" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"qC" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/supply/dock) +"qD" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space) +"qE" = (/obj/machinery/door/airlock/centcom,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qF" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle Infirmary"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qG" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle Wardrobe"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "supply_shuttle";pixel_x = 25;pixel_y = 0;req_one_access = list(13,31);tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock) +"qI" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qJ" = (/obj/structure/closet/hydrant{pixel_x = 30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qK" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qL" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qM" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qN" = (/obj/machinery/chem_master,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qO" = (/obj/machinery/chemical_dispenser/full,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qP" = (/obj/structure/closet/hydrant{pixel_x = -30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qQ" = (/obj/structure/closet/wardrobe{name = "Captain's Wardrobe"},/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/captain,/obj/item/weapon/gun/energy/lawgiver,/obj/item/weapon/card/id/centcom,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qR" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qS" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qT" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qU" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qV" = (/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/FixOVein,/obj/item/weapon/scalpel,/obj/item/weapon/retractor{pixel_x = 0;pixel_y = 6},/obj/item/weapon/bonegel{pixel_x = 4;pixel_y = 3},/obj/item/weapon/bonesetter,/obj/item/weapon/circular_saw,/obj/item/weapon/surgicaldrill,/obj/structure/closet/medical_wall{name = "Surgery Tools";pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"qW" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qX" = (/obj/structure/closet/wardrobe{name = "Officer's Wardrobe"},/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/officer,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/card/id/centcom,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom) +"qY" = (/obj/machinery/door/airlock/centcom{name = "To: NSS Exodus Processing";opacity = 1},/turf/unsimulated/floor,/area/centcom/living) +"qZ" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living) +"ra" = (/obj/machinery/door/airlock/centcom{name = "To: NSS Aurora Processing"},/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/unsimulated/floor,/area/centcom/living) +"rb" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock) +"rc" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock) +"rd" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom) +"re" = (/obj/machinery/iv_drip,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"rf" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/obj/machinery/optable,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/surgical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"rg" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (SOUTHWEST)";icon_state = "wall3";dir = 10},/area/shuttle/administration/centcom) +"rh" = (/obj/structure/shuttle/engine/propulsion,/turf/unsimulated/floor{name = "plating"},/area/shuttle/administration/centcom) +"ri" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"rj" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8;pixel_x = 4;pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0;pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9;pixel_x = 2;pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"rk" = (/obj/machinery/computer/operating,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) +"rl" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (SOUTHEAST)";icon_state = "wall3";dir = 6},/area/shuttle/administration/centcom) +"rm" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy) +"rn" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/suppy) +"ro" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom) +"rp" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "admin_shuttle_bay";name = "shuttle bay controller";pixel_x = 25;pixel_y = 0;tag_door = "admin_shuttle_bay_door"},/turf/unsimulated/floor{name = "plating"},/area/centcom) +"rq" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) +"rr" = (/turf/simulated/shuttle/wall{icon_state = "swall15";dir = 2},/area/supply/dock) +"rs" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/supply/dock) +"rt" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/supply/dock) +"ru" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/supply/dock) +"rv" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_bay_door";locked = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom) +"rw" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom) +"rx" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/space,/area/supply/dock) +"ry" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/supply/dock) +"rz" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/space,/area/supply/dock) +"rA" = (/turf/unsimulated/wall/riveted,/area/centcom/control) +"rB" = (/obj/machinery/telecomms/bus/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/control) +"rC" = (/obj/machinery/telecomms/receiver/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/control) +"rD" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/control) +"rE" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/control) +"rF" = (/obj/machinery/account_database{name = "CentComm Accounts database"},/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/control) +"rG" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"rH" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"rI" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"rJ" = (/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"rK" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy) +"rL" = (/turf/unsimulated/wall/riveted,/area/centcom/specops) +"rM" = (/turf/unsimulated/wall/riveted,/area/centcom/creed) +"rN" = (/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/control) +"rO" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"rP" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/control) +"rQ" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/weapon/gun/projectile/automatic/rifle/l6_saw,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rR" = (/obj/structure/table/rack,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rS" = (/obj/structure/table/rack,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rT" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/rifle,/obj/item/weapon/gun/energy/rifle,/obj/item/weapon/gun/energy/rifle,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rU" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps,/obj/item/weapon/storage/box/frags,/obj/item/weapon/storage/box/smokebombs,/obj/item/weapon/gun/launcher/grenade,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rW" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/weapon/gun/projectile/automatic/rifle/z8,/obj/item/weapon/gun/projectile/automatic/rifle/z8,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rX" = (/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/protectStation,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/safeguard,/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"rY" = (/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"rZ" = (/obj/machinery/door/blast/regular{id = "ert_synth_equipment";name = "Synthetics Modification Equipment"},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"sa" = (/obj/machinery/shield_gen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"sb" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"sc" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"sd" = (/obj/machinery/shield_capacitor,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"se" = (/obj/machinery/shieldwallgen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"sf" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"sg" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"sh" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT";name = "Assault Weapon Storage";p_open = 0},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"si" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/borgupload,/obj/item/weapon/circuitboard/aiupload{pixel_x = -3;pixel_y = -3},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"sj" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"sk" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/button/remote/blast_door{id = "CREED";name = "Spec Ops Ready Room";pixel_x = -5;pixel_y = 4;req_access = list(108)},/obj/machinery/button/remote/blast_door{icon_state = "doorctrl0";id = "ASSAULT";name = "Mech Storage";pixel_x = -5;pixel_y = -4;req_access = list(108)},/obj/machinery/button/remote/blast_door{id = "ert_synth_equipment";name = "Synth Modification Equipment";pixel_x = 5;pixel_y = -4;req_access = list(108)},/obj/machinery/button/remote/blast_door{id = "centcomm_bsa";name = "Artillery Access";pixel_x = 5;pixel_y = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"sl" = (/obj/machinery/telecomms/broadcaster/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/control) +"sm" = (/obj/machinery/telecomms/hub/preset_cent,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control) +"sn" = (/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control) +"so" = (/obj/machinery/computer/rdservercontrol{badmin = 1;name = "Master R&D Server Controller"},/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control) +"sp" = (/obj/machinery/r_n_d/server/centcom,/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/control) +"sq" = (/obj/machinery/door/airlock/centcom{name = "NMSS Odin Sub-Deck";opacity = 1},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living) +"sr" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/living) +"ss" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) +"st" = (/obj/mecha/combat/gygax/dark,/obj/machinery/camera/network/ert{c_tag = "Assault Armor North"},/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops) +"su" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1441;listening = 0;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"sv" = (/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"sw" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT";name = "Assault Armor Storage";p_open = 0},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"sx" = (/turf/unsimulated/floor{icon_state = "vault";dir = 9},/area/centcom/specops) +"sy" = (/obj/machinery/vending/security,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"sz" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"sA" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"sB" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"sC" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle";opacity = 1;req_access = list(108)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) +"sD" = (/obj/machinery/door/airlock/centcom{name = "Communications Control";opacity = 1;req_access = list(104)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control) +"sE" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living) +"sF" = (/obj/machinery/door/airlock/centcom{name = "Teleporter Bay";opacity = 1;req_access = list(107)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control) +"sG" = (/turf/unsimulated/wall/riveted,/area/centcom/test) +"sH" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/control) +"sI" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"sJ" = (/obj/structure/artilleryplaceholder{icon_state = "1"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 9},/area/centcom/control) +"sK" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"sL" = (/obj/structure/artilleryplaceholder{icon_state = "3"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sM" = (/obj/structure/artilleryplaceholder{icon_state = "2"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sN" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "5"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sO" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "4"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sP" = (/obj/structure/artilleryplaceholder{icon_state = "7"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sQ" = (/obj/structure/artilleryplaceholder{icon_state = "6"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sR" = (/obj/structure/artilleryplaceholder{icon_state = "9"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sS" = (/obj/structure/artilleryplaceholder{icon_state = "8"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sT" = (/obj/structure/artilleryplaceholder{icon_state = "11"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sU" = (/obj/structure/artilleryplaceholder{icon_state = "10"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control) +"sV" = (/obj/machinery/door/blast/regular{id = "battery3";name = "Battery 3 Firing Door"},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/control) +"sW" = (/obj/structure/artilleryplaceholder{icon_state = "12"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 5},/area/centcom/control) +"sX" = (/obj/effect/landmark{name = "Marauder Exit"},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"sY" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"sZ" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT3";name = "Launch Bay #3";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"ta" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/specops) +"tb" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/specops) +"tc" = (/turf/unsimulated/floor{icon_state = "loadingarea";dir = 8},/area/centcom/specops) +"td" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT3";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) +"te" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,/obj/item/mecha_parts/mecha_equipment/armor_booster/anticcw_armor_booster,/obj/item/mecha_parts/mecha_equipment/armor_booster/antiproj_armor_booster,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tf" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/projectile/automatic/x9,/obj/item/weapon/gun/projectile/automatic/x9,/obj/item/weapon/gun/projectile/automatic/x9,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tg" = (/obj/machinery/vending/tacticool/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"th" = (/obj/machinery/vending/assist,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"ti" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tj" = (/obj/machinery/pipedispenser/orderable,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tk" = (/obj/machinery/power/emitter,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tl" = (/obj/machinery/pipedispenser/disposal/orderable,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tm" = (/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"tn" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor";network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"to" = (/obj/machinery/computer/pod{id = "NTrasen";name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1441;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) +"tp" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/creed) +"tq" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"tr" = (/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/control) +"ts" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/control) +"tt" = (/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/control) +"tu" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"tv" = (/obj/machinery/dna_scannernew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"tw" = (/obj/machinery/computer/scan_consolenew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"tx" = (/obj/machinery/computer/cloning,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"ty" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"tz" = (/obj/structure/artilleryplaceholder{icon_state = "13"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 8},/area/centcom/control) +"tA" = (/obj/structure/artilleryplaceholder{icon_state = "15"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control) +"tB" = (/obj/structure/artilleryplaceholder{icon_state = "14"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control) +"tC" = (/obj/structure/artilleryplaceholder{icon_state = "17"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control) +"tD" = (/obj/structure/artilleryplaceholder{icon_state = "16"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control) +"tE" = (/obj/structure/artilleryplaceholder{icon_state = "19"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control) +"tF" = (/obj/structure/artilleryplaceholder{icon_state = "18"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control) +"tG" = (/obj/structure/artilleryplaceholder{icon_state = "21"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control) +"tH" = (/obj/structure/artilleryplaceholder{icon_state = "20"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control) +"tI" = (/obj/structure/artilleryplaceholder{icon_state = "23"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control) +"tJ" = (/obj/structure/artilleryplaceholder{icon_state = "22"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control) +"tK" = (/obj/structure/artilleryplaceholder{icon_state = "24"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 4},/area/centcom/control) +"tL" = (/turf/unsimulated/beach/sand{density = 1;opacity = 1},/area/beach) +"tM" = (/obj/machinery/vending/tool,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tN" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/circuitboard/smes,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"tO" = (/obj/machinery/door/airlock/centcom{name = "Creed's Office";opacity = 1;req_access = list(108)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/creed) +"tP" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"tQ" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/control) +"tR" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"tS" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/control) +"tT" = (/obj/machinery/door/airlock/centcom{name = "Research Facility";opacity = 1;req_access = list(104)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/test) +"tU" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"tV" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "25"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "podhatch";dir = 10},/area/centcom/control) +"tW" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "26"},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control) +"tX" = (/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control) +"tY" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "28"},/obj/machinery/artillerycontrol{desc = "Bluespace Artillery; the thinking man's solution."},/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{tag = "icon-wood_siding2 (SOUTHEAST)";icon_state = "wood_siding2";dir = 6},/area/centcom/control) +"tZ" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "27"},/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "battery3";name = "Battery 3 Firing Control"},/turf/unsimulated/floor{icon_state = "wood_siding10"},/area/centcom/control) +"ua" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "30"},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control) +"ub" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "29"},/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "wood_siding6"},/area/centcom/control) +"uc" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "32"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control) +"ud" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "31"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control) +"ue" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "34"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control) +"uf" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "33"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control) +"ug" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "35"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 6},/area/centcom/control) +"uh" = (/turf/unsimulated/beach/sand,/area/beach) +"ui" = (/obj/structure/signpost,/turf/unsimulated/beach/sand,/area/beach) +"uj" = (/obj/structure/closet,/turf/unsimulated/beach/sand,/area/beach) +"uk" = (/obj/mecha/medical/odysseus/loaded,/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops) +"ul" = (/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"um" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/night{pixel_x = -1;pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1;pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1;pixel_y = -3},/obj/item/clothing/glasses/night,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"un" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/taperoll/police,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uo" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"up" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uq" = (/obj/structure/table/rack,/obj/item/rig_module/mounted,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"ur" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"us" = (/obj/machinery/vending/engivend,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"ut" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uu" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uv" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"ux" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uy" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uz" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uA" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uB" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 6},/area/centcom/control) +"uC" = (/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/control) +"uD" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 8},/area/centcom/control) +"uE" = (/turf/unsimulated/floor{icon_state = "ramptop";dir = 4},/area/centcom/control) +"uF" = (/turf/unsimulated/floor{icon_state = "vault";dir = 9},/area/centcom/control) +"uG" = (/turf/unsimulated/floor{icon_state = "engine"},/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control) +"uH" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"uI" = (/obj/effect/wingrille_spawn/reinforced_phoron,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control) +"uJ" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand,/area/beach) +"uK" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach) +"uL" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT2";name = "Launch Bay #2";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"uM" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT2";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) +"uN" = (/obj/item/mecha_parts/mecha_equipment/teleporter,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"uP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"uQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"uR" = (/obj/machinery/vending/engineering,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uS" = (/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"uU" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"uV" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/control) +"uW" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/control) +"uX" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/control) +"uY" = (/obj/structure/closet/secure_closet/medical3{pixel_x = -5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"uZ" = (/obj/structure/closet/secure_closet/medical1{pixel_x = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"va" = (/obj/structure/closet/secure_closet/medical2{pixel_x = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"vb" = (/obj/machinery/sleeper,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test) +"vc" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/unsimulated/floor{icon_state = "wood_siding9"},/area/centcom/control) +"vd" = (/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"ve" = (/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach) +"vf" = (/obj/mecha/working/ripley/firefighter,/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops) +"vg" = (/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,/obj/item/mecha_parts/mecha_equipment/tool/rcd,/obj/item/weapon/pickaxe/diamonddrill,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vh" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/box/cdeathalarm_kit,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vi" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vj" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vk" = (/obj/structure/table/reinforced,/obj/item/weapon/aicard,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vl" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/hand_tele,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vm" = (/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/taperoll/engineering,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vn" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"vo" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/specops) +"vp" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vr" = (/mob/living/silicon/decoy{name = "A.L.I.C.E."},/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control) +"vs" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vt" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vu" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/test) +"vv" = (/obj/machinery/door/blast/regular{id = "battery2";name = "Battery 2 Firing Door"},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/control) +"vw" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT1";name = "Launch Bay #1";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"vx" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT1";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) +"vy" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vz" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vA" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vB" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vC" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vD" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vE" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vF" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"vG" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"vH" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/riveted,/area/centcom/specops) +"vI" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 4},/area/centcom/control) +"vJ" = (/obj/machinery/computer/ordercomp,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vK" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1443;listening = 0;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vM" = (/obj/machinery/door/window{dir = 2;name = "AI Core Door";req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vO" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vP" = (/obj/machinery/computer/crew,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"vQ" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 1},/area/centcom/control) +"vR" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/riveted,/area/centcom/test) +"vS" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/test) +"vT" = (/obj/machinery/door/airlock/centcom{name = "Bluespace Artillery Deck";opacity = 1},/obj/machinery/door/blast/regular{id = "centcomm_bsa";name = "Bluespace Artillery Deck"},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/control) +"vU" = (/obj/effect/overlay/palmtree_r,/turf/unsimulated/beach/sand,/area/beach) +"vV" = (/obj/mecha/working/hoverpod,/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops) +"vW" = (/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vX" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/mounted/plasmacutter,/obj/item/rig_module/mounted/plasmacutter,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/rcd,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/mounted/egun,/obj/item/rig_module/mounted/egun,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"vY" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/projectile/automatic/rifle/w556,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"vZ" = (/obj/machinery/door/airlock/centcom{name = "Armory Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wa" = (/obj/machinery/door/airlock/centcom{name = "Engineering Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wb" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "CREED";name = "Ready Room";p_open = 0},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wc" = (/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) +"wd" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/specops) +"we" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "CREED";name = "Ready Room";p_open = 0},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/specops) +"wf" = (/obj/machinery/door/airlock/centcom{name = "Bridge";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wg" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "CCIAAgent"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wh" = (/obj/machinery/door/airlock/centcom{name = "Bluespace Artillery Deck";opacity = 1},/obj/machinery/door/blast/regular{id = "centcomm_bsa";name = "Bluespace Artillery Deck"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/test) +"wi" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/test) +"wj" = (/obj/structure/sign/nosmoking_2,/turf/unsimulated/wall/riveted,/area/centcom/control) +"wk" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "27"},/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "battery2";name = "Battery 2 Firing Control"},/turf/unsimulated/floor{icon_state = "wood_siding10"},/area/centcom/control) +"wl" = (/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach) +"wm" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT0";name = "Launch Bay #0";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"wn" = (/obj/machinery/camera/network/ert{c_tag = "Assault Armor South";dir = 1},/turf/unsimulated/floor{icon_state = "loadingarea";dir = 8},/area/centcom/specops) +"wo" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT0";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) +"wp" = (/obj/machinery/door/airlock/centcom{name = "Special Operations Command";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wq" = (/obj/structure/sign/securearea{name = "\improper ARMORY";pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wr" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS";pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"ws" = (/obj/machinery/recharger/wallcharger{pixel_x = 4;pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wt" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1441;listening = 0;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wu" = (/obj/structure/table/rack,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"wv" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"ww" = (/obj/structure/sign/nosmoking_2,/turf/unsimulated/wall/riveted,/area/centcom/specops) +"wx" = (/turf/unsimulated/floor{icon_state = "bluecorner"},/area/centcom/control) +"wy" = (/obj/machinery/computer/robotics,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wz" = (/obj/machinery/computer/communications,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wA" = (/obj/item/modular_computer/console/preset/command,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wB" = (/obj/machinery/computer/med_data,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wC" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/control) +"wD" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/riveted,/area/centcom/control) +"wE" = (/obj/structure/table/standard,/turf/unsimulated/beach/sand,/area/beach) +"wF" = (/obj/structure/table/standard,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach) +"wG" = (/obj/structure/sign/redcross{pixel_y = -32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wH" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"wI" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"wJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"wK" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/handcuffs,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"wL" = (/obj/structure/bed/chair/office/light,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"wM" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"wN" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"wO" = (/obj/structure/table/reinforced,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wP" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wQ" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access";name = "Crescent Checkpoint Access";pixel_x = -6;pixel_y = -24;req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome";name = "Thunderdome Access";pixel_x = 6;pixel_y = -24;req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle";name = "VIP Shuttle Access";pixel_x = 6;pixel_y = -34;req_access = list(101)},/obj/machinery/turretid{pixel_x = 28;pixel_y = -28;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wR" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/captains_spare,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"wS" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor,/area/centcom/control) +"wT" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/beach/sand,/area/beach) +"wU" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/beach/sand,/area/beach) +"wV" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/beach) +"wW" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"wX" = (/obj/machinery/door/airlock/centcom{name = "Medical Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"wY" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however...";hacked = 1;name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"wZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"xa" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"xb" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"xc" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 0},/turf/unsimulated/wall/riveted,/area/centcom/specops) +"xd" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xe" = (/obj/structure/table/rack,/obj/item/device/lightreplacer,/obj/item/device/lightreplacer,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xf" = (/obj/structure/table/reinforced,/obj/item/device/pda/captain,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"xg" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"xh" = (/obj/machinery/computer/security,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"xi" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"xj" = (/obj/machinery/door/blast/regular{id = "battery1";name = "Battery 1 Firing Door"},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/control) +"xk" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xl" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xm" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xn" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xo" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xp" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xq" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"xr" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"xs" = (/obj/effect/landmark{name = "Response Team"},/obj/effect/landmark{name = "Commando"},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xt" = (/obj/structure/closet{icon_closed = "syndicate1";icon_opened = "syndicate1open";icon_state = "syndicate1";name = "emergency response team wardrobe"},/obj/item/clothing/under/ert,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/rank/centcom_officer,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"xu" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"xv" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"xw" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"xx" = (/obj/structure/closet/crate,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xy" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"xz" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6;pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6;pixel_y = 3},/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xA" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket{amount_per_transfer_from_this = 50},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xB" = (/obj/item/weapon/mop,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xC" = (/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/control) +"xD" = (/obj/item/weapon/caution,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"xE" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"xF" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "27"},/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "battery1";name = "Battery 1 Firing Control"},/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{icon_state = "wood_siding10"},/area/centcom/control) +"xG" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "specops_centcom_dock";name = "docking port controller";pixel_x = 0;pixel_y = -25;req_one_access = list(103);tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops) +"xI" = (/obj/item/weapon/reagent_containers/glass/bucket{amount_per_transfer_from_this = 50},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"xJ" = (/obj/effect/decal/cleanable/greenglow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"xK" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "ramptop";dir = 4},/area/centcom/control) +"xL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"xM" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/effect/decal/cleanable/dirt,/obj/item/weapon/stool,/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control) +"xN" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control) +"xO" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"xP" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/effect/decal/cleanable/dirt,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control) +"xQ" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"xR" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach) +"xS" = (/mob/living/simple_animal/crab/Coffee,/turf/unsimulated/beach/sand,/area/beach) +"xT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/flash,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flash,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xU" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xV" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xW" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xX" = (/obj/structure/closet/crate/medical,/obj/item/weapon/circular_saw,/obj/item/weapon/surgicaldrill,/obj/item/weapon/bonegel{pixel_x = 4;pixel_y = 3},/obj/item/weapon/bonesetter,/obj/item/weapon/scalpel,/obj/item/weapon/retractor{pixel_x = 0;pixel_y = 6},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/FixOVein{pixel_x = -6;pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/surgical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xY" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"xZ" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"ya" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"yb" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops) +"yc" = (/turf/unsimulated/floor{icon_state = "loadingarea"},/area/centcom/specops) +"yd" = (/obj/machinery/light/small{dir = 4},/turf/unsimulated/floor{icon_state = "loadingarea"},/area/centcom/specops) +"ye" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp";prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"yf" = (/turf/space,/area/centcom/specops) +"yg" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/control) +"yh" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/control) +"yi" = (/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/control) +"yj" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"yk" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/unsimulated/floor{icon_state = "wood_siding9"},/area/centcom/control) +"yl" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"ym" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control) +"yn" = (/obj/item/clothing/head/collectable/paper,/turf/unsimulated/beach/sand,/area/beach) +"yo" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "specops_centcom_dock_door";locked = 1},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/specops) +"yp" = (/obj/machinery/vending/cola{name = "Robust Softdrinks";prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"yq" = (/obj/machinery/door/airlock/centcom{name = "Holding Cell";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_checkpoint_access";name = "NMSS Odin Checkpoint"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"yr" = (/turf/unsimulated/floor{icon_state = "sandwater"},/area/beach) +"ys" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/specops) +"yt" = (/turf/simulated/shuttle/plating,/area/centcom/specops) +"yu" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (NORTHWEST)";icon_state = "wall3";dir = 9},/area/shuttle/specops/centcom) +"yv" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/specops/centcom) +"yw" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "specops_shuttle_port_hatch";locked = 1;name = "Port Docking Hatch";req_access = list(13)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"yx" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) +"yy" = (/obj/machinery/vending/cigarette{name = "cigarette machine";prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"yz" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding) +"yA" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding) +"yB" = (/obj/item/weapon/stool/padded,/obj/item/weapon/stool/padded,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding) +"yC" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor,/area/centcom/holding) +"yD" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding) +"yE" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"yF" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding) +"yG" = (/turf/unsimulated/wall/riveted,/area/centcom/holding) +"yH" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_checkpoint_access";name = "NMSS Odin Checkpoint"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"yI" = (/turf/unsimulated/beach/coastline{density = 1;opacity = 1},/area/beach) +"yJ" = (/turf/unsimulated/beach/coastline,/area/beach) +"yK" = (/obj/machinery/recharger/wallcharger{pixel_x = 4;pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"yL" = (/obj/machinery/recharger/wallcharger{pixel_x = 4;pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3;name = "Emergency NanoMed";pixel_x = -28;pixel_y = 0},/obj/machinery/light/small/readylight{tag = "icon-bulb1 (WEST)";icon_state = "bulb1";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"yM" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "specops_shuttle_port";name = "port docking hatch controller";pixel_x = 0;pixel_y = 25;tag_door = "specops_shuttle_port_hatch"},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"yN" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"yO" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"yP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 4},/turf/unsimulated/floor,/area/shuttle/specops/centcom) +"yQ" = (/obj/machinery/computer/security/telescreen{desc = "";name = "Spec. Ops. Monitor";network = list("ERT");pixel_y = 30},/obj/machinery/computer/shuttle_control/specops,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"yR" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) +"yS" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding) +"yT" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding) +"yU" = (/turf/unsimulated/floor{icon_state = "greencorner";dir = 1},/area/centcom/holding) +"yV" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/holding) +"yW" = (/turf/unsimulated/floor{icon_state = "greencorner";dir = 4},/area/centcom/holding) +"yX" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/holding) +"yY" = (/turf/unsimulated/beach/water{density = 1;opacity = 1},/area/beach) +"yZ" = (/turf/unsimulated/beach/water,/area/beach) +"za" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "specops_shuttle_fore";name = "forward docking hatch controller";pixel_x = 0;pixel_y = -25;tag_door = "specops_shuttle_fore_hatch"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"zb" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "specops_shuttle_fore_hatch";locked = 1;name = "Forward Docking Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) +"zc" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"zd" = (/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"ze" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding) +"zf" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) +"zg" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape/centcom) +"zh" = (/obj/structure/window/shuttle{icon_state = "window4"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"zi" = (/obj/structure/window/shuttle{icon_state = "window12"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"zj" = (/obj/structure/window/shuttle{icon_state = "window8"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"zk" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape/centcom) +"zl" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/holding) +"zm" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3 (NORTHEAST)";icon_state = "diagonalWall3";dir = 5},/area/shuttle/specops/centcom) +"zn" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"zo" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light/small{brightness_color = "#DA0205";brightness_power = 1;brightness_range = 5},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"zp" = (/obj/machinery/computer/prisoner{name = "Implant Management"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"zq" = (/obj/machinery/computer/communications,/obj/item/device/radio/intercom{broadcasting = 0;dir = 1;frequency = 1443;listening = 1;name = "Spec Ops Intercom";pixel_y = -28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"zr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) +"zs" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals - Holding Cell";dir = 4},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding) +"zt" = (/obj/machinery/door/airlock/glass_security{name = "Holding Cell";req_access = list(2)},/turf/unsimulated/floor,/area/centcom/holding) +"zu" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) +"zv" = (/obj/machinery/door/blast/regular{id = "CentComPort";name = "Security Doors"},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"zw" = (/obj/machinery/door/airlock/centcom{name = "Arrivals Processing";opacity = 1;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"zx" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) +"zy" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 9},/area/shuttle/escape/centcom) +"zz" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"zA" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"zB" = (/obj/machinery/computer/shuttle_control/emergency,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"zC" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"zD" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"zE" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 5},/area/shuttle/escape/centcom) +"zF" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) +"zG" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) +"zH" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding) +"zI" = (/obj/machinery/door/airlock/glass_security{name = "Holding Cell";req_access = list(2)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"zJ" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding) +"zK" = (/obj/machinery/door/window/northleft{base_state = "right";dir = 8;icon_state = "right";name = "Arrivals Processing";req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"zL" = (/obj/item/modular_computer/console/preset/command,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"zM" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge West"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"zN" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"zO" = (/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"zP" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge East"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"zQ" = (/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding) +"zR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"zS" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors.";id = "CentComPort";name = "Security Doors";pixel_x = -12;pixel_y = -25;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"zT" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North";dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"zU" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"zV" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "escape_shuttle";pixel_x = 0;pixel_y = -25;req_one_access = list(13);tag_door = "escape_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"zW" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"zX" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"zY" = (/obj/machinery/light/spot,/turf/simulated/shuttle/plating,/area/centcom/specops) +"zZ" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding) +"Aa" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Ab" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding) +"Ac" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "CentComPort";name = "Security Doors";opacity = 0},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Ad" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing";req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Ae" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/skills{icon_state = "medlaptop";pixel_x = 3;pixel_y = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Af" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"Ag" = (/turf/simulated/shuttle/wall{dir = 2;icon_state = "swall_straight"},/area/shuttle/escape/centcom) +"Ah" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Ai" = (/obj/item/modular_computer/console/preset/security,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Aj" = (/turf/simulated/shuttle/wall{icon_state = "swall"},/area/shuttle/escape/centcom) +"Ak" = (/obj/structure/AIcore/deactivated,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"Al" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Am" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"An" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"Ao" = (/turf/unsimulated/wall/riveted,/area/centcom/ferry) +"Ap" = (/obj/machinery/atm{pixel_x = -26},/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"Aq" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/holding) +"Ar" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding) +"As" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit";req_access = list(19)},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"At" = (/turf/simulated/shuttle/wall{icon_state = "swall_t";dir = 1},/area/shuttle/escape/centcom) +"Au" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 8},/area/shuttle/escape/centcom) +"Av" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"},/area/shuttle/escape/centcom) +"Aw" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space,/area/space) +"Ax" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/simulated/mineral,/area/space) +"Ay" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/ferry) +"Az" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"AA" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/ferry) +"AB" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"AC" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_shuttle_bay";name = "shuttle bay controller";pixel_x = 0;pixel_y = 25;tag_door = "centcom_shuttle_bay_door"},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"AD" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/obj/structure/window/reinforced{dir = 5;health = 1e+007},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"AE" = (/obj/machinery/computer/shuttle_control{req_access = list(101);shuttle_tag = "Centcom"},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"AF" = (/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/ferry) +"AG" = (/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/holding) +"AH" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"AI" = (/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/holding) +"AJ" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"},/area/shuttle/escape/centcom) +"AK" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"AL" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Cell"},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"AM" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"AN" = (/turf/unsimulated/floor{icon_state = "warnplate"},/area/centcom/ferry) +"AO" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 10},/area/centcom/ferry) +"AP" = (/obj/machinery/door/airlock/external{frequency = 1380;glass = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_bay_door";locked = 1;name = "Transport Airlock"},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/ferry) +"AQ" = (/obj/structure/window/shuttle{icon_state = "window2"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"AR" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"AS" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"AT" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"AU" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/shuttle/transport1/centcom) +"AV" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/transport1/centcom) +"AW" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/transport1/centcom) +"AX" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window4"},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) +"AY" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"AZ" = (/obj/structure/grille,/obj/structure/window/shuttle{tag = "icon-17 (NORTHEAST)";icon_state = "17"},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) +"Ba" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) +"Bb" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/transport1/centcom) +"Bc" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Bd" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding) +"Be" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"Bf" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"Bg" = (/obj/item/weapon/shovel,/turf/unsimulated/floor{icon_state = "asteroid"},/area/space) +"Bh" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/space) +"Bi" = (/obj/machinery/computer/shuttle_control{req_access = list(101);shuttle_tag = "Centcom"},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"Bj" = (/turf/simulated/shuttle/wall{icon_state = "swall_f";dir = 8},/area/shuttle/transport1/centcom) +"Bk" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 9},/area/shuttle/transport1/centcom) +"Bl" = (/turf/simulated/shuttle/wall{dir = 1;icon_state = "swall_f"},/area/shuttle/transport1/centcom) +"Bm" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"Bn" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"Bo" = (/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"Bp" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) +"Bq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 4},/turf/unsimulated/floor,/area/shuttle/transport1/centcom) +"Br" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/turf/unsimulated/wall/riveted,/area/centcom/ferry) +"Bs" = (/obj/machinery/door/airlock/external{name = "Arrivals Bar Airlock"},/obj/machinery/door/blast/regular{id = "crescent_vip_shuttle";name = "NMSS Odin VIP Shuttle"},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/ferry) +"Bt" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "greencorner";dir = 4},/area/centcom/holding) +"Bu" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2;pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Bv" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell";req_access = list(2)},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"Bw" = (/obj/item/weapon/coin/gold,/turf/unsimulated/floor{icon_state = "asteroid"},/area/space) +"Bx" = (/obj/effect/decal/remains,/turf/unsimulated/floor{icon_state = "asteroid"},/area/space) +"By" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) +"Bz" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"BA" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"BB" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"BC" = (/obj/structure/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 1;icon_state = "carpetside"},/area/centcom/holding) +"BD" = (/obj/structure/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 9;icon_state = "carpetside"},/area/centcom/holding) +"BE" = (/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"BF" = (/obj/structure/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/centcom/holding) +"BG" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner";dir = 1},/area/centcom/holding) +"BH" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"BI" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals East"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"BJ" = (/turf/unsimulated/floor{dir = 4;heat_capacity = 1;icon_state = "warning"},/area/centcom/holding) +"BK" = (/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding) +"BL" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_dock_airlock";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding) +"BM" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/obj/machinery/mech_sensor{dir = 8;frequency = 1380;id_tag = "shuttle_dock_north_mech";pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"BN" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"BO" = (/obj/machinery/camera/network/crescent{c_tag = "Shuttle Center"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"BP" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/shuttle/transport1/centcom) +"BQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_shuttle";pixel_x = 0;pixel_y = -25;tag_door = "centcom_shuttle_hatch"},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"BR" = (/turf/simulated/shuttle/wall{icon_state = "swall_f";dir = 2},/area/shuttle/transport1/centcom) +"BS" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 10},/area/shuttle/transport1/centcom) +"BT" = (/turf/simulated/shuttle/wall{icon_state = "swall_f";dir = 4},/area/shuttle/transport1/centcom) +"BU" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"BV" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) +"BW" = (/turf/unsimulated/floor{dir = 2;icon_state = "carpetsymbol"},/area/centcom/holding) +"BX" = (/turf/unsimulated/floor{dir = 8;icon_state = "carpetside"},/area/centcom/holding) +"BY" = (/turf/unsimulated/floor{dir = 4;icon_state = "carpetside"},/area/centcom/holding) +"BZ" = (/obj/machinery/door/airlock/glass{name = "Arrivals Bar"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Ca" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West";dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Cb" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East";dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Cc" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"Cd" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/transport1/centcom) +"Ce" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window12"},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) +"Cf" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) +"Cg" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/transport1/centcom) +"Ch" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 2;icon_state = "carpetside"},/area/centcom/holding) +"Ci" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 10;icon_state = "carpetside"},/area/centcom/holding) +"Cj" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 6;icon_state = "carpetside"},/area/centcom/holding) +"Ck" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/holding) +"Cl" = (/turf/unsimulated/floor{icon_state = "warning"},/area/centcom/holding) +"Cm" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_dock";name = "docking port controller";pixel_x = 25;pixel_y = 0;req_one_access = list(13);tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{dir = 6;icon_state = "warning"},/area/centcom/holding) +"Cn" = (/obj/structure/window/shuttle{icon_state = "window3"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"Co" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1;pixel_y = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Cp" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1;pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East";dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Cq" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner";dir = 8},/area/centcom/holding) +"Cr" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Cs" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) +"Ct" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/control) +"Cu" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 0},/turf/unsimulated/wall/riveted,/area/centcom/holding) +"Cv" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar Center"},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Cw" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Cx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals South";dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"Cy" = (/turf/unsimulated/floor{dir = 5;heat_capacity = 1;icon_state = "warning"},/area/centcom/holding) +"Cz" = (/turf/unsimulated/floor{icon_state = "warning";dir = 1;heat_capacity = 1},/area/centcom/holding) +"CA" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"CB" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"CC" = (/obj/machinery/cryopod,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"CD" = (/obj/machinery/computer/cryopod{density = 0;layer = 3.3;pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"CE" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/obj/structure/cryofeed,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"CF" = (/obj/structure/cryofeed,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"CG" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CH" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CI" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CJ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CK" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CL" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CM" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"CN" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape/centcom) +"CO" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"CP" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"CQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"CR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"CS" = (/obj/structure/sign/double/barsign,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"CT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"CU" = (/turf/unsimulated/wall/riveted,/area/syndicate_mothership{name = "\improper Raider Base"}) +"CV" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"CW" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/boiledrice,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CX" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"CZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Da" = (/turf/unsimulated/floor{icon_state = "wood"},/obj/item/weapon/stool/padded,/turf/unsimulated/floor{name = "plating";icon_state = "siding2"},/area/centcom/holding) +"Db" = (/turf/unsimulated/floor{icon_state = "greencorner";dir = 8},/area/centcom/holding) +"Dc" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding) +"Dd" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/obj/machinery/mech_sensor{dir = 8;frequency = 1380;id_tag = "shuttle_dock_south_mech";pixel_y = 19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"De" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"Df" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dg" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine";prices = list();products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Di" = (/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dj" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dk" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dl" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dm" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dn" = (/obj/structure/mirror/raider{pixel_x = 0;pixel_y = 28},/obj/structure/sink{pixel_y = 11},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Do" = (/obj/structure/curtain/open/shower,/obj/machinery/shower,/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dp" = (/obj/structure/sink{pixel_y = 11},/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dq" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Dr" = (/turf/unsimulated/floor{icon_state = "wood"},/turf/unsimulated/floor{name = "plating";icon_state = "siding4"},/area/centcom/holding) +"Ds" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"Dt" = (/obj/structure/sign/redcross,/turf/unsimulated/wall/riveted,/area/centcom/holding) +"Du" = (/obj/machinery/door/airlock/glass_medical{name = "Arrivals Medbay"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Dv" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 2},/area/shuttle/escape/centcom) +"Dw" = (/obj/machinery/door/airlock/glass_mining{name = "Shuttle Cargo"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"Dx" = (/obj/machinery/door/airlock/glass_medical{name = "Escape Shuttle Infirmary";req_access = list(5)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Dy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Dz" = (/obj/item/weapon/broken_bottle,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"DA" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"DB" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"DC" = (/obj/item/weapon/mop,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"DD" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"DE" = (/turf/simulated/mineral,/area/syndicate_mothership{name = "\improper Raider Base"}) +"DF" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"DG" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"DH" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"DI" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"DJ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/wcoat,/obj/item/clothing/head/that{pixel_x = 4;pixel_y = 6},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"DK" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"DL" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"DM" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"DN" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"DO" = (/obj/structure/bed/roller,/turf/unsimulated/floor{dir = 4;icon_state = "whitegreenfull"},/area/centcom/holding) +"DP" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed";pixel_x = 0;pixel_y = 29},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding) +"DQ" = (/turf/unsimulated/floor{icon_state = "green"},/area/centcom/holding) +"DR" = (/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/holding) +"DS" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"DT" = (/obj/structure/closet/hydrant{pixel_x = 30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"DU" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"DV" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"DW" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"DX" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8;pixel_x = 4;pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0;pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9;pixel_x = 2;pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"DY" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4;pixel_y = 0},/obj/item/weapon/wrench,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"DZ" = (/obj/structure/closet/hydrant{pixel_x = -30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"Ea" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"Eb" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ec" = (/obj/effect/decal/cleanable/ash,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ed" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ee" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/drinkingglasses,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ef" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Eg" = (/obj/structure/closet/crate/loot,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Eh" = (/obj/vehicle/bike,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ei" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ej" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Ek" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"El" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/meatsteak,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"Em" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding) +"En" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/unsimulated/floor{dir = 8;icon_state = "whitegreencorner"},/area/centcom/holding) +"Eo" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"Ep" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"Eq" = (/obj/machinery/door/airlock/centcom{name = "Aurora II Prepatory Wing";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Er" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/camera/network/crescent{c_tag = "Shuttle West Storage";dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"Es" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"Et" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Medical";dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Eu" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Ev" = (/obj/machinery/vending/wallmed1{layer = 3.3;name = "Emergency NanoMed";pixel_x = 28;pixel_y = 0},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Ew" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"Ex" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/crescent{c_tag = "Shuttle East Storage";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) +"Ey" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ez" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"EA" = (/obj/effect/decal/cleanable/vomit,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"EB" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/vending/cola{name = "hacked Robust Softdrinks";prices = list()},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"EC" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"ED" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/single{icon = 'icons/obj/drinks.dmi';icon_state = "cola";name = "randomly spawned cola";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/reagent_containers/food/drinks/cans/cola},/obj/random/single{icon = 'icons/obj/playing_cards.dmi';icon_state = "deck";name = "randomly spawned deck of cards";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/deck},/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding) +"EE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/lipstick/random,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding) +"EF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/medical,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding) +"EG" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 6},/area/centcom/holding) +"EH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/wallet/random,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding) +"EI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/tool,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 1},/area/centcom/holding) +"EJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/action_figure,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding) +"EK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding) +"EL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/single{icon = 'icons/obj/items.dmi';icon_state = "lighter-g";name = "randomly spawned lighter";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/flame/lighter},/turf/unsimulated/floor{icon_state = "warnwhite";dir = 1},/area/centcom/holding) +"EM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding) +"EN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/bible,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding) +"EO" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"EP" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"EQ" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"ER" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"ES" = (/turf/unsimulated/floor{dir = 8;icon_state = "whitegreen"},/area/centcom/holding) +"ET" = (/turf/unsimulated/floor{dir = 8;icon_state = "whitegreencorner"},/area/centcom/holding) +"EU" = (/turf/unsimulated/floor{dir = 2;icon_state = "whitegreencorner"},/area/centcom/holding) +"EV" = (/obj/structure/sign/nosmoking_2{pixel_x = 28;pixel_y = 0},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding) +"EW" = (/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/spawning) +"EX" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/spawning) +"EY" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/spawning) +"EZ" = (/turf/unsimulated/wall/riveted,/area/centcom/spawning) +"Fa" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"Fb" = (/obj/machinery/iv_drip,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Fc" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Fd" = (/obj/structure/bed/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Fe" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Ff" = (/turf/unsimulated/floor{icon_state = "warnwhitecorner";dir = 8},/area/centcom/holding) +"Fg" = (/obj/structure/table/standard,/obj/random/medical,/turf/unsimulated/floor{dir = 8;icon_state = "whitegreen"},/area/centcom/holding) +"Fh" = (/turf/unsimulated/floor{icon_state = "warnwhitecorner";dir = 4},/area/centcom/holding) +"Fi" = (/turf/unsimulated/floor{icon_state = "warnwhite";dir = 1},/area/centcom/holding) +"Fj" = (/obj/structure/table/standard,/obj/random/plushie,/turf/unsimulated/floor{dir = 4;icon_state = "whitegreen"},/area/centcom/holding) +"Fk" = (/obj/machinery/door/airlock/glass{name = "NMSS Odin Cryogenic Storage"},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreenfull"},/area/centcom/holding) +"Fl" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"Fm" = (/obj/machinery/door/airlock/glass{name = "NMSS Odin Sports Megacenter"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Fn" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0;pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7;pixel_y = 1},/obj/item/weapon/wrench,/turf/unsimulated/floor{dir = 8;icon_state = "whitegreen"},/area/centcom/holding) +"Fo" = (/turf/unsimulated/floor{dir = 10;icon_state = "whitegreen"},/area/centcom/holding) +"Fp" = (/turf/unsimulated/floor{dir = 6;icon_state = "whitegreen"},/area/centcom/holding) +"Fq" = (/turf/unsimulated/floor{dir = 8;icon_state = "whitehall"},/area/centcom/holding) +"Fr" = (/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Fs" = (/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/spawning) +"Ft" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Fu" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/spawning) +"Fv" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/shuttle/escape/centcom) +"Fw" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape/centcom) +"Fx" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Fy" = (/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"Fz" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/escape/centcom) +"FA" = (/obj/machinery/optable,/obj/item/organ/stack,/obj/effect/decal/cleanable/blood/xeno,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FB" = (/obj/effect/decal/cleanable/generic,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FC" = (/obj/item/weapon/stool/padded,/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FD" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FE" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FF" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FG" = (/obj/random/vendor,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FH" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"FI" = (/turf/unsimulated/floor{dir = 4;icon_state = "whitegreen"},/area/centcom/holding) +"FJ" = (/turf/unsimulated/floor{icon_state = "whitegreen";dir = 1},/area/centcom/holding) +"FK" = (/turf/unsimulated/floor{dir = 9;icon_state = "whitegreen"},/area/centcom/holding) +"FL" = (/turf/unsimulated/floor{dir = 5;icon_state = "whitegreen"},/area/centcom/holding) +"FM" = (/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/holding) +"FN" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Medical";dir = 4},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding) +"FO" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{dir = 9;icon_state = "whitegreen"},/area/centcom/holding) +"FP" = (/turf/unsimulated/floor{dir = 1;icon_state = "whitegreencorner"},/area/centcom/holding) +"FQ" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 10},/area/shuttle/escape/centcom) +"FR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"FS" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 6},/area/shuttle/escape/centcom) +"FT" = (/obj/item/organ/xenos/eggsac,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FU" = (/obj/structure/mirror/raider{pixel_x = 0;pixel_y = 28},/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FV" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FW" = (/obj/item/clothing/head/philosopher_wig,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FX" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2;pixel_y = 6},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -6},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FY" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"FZ" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp";prices = list()},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ga" = (/obj/machinery/door/airlock/hatch{name = "Warehouse";req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gb" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6;pixel_y = 1},/turf/unsimulated/floor{name = "plating";icon_state = "whitecorner"},/area/centcom/holding) +"Gc" = (/obj/structure/table/standard,/obj/item/weapon/retractor{pixel_x = 0;pixel_y = 6},/obj/item/weapon/scalpel,/turf/unsimulated/floor{dir = 2;icon_state = "whitehall"},/area/centcom/holding) +"Gd" = (/obj/structure/table/standard,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/turf/unsimulated/floor{dir = 2;icon_state = "whitehall"},/area/centcom/holding) +"Ge" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{icon_state = "whitecorner";dir = 8},/area/centcom/holding) +"Gf" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4;pixel_y = 3},/turf/unsimulated/floor{dir = 2;icon_state = "whitehall"},/area/centcom/holding) +"Gg" = (/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding) +"Gh" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) +"Gi" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gj" = (/obj/item/tape/engineering{icon_state = "engineering_v"},/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gk" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/dice,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gl" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/pizzabox/meat,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gm" = (/obj/machinery/vending/sovietsoda,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gn" = (/obj/item/weapon/cigbutt,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Go" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gp" = (/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding) +"Gq" = (/turf/unsimulated/floor{icon_state = "whitehall";dir = 4},/area/centcom/holding) +"Gr" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre";req_access = list(45)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"Gs" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gt" = (/obj/effect/decal/remains/robot,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Gu" = (/obj/machinery/door/window/northleft{name = "Women's Changing Room"},/turf/unsimulated/floor{icon_state = "whitered";dir = 1},/area/centcom/holding) +"Gv" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whitered_c";dir = 9},/area/centcom/holding) +"Gw" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whitered_w";dir = 5},/area/centcom/holding) +"Gx" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whitered_w";dir = 5},/area/centcom/holding) +"Gy" = (/obj/machinery/door/window/northright{name = "Women's Changing Room"},/turf/unsimulated/floor{icon_state = "whitered";dir = 1},/area/centcom/holding) +"Gz" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 9},/area/centcom/holding) +"GA" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 5},/area/centcom/holding) +"GB" = (/obj/machinery/door/window/northleft{name = "Men's Changing Room"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 1},/area/centcom/holding) +"GC" = (/obj/machinery/door/window/northright{name = "Men's Changing Room"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 1},/area/centcom/holding) +"GD" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 9},/area/centcom/holding) +"GE" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding) +"GF" = (/obj/structure/closet/secure_closet/medical2,/turf/unsimulated/floor{icon_state = "escapecorner";dir = 4},/area/centcom/holding) +"GG" = (/turf/unsimulated/floor{icon_state = "whitehall";dir = 5},/area/centcom/holding) +"GH" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"GI" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed";pixel_x = 28},/turf/unsimulated/floor{icon_state = "whitecorner";dir = 1},/area/centcom/holding) +"GJ" = (/turf/unsimulated/floor{icon_state = "whitehall";dir = 9},/area/centcom/holding) +"GK" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_x = 0;pixel_y = 0},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreen"},/area/centcom/holding) +"GL" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning) +"GM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning) +"GN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning) +"GO" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning) +"GP" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning) +"GQ" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning) +"GR" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"GS" = (/obj/effect/decal/cleanable/blood/oil/streak,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"GT" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"GU" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"GV" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"GW" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whitered";dir = 8},/area/centcom/holding) +"GX" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whitered";dir = 4},/area/centcom/holding) +"GY" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whitered";dir = 4},/area/centcom/holding) +"GZ" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 8},/area/centcom/holding) +"Ha" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 4},/area/centcom/holding) +"Hb" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 8},/area/centcom/holding) +"Hc" = (/obj/structure/urinal{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"Hd" = (/obj/structure/mirror{pixel_y = 32},/obj/structure/sink{pixel_y = 16},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"He" = (/obj/structure/mirror{pixel_y = 32},/obj/structure/sink{pixel_y = 16},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"Hf" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding) +"Hg" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Hh" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{dir = 1;icon_state = "whitehall"},/area/centcom/holding) +"Hi" = (/turf/unsimulated/floor{icon_state = "escapecorner";dir = 4},/area/centcom/holding) +"Hj" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4;pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4;pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5;pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5;pixel_y = -1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Hk" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "whitecorner";dir = 1},/area/centcom/holding) +"Hl" = (/obj/machinery/bodyscanner{dir = 8;icon_state = "body_scanner_0";tag = "icon-body_scanner_0 (EAST)"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Hm" = (/obj/structure/bed/roller,/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding) +"Hn" = (/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/unsimulated/floor{icon_state = "whitehall";dir = 4},/area/centcom/holding) +"Ho" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{layer = 2.8;pixel_x = 4;pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9;pixel_x = 2;pixel_y = 3},/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding) +"Hp" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2;pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/weapon/storage/firstaid/adv{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding) +"Hq" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{dir = 6;icon_state = "whitegreen"},/area/centcom/holding) +"Hr" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning) +"Hs" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning) +"Ht" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning) +"Hu" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning) +"Hv" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning) +"Hw" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/arrival/centcom) +"Hx" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/shuttle/arrival/centcom) +"Hy" = (/turf/simulated/shuttle/wall{icon_state = "swall_t";dir = 1},/area/shuttle/arrival/centcom) +"Hz" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window4"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"HA" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window12"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"HB" = (/obj/structure/grille,/obj/structure/window/shuttle{tag = "icon-17 (NORTHEAST)";icon_state = "17"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"HC" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/arrival/centcom) +"HD" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/spawning) +"HE" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"HF" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/obj/item/weapon/gun/launcher/spikethrower,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"HG" = (/obj/machinery/door/airlock/centcom{name = "Unisex Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"HH" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning) +"HI" = (/obj/machinery/door/airlock/centcom{name = "To: Arrivals Deck"},/turf/unsimulated/floor,/area/centcom/spawning) +"HJ" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning) +"HK" = (/obj/machinery/door/window/westright,/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning) +"HL" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning) +"HM" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning) +"HN" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"HO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"HP" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/arrival/centcom) +"HQ" = (/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"HR" = (/obj/machinery/light{dir = 1},/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"HS" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"HT" = (/obj/structure/closet/emcloset,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Shuttle"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"HU" = (/obj/structure/closet/emcloset,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"HV" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"HW" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 5},/area/shuttle/arrival/centcom) +"HX" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/arrival/centcom) +"HY" = (/obj/structure/bed/chair,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"HZ" = (/turf/unsimulated/floor{icon_state = "whitered"},/area/centcom/holding) +"Ia" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whitered_a";dir = 10},/area/centcom/holding) +"Ib" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whitered_a";dir = 6},/area/centcom/holding) +"Ic" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whitered_a";dir = 6},/area/centcom/holding) +"Id" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whiteblue_ex";dir = 10},/area/centcom/holding) +"Ie" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 6},/area/centcom/holding) +"If" = (/turf/unsimulated/floor{icon_state = "whiteblue"},/area/centcom/holding) +"Ig" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whiteblue_ex";dir = 10},/area/centcom/holding) +"Ih" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = "odin_stall";name = "Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"Ii" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals - Holding Cell";dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"Ij" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning) +"Ik" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning) +"Il" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning) +"Im" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"In" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/shuttle/arrival/centcom) +"Io" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"Ip" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"Iq" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"Ir" = (/obj/structure/window/shuttle{icon_state = "window2"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"Is" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"It" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Iu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Iv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Iw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ix" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Iy" = (/obj/machinery/button/remote/airlock{id = "odin_stall";name = "Door Bolt Control";pixel_x = -25;pixel_y = 8;specialfunctions = 4},/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"Iz" = (/obj/structure/window/basic{dir = 4},/obj/machinery/shower{dir = 1},/obj/machinery/door/window/northleft{name = "Shower";req_access = list()},/obj/structure/curtain/open/shower,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"IA" = (/obj/structure/window/basic{dir = 8},/obj/machinery/shower{dir = 1},/obj/machinery/door/window/northright{name = "Shower"},/obj/structure/curtain/open/shower,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding) +"IB" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding) +"IC" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/holding) +"ID" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/holding) +"IE" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning) +"IF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning) +"IG" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning) +"IH" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"II" = (/obj/structure/window/shuttle{icon_state = "window3"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"IJ" = (/obj/machinery/status_display/arrivals_display{pixel_x = 32},/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/spawning) +"IK" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "arrival_shuttle";pixel_x = 0;pixel_y = -25;req_one_access = list(13);tag_door = "arrival_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"IL" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"IM" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/syndicate_mothership{name = "\improper Raider Base"}) +"IN" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"IO" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/syndicate_mothership{name = "\improper Raider Base"}) +"IP" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"IQ" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"IR" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"IS" = (/obj/structure/holostool,/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding) +"IT" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/holding) +"IU" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding) +"IV" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/holding) +"IW" = (/obj/structure/table/holotable,/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/holding) +"IX" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/spawning) +"IY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning) +"IZ" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning) +"Ja" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom) +"Jb" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 2},/area/shuttle/arrival/centcom) +"Jc" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"Jd" = (/obj/machinery/requests_console{department = "Arrival shuttle";pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"Je" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 6},/area/shuttle/arrival/centcom) +"Jf" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/arrival/centcom) +"Jg" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Jh" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ji" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Jj" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/holding) +"Jk" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/holding) +"Jl" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/spawning) +"Jm" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/spawning) +"Jn" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/spawning) +"Jo" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/spawning) +"Jp" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/spawning) +"Jq" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/shuttle/arrival/centcom) +"Jr" = (/obj/machinery/status_display/arrivals_display,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/shuttle/arrival/centcom) +"Js" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"},/area/shuttle/arrival/centcom) +"Jt" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrival_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"Ju" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/arrival/centcom) +"Jv" = (/obj/machinery/door/window/holowindoor{base_state = "right";dir = 2;icon_state = "right";name = "Red Corner"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"Jw" = (/obj/structure/window/reinforced/holowindow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"Jx" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North";dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"Jy" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals - Holding Cell";dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"Jz" = (/obj/machinery/door/window/holowindoor{name = "Red Team"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"JA" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/spawning) +"JB" = (/obj/machinery/door/airlock/centcom{name = "To: NMSS Odin Hab Complex"},/turf/unsimulated/floor,/area/centcom/spawning) +"JC" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/spawning) +"JD" = (/obj/machinery/door/window/westleft,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/spawning) +"JE" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/spawning) +"JF" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning) +"JG" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning) +"JH" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_arrivals_airlock";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning) +"JI" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/skipjack_station/start) +"JJ" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/skipjack_station/start) +"JK" = (/obj/structure/window/reinforced/holowindow{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"JL" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/holding) +"JM" = (/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/holding) +"JN" = (/obj/structure/window/reinforced/holowindow{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"JO" = (/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/spawning) +"JP" = (/turf/unsimulated/floor{icon_state = "green"},/area/centcom/spawning) +"JQ" = (/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/spawning) +"JR" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/spawning) +"JS" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/spawning) +"JT" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/spawning) +"JU" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning) +"JV" = (/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) +"JW" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_northwest_lock";locked = 0;req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"JX" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1331;master_tag = "vox_west_control";req_one_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) +"JY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"JZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Ka" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Kb" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_northeast_lock";locked = 0;req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Kc" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1331;master_tag = "vox_east_control";req_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) +"Kd" = (/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/holding) +"Ke" = (/obj/structure/window/reinforced/holowindow/disappearing,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding) +"Kf" = (/obj/structure/window/reinforced/holowindow/disappearing,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Kg" = (/obj/structure/window/reinforced/holowindow/disappearing,/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding) +"Kh" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = newlist()},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Ki" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/spawning) +"Kj" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning) +"Kk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning) +"Kl" = (/obj/machinery/airlock_sensor{frequency = 1331;id_tag = "vox_west_sensor";pixel_x = 25},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Km" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331;id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Kn" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Ko" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Kp" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Kq" = (/obj/machinery/button/remote/blast_door{id = "skipjackshutters";name = "remote shutter control";req_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) +"Kr" = (/obj/machinery/airlock_sensor{frequency = 1331;id_tag = "vox_east_sensor";pixel_x = -25},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Ks" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 0;frequency = 1331;id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Kt" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding) +"Ku" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"Kv" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding) +"Kw" = (/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning) +"Kx" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning) +"Ky" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning) +"Kz" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"KA" = (/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning) +"KB" = (/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning) +"KC" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"KD" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent";tag_exterior_door = "vox_northwest_lock";frequency = 1331;id_tag = "vox_west_control";tag_interior_door = "vox_southwest_lock";pixel_x = 24;req_access = list(150);tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1331;id_tag = "vox_west_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"KE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"KF" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"KG" = (/obj/structure/bed/chair{dir = 1},/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/head/pirate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"KH" = (/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"KI" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_east_vent";tag_exterior_door = "vox_northeast_lock";frequency = 1331;id_tag = "vox_east_control";tag_interior_door = "vox_southeast_lock";pixel_x = -24;req_access = list(150);tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1331;id_tag = "vox_east_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"KJ" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"KK" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning) +"KL" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning) +"KM" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 4},/area/centcom/spawning) +"KN" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 4},/area/centcom/spawning) +"KO" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning) +"KP" = (/obj/structure/table/rack,/obj/item/ammo_magazine/d762,/obj/item/weapon/gun/projectile/dragunov,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"KQ" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"KR" = (/obj/structure/table/rack,/obj/random/melee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"KS" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 1},/area/centcom/spawning) +"KT" = (/obj/structure/window/reinforced/holowindow{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"KU" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_southwest_lock";locked = 0;req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"KV" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_southeast_lock";locked = 0;req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"KW" = (/obj/machinery/door/window/holowindoor{dir = 1;name = "Green Corner"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"KX" = (/obj/machinery/door/window/holowindoor{base_state = "right";icon_state = "right";name = "Green Team"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"KY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"KZ" = (/obj/machinery/megavendor,/turf/unsimulated/floor{icon_state = "vault";dir = 9},/area/centcom/spawning) +"La" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/material/harpoon,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/light/stealth,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lb" = (/turf/unsimulated/floor{icon_state = "plaque"},/area/centcom/spawning) +"Lc" = (/obj/item/seeds/potatoseed,/obj/item/seeds/potatoseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/weapon/material/minihoe,/obj/item/weapon/beartrap,/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Ld" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Le" = (/obj/structure/table/rack,/obj/random/energy_antag,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Lf" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/item/device/multitool,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lg" = (/obj/machinery/washing_machine,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lh" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Li" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/head/helmet/space/void/atmos,/obj/item/clothing/suit/space/void/atmos,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/light/hacker,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lj" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior";frequency = 1331;master_tag = "vox_west_control";pixel_x = -22;req_one_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lk" = (/obj/machinery/microwave{pixel_x = -1;pixel_y = 8},/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Ll" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior";frequency = 1331;master_tag = "vox_east_control";pixel_x = 22;req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lm" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"Ln" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"Lo" = (/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning) +"Lp" = (/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning) +"Lq" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Lr" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Ls" = (/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lt" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lu" = (/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning) +"Lv" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "wood_siding2"},/area/centcom/spawning) +"Lw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Lx" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Ly" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Lz" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"LA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"LB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"LC" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/holding) +"LD" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen";item_state = "boxinggreen"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"LE" = (/obj/structure/table/holotable,/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding) +"LF" = (/obj/machinery/status_display/arrivals_display,/turf/unsimulated/wall/riveted,/area/centcom/spawning) +"LG" = (/obj/structure/sign/nosmoking_2,/turf/unsimulated/wall/riveted,/area/centcom/spawning) +"LH" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/holding) +"LI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LK" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "wood_siding4"},/area/centcom/spawning) +"LL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/lavendergrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/sparsegrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LR" = (/obj/item/robot_parts/l_leg,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"LS" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "wood_siding8"},/area/centcom/spawning) +"LT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"LU" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/fullgrass,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"LW" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "wood_siding1"},/area/centcom/spawning) +"LX" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"LY" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"LZ" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Ma" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Mb" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit/improved,/obj/item/device/suit_cooling_unit/improved,/obj/item/weapon/rig/industrial/syndicate,/obj/item/weapon/pickaxe/jackhammer,/obj/item/weapon/pickaxe/jackhammer,/obj/item/weapon/pickaxe/jackhammer,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Mc" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Md" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Me" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Mf" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Mg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Mh" = (/obj/structure/table/standard,/obj/item/clothing/glasses/sunglasses{pixel_x = 4;pixel_y = 4},/obj/item/clothing/glasses/sunglasses{pixel_x = 1;pixel_y = 1;pixel_z = 0},/obj/item/clothing/glasses/sunglasses{pixel_x = -2;pixel_y = -2},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding) +"Mi" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding) +"Mj" = (/obj/structure/table/standard,/obj/item/clothing/ears/earmuffs{pixel_x = 4;pixel_y = 4},/obj/item/clothing/ears/earmuffs{pixel_x = 1;pixel_y = 1},/obj/item/clothing/ears/earmuffs{pixel_x = -2;pixel_y = -2},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding) +"Mk" = (/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding) +"Ml" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding) +"Mm" = (/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/holding) +"Mn" = (/obj/structure/holohoop,/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/holding) +"Mo" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Mp" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Mq" = (/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Mr" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Ms" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning) +"Mt" = (/obj/item/weapon/wrench,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Mu" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/item/weapon/crowbar,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Mv" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"Mw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"Mx" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"My" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning) +"Mz" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"MA" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"MB" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"MC" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) +"MD" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) +"ME" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"MF" = (/obj/structure/table/steel,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"MG" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"MH" = (/turf/unsimulated/floor{icon_state = "bluecorner"},/area/centcom/spawning) +"MI" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning) +"MJ" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"MK" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"ML" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"MM" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"MN" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 8},/area/centcom/spawning) +"MO" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning) +"MP" = (/obj/machinery/light/small{dir = 1},/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"MQ" = (/obj/machinery/bodyscanner{allowed_species = list("Human","Skrell","Unathi","Tajara","M'sai Tajara","Zhan-Khazan Tajara","Vaurca Worker","Vaurca Warrior","Diona","Vox");dir = 8;icon_state = "body_scanner_0";tag = "icon-body_scanner_0 (EAST)"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"MR" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/holding) +"MS" = (/obj/structure/flora/pottedplant/random,/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning) +"MT" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/skipjack_station/start) +"MU" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/skipjack_station/start) +"MV" = (/obj/structure/flora/pottedplant/random,/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning) +"MW" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "odinasshutters";name = "Blast Shutters";opacity = 0},/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning) +"MX" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "odinasshutters";name = "Blast Shutters";opacity = 0},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning) +"MY" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/northright{req_access = list(109)},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "odinasshutters";name = "Blast Shutters";opacity = 0},/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning) +"MZ" = (/obj/machinery/status_display/arrivals_display{pixel_y = -32},/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning) +"Na" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding) +"Nb" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2";dir = 8},/area/wizard_station) +"Nc" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 9},/area/wizard_station) +"Nd" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 5},/area/wizard_station) +"Ne" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"Nf" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/skipjack_station/start) +"Ng" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northleft,/obj/machinery/door/window/southright,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding) +"Nh" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/obj/item/weapon/gun/energy/laser/practice,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/holding) +"Ni" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/obj/item/weapon/gun/energy/laser/practice,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/holding) +"Nj" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Nk" = (/obj/machinery/door/airlock/centcom{name = "Security Checkpoint";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Nl" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station) +"Nm" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{icon_state = "bluecorner";dir = 4},/area/centcom/spawning) +"Nn" = (/obj/machinery/button/remote/blast_door{id = "odinaslockdown";name = "Arrivals Lockdown";pixel_x = 8;pixel_y = 28;req_access = list(109)},/obj/machinery/button/remote/blast_door{id = "odinasshutters";name = "Security Shutters";pixel_x = -8;pixel_y = 28},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning) +"No" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"Np" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/skipjack_station/start) +"Nq" = (/obj/structure/table/standard,/obj/item/weapon/legcuffs,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) +"Nr" = (/obj/structure/table/standard,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) +"Ns" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Nt" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"Nu" = (/obj/machinery/door/airlock/centcom{name = "Unisex Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"Nv" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack/satchel/withwallet,/turf/unsimulated/floor{dir = 9;icon_state = "carpetside"},/area/wizard_station) +"Nw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{on = 0;pixel_x = -3;pixel_y = 8},/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/wizard_station) +"Nx" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "\[center]\[b]LIST OF SPELLS AVAILABLE\[/b]\[/center]\[br]\[br]Magic Missile:\[br]This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.\[br]\[br]Fireball:\[br]This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.\[br]\[br]Disintegrate:\[br]This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.\[br]\[br]Disable Technology:\[br]This spell disables all weapons, cameras and most other technology in range.\[br]\[br]Smoke:\[br]This spell spawns a cloud of choking smoke at your location and does not require wizard garb.\[br]\[br]Blind:\[br]This spell temporarly blinds a single person and does not require wizard garb.\[br]Forcewall:\[br]This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.\[br]\[br]Blink:\[br]This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.\[br]\[br]Teleport:\[br]This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.\[br]\[br]Mutate:\[br]This spell causes you to turn into a hulk, and gain telekinesis for a short while.\[br]\[br]Ethereal Jaunt:\[br]This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.\[br]\[br]Knock:\[br]This spell opens nearby doors and does not require wizard garb.\[br]";name = "List of Available Spells (READ)"},/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/wizard_station) +"Ny" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/holding) +"Nz" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/holding) +"NA" = (/obj/item/weapon/beach_ball/holoball,/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/holding) +"NB" = (/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/holding) +"NC" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/spawning) +"ND" = (/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/spawning) +"NE" = (/turf/unsimulated/wall/riveted,/area/wizard_station) +"NF" = (/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/spawning) +"NG" = (/obj/structure/filingcabinet,/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning) +"NH" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NI" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"NJ" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/retractor,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"NK" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NL" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NM" = (/obj/structure/cryofeed,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NN" = (/obj/item/modular_computer/console/preset/command,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"NO" = (/obj/machinery/cryopod,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NP" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NQ" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NR" = (/obj/machinery/status_display/arrivals_display{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"NS" = (/turf/unsimulated/floor{dir = 8;icon_state = "carpetside"},/area/wizard_station) +"NT" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/weapon/FixOVein,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"NU" = (/obj/structure/closet/coffin,/turf/unsimulated/floor{dir = 4;icon_state = "carpetside"},/area/wizard_station) +"NV" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{dir = 2;icon_state = "carpetsymbol"},/area/wizard_station) +"NW" = (/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/holding) +"NX" = (/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/holding) +"NY" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/spawning) +"NZ" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) +"Oa" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/spawning) +"Ob" = (/obj/machinery/door/airlock/centcom{name = "Staff Only";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Oc" = (/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/spawning) +"Od" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_setup";name = "docking port controller";pixel_x = 25;pixel_y = 0;req_one_access = list(13);tag_door = "centcom_arrivals_airlock"},/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning) +"Oe" = (/obj/machinery/suit_cycler/wizard,/turf/unsimulated/floor{dir = 10;icon_state = "carpetside"},/area/wizard_station) +"Of" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 32;subspace_transmission = 1;syndie = 1},/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/turf/unsimulated/floor{dir = 6;icon_state = "carpetside"},/area/wizard_station) +"Og" = (/turf/unsimulated/floor{dir = 2;icon_state = "carpetside"},/area/wizard_station) +"Oh" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) +"Oi" = (/turf/unsimulated/floor{icon_state = "ramptop";dir = 2},/area/centcom/spawning) +"Oj" = (/obj/structure/closet/wardrobe{name = "Officer's Wardrobe"},/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/officer,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning) +"Ok" = (/obj/structure/closet/wardrobe{name = "Officer's Wardrobe"},/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/officer,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning) +"Ol" = (/obj/structure/simple_door/iron{name = "Interdimensional Prison Cell"},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Om" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"On" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3;pixel_y = 3},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"Oo" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3;pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) +"Op" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 2},/area/centcom/spawning) +"Oq" = (/obj/machinery/door/airlock/centcom{name = "The Big Empty";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Or" = (/obj/structure/urinal{dir = 4;icon_state = "urinal";pixel_x = -32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"Os" = (/obj/structure/toilet{dir = 8},/obj/machinery/button/remote/airlock{id = "odin_stall2";name = "Door Bolt Control";pixel_x = 25;pixel_y = 8;specialfunctions = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"Ot" = (/obj/structure/holohoop{dir = 1},/turf/unsimulated/floor{icon_state = "green"},/area/centcom/holding) +"Ou" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = "odin_stall2";name = "Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning) +"Ov" = (/turf/unsimulated/wall/fakeglass{dir = 1;icon_state = "fakewindows"},/area/wizard_station) +"Ow" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Ox" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Oy" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Oz" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2";dir = 1},/area/wizard_station) +"OA" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable.";name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OB" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OC" = (/turf/unsimulated/wall/riveted,/area/tdome) +"OD" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/tdome) +"OE" = (/obj/structure/target_stake,/obj/item/target,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/holding) +"OF" = (/obj/structure/target_stake,/obj/item/target,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/holding) +"OG" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OH" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"OI" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"OJ" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OK" = (/obj/structure/table/rack,/obj/item/clothing/gloves/green,/obj/item/clothing/gloves/rainbow,/obj/item/clothing/gloves/blue,/obj/item/clothing/gloves/orange,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/red,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OL" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas/cyborg,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/mask/gas/plaguedoctor,/obj/item/clothing/mask/luchador/rudos,/obj/item/clothing/mask/luchador/tecnicos,/obj/item/clothing/mask/pig,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OM" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"ON" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"OO" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"OP" = (/obj/machinery/camera/network/crescent{c_tag = "Shuttle West";dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding) +"OQ" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OR" = (/obj/structure/table/rack,/obj/item/clothing/glasses/eyepatch,/obj/item/clothing/glasses/monocle,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OS" = (/obj/structure/table/rack,/obj/item/clothing/mask/smokable/pipe/cobpipe,/obj/item/clothing/mask/smokable/pipe,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigar,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OT" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome";name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"OU" = (/obj/structure/table/rack,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/obj/item/xenos_claw,/obj/item/device/megaphone,/obj/item/weapon/material/knife/ritual,/obj/item/device/flashlight/lantern,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OV" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/cultpack,/obj/item/weapon/storage/backpack,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"OW" = (/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/tdome) +"OX" = (/turf/unsimulated/floor{icon_state = "neutral";dir = 8},/area/tdome) +"OY" = (/turf/unsimulated/floor{icon_state = "neutral";dir = 4},/area/tdome) +"OZ" = (/obj/structure/cult/tome,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Pa" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome) +"Pb" = (/obj/machinery/librarycomp,/obj/structure/table/woodentable,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Pc" = (/obj/machinery/vending/magivend,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Pd" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/woodentable,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Pe" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/tdome) +"Pf" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/tdome) +"Pg" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{dir = 9;icon_state = "carpetside"},/area/wizard_station) +"Ph" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/wizard_station) +"Pi" = (/obj/structure/table/woodentable,/obj/item/organ/heart,/turf/unsimulated/floor{dir = 1;icon_state = "carpetside"},/area/wizard_station) +"Pj" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/tdome) +"Pk" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/tdome) +"Pl" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"Pm" = (/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"Pn" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"Po" = (/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/tdome) +"Pp" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{dir = 8;icon_state = "carpetside"},/area/wizard_station) +"Pq" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{dir = 4;icon_state = "carpetside"},/area/wizard_station) +"Pr" = (/obj/structure/table/woodentable,/obj/item/toy/figure/wizard,/turf/unsimulated/floor{icon_state = "carpet";dir = 2},/area/wizard_station) +"Ps" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome";name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"Pt" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/candle_box,/turf/unsimulated/floor{icon_state = "carpet";dir = 2},/area/wizard_station) +"Pu" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/tdome) +"Pv" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{dir = 10;icon_state = "carpetside"},/area/wizard_station) +"Pw" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{dir = 6;icon_state = "carpetside"},/area/wizard_station) +"Px" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{dir = 2;icon_state = "carpetside"},/area/wizard_station) +"Py" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/obj/machinery/door/blast/regular{id = "crescent_thunderdome";name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/tdome) +"Pz" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"PA" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"PB" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PC" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PD" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PE" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) +"PF" = (/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PG" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PH" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) +"PI" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PJ" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"PK" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"PL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"PM" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"PN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"PO" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 1},/area/wizard_station) +"PP" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) +"PQ" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PR" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PS" = (/turf/unsimulated/wall/riveted,/area/tdome/tdome2) +"PT" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"PU" = (/turf/unsimulated/wall/riveted,/area/tdome/tdome1) +"PV" = (/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station) +"PW" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome2) +"PX" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/floor,/area/tdome) +"PY" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/tdome) +"PZ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome1) +"Qa" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station) +"Qb" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"Qc" = (/obj/machinery/igniter,/obj/structure/banner,/turf/simulated/floor,/area/tdome) +"Qd" = (/turf/simulated/floor,/area/tdome) +"Qe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/tdome) +"Qf" = (/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"Qg" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"Qh" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"Qi" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"Qj" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) +"Qk" = (/obj/structure/cult/pylon,/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station) +"Ql" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) +"Qm" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"Qn" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) +"Qo" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) +"Qp" = (/obj/structure/cult/talisman,/obj/effect/decal/remains/human,/obj/effect/landmark{name = "Teleport-Scroll"},/obj/item/weapon/paper{info = "Your sacrifice has not gone unnoticed. Today your imprisonment ends - be free, and do not contact us again so idly.";name = "Letter From a Friend"},/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station) +"Qq" = (/obj/structure/cult/pylon,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station) +"Qr" = (/obj/structure/bed/chair,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve) +"Qs" = (/turf/simulated/floor/bluegrid,/area/tdome) +"Qt" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (EAST)";icon_state = "fakewindows2";dir = 4},/area/wizard_station) +"Qu" = (/turf/unsimulated/floor{name = "plating";icon_state = "lava"},/area/wizard_station) +"Qv" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome) +"Qw" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/bluegrid,/area/tdome) +"Qx" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe";name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome2) +"Qy" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome) +"Qz" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome) +"QA" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe";name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome1) +"QB" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor,/area/tdome) +"QC" = (/obj/effect/gibspawner/human,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{name = "plating";icon_state = "lava"},/area/wizard_station) +"QD" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome) +"QE" = (/obj/machinery/door/blast/regular{id = "thunderdomegen";name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"QF" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/tdome) +"QG" = (/obj/machinery/door/blast/regular{id = "thunderdome";name = "Thunderdome Blast Door"},/turf/simulated/floor,/area/tdome) +"QH" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 10},/area/wizard_station) +"QI" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 6},/area/wizard_station) +"QJ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"QK" = (/obj/effect/landmark{name = "tdome2"},/obj/machinery/camera/network/thunder{c_tag = "Thunderdome - Red Team";invisibility = 101},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) +"QL" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/tdome) +"QM" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"QN" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/tdome) +"QO" = (/obj/machinery/flasher{id = "flash";name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome) +"QP" = (/obj/effect/landmark{name = "tdome1"},/obj/machinery/camera/network/thunder{c_tag = "Green Team";invisibility = 101},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) +"QQ" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena";invisibility = 101},/turf/simulated/floor/bluegrid,/area/tdome) +"QR" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor,/area/tdome) +"QS" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor,/area/tdome) +"QT" = (/obj/machinery/door/blast/regular{id = "thunderdomegen";name = "General Supply"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"QU" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration";req_access = list(102)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"QV" = (/obj/machinery/door/blast/regular{id = "thunderdomehea";name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"QW" = (/turf/unsimulated/floor{icon_state = "redcorner";dir = 8},/area/tdome) +"QX" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration";req_access = list(102)},/turf/simulated/floor,/area/tdome) +"QY" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"QZ" = (/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Ra" = (/obj/machinery/atmospherics/valve,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rb" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rc" = (/obj/structure/bed/chair{dir = 1},/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rd" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Re" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/sleeping_agent{pixel_x = 1},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rf" = (/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rg" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rh" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"Ri" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rj" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rk" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rl" = (/obj/machinery/computer/pod{id = "thunderdomegen";name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rm" = (/obj/machinery/computer/pod{id = "thunderdomeaxe";name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rn" = (/obj/machinery/computer/pod{id = "thunderdomehea";name = "Thunderdome Heavy Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Ro" = (/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rp" = (/obj/machinery/computer/pod{id = "thunderdome";name = "Thunderdome Blast Door Control"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rq" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rr" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rs" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning) +"Rt" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Ru" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rv" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin) +"Rw" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/sign/double/map/left{pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) +"Rx" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom) + +(1,1,1) = {" +aaacabaeadagafahaaajaialakanamaoafagaiabaeahaladanajaoakahaiapaqarasatauavawaxazayaBaAaDaCaFaEaHaGaJaIaLaKaxazayaBaAaDaCaFaEaHaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaOaOaOaOaOaOaOaOaOaOaOaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaP +aiaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebabgbdaYbbacauavawbhbibjbkaAblbmbnaqarasatauavawbhbibjbkboblbmbnaqarasatauaLaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaObpbqaObpbraObsbtaObpbqaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbxbwbwbwbwbwbwbybzbAbzbAbzbzbAbzbAbzbybBbCbCbCbCbCbCbCbCbCbybDbEbFbFbFbFbFbFbFbFbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbKbLbLbLbLbLbMbN +anaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaSbgaXbeadarasatauavawbhazbjbkboblbmbnaqarasasatauavbhbibjbkboblbmbnaqaraGaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaObObtaObObPaObObqaObObQaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbwbwbwbRbwbybSbTbSbTbSbTbSbTbSbTbybHbHbHbHbHbHbHbHbHbHbybDbUbVbVbVbVbVbVbVbVbybGbWbGbGbGbGbGbGbWbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbXbDbDbDbDbDbYbN +aeaYaWbgaXbcbaaTbeaTaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfaVaSaTaUahbhbibjbkboblbmaFaqarasatauavawbhbiawbhbibjbmbnaqarasatauavawbhazaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaOaOaOaOaOaOaOaOaOaOaOaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbRbwbwbwbwbwbwbwbwbybTbSbZcacbcacbccbTbSbybHbHbHbHbHbHbHbHbHbHbybDcdbVbFcebFbVcfcgchbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbHcibXbDbDbDbDbDbYbN +akaXbfaSaTaZaWbaaUbabdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcaYaVbabdafbmbnaqarasatauaLawbhbibjbkboblbmbnatauavawauavawbhbibjbkboblbmaFaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOcjbQaObpbQaOckbqaObpbtaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbxbwbwbwbwbycacbclbwcmcmcncobSbTbycpcpcpcpcpcpcpcpcpcqbybDcdcrcsctcucvcwcxcybybGbGbGbWbGbGbWbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbXbDbDbDbDbDbYbN +aoaTbcaVbabbbfaWbdaWbgcAczcCcBcEcDcGcFcHaVaWaUbaaSaZaXaYaWbgabbhbibjbkboblbmaFaqarasatauavawbhbibjbkboblbmbnaqarasatauavawbhazaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaObObqcIbObqaObOcJaObOcKaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbxbwbwbwbxbwbwbwbycncncncncLcLcncMbTbSbybDbDcOcNcNcNcNcPbDcQbybDcdcOcNcNcNcPcwcRcSbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbXbDbDbDbDbDbYbN +acbaaZaYaWbebcbfbgbfcBcTcUcUcUcUcUcUcUcFcGaVbdaWaVbbaTaXbfaSajasatauavawbhbiaybkboblbmbnaqarasataqarasatbibjbkboblbmbnaqarasaJaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaOaOaOaOaOaOaOaOaOaOaOaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbwbwbwbwbwbycncncncncLcLcncMbTbSbybDbDcVcWcWcWcWcXbDcQbybDcdcYcZdacZdbcwcRcSbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJdcbDbDbDbDbDddbN +adaWbbaXbfaUaZbcaSdfdecUcUcUcUcUcUcUcUcUcDdgbgbfaYbebaaTbcaVagboblbmbnaqarasaJauavawbhbibjbkbobjawasarbiavatauavawbhbibjbkboaDaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbRbwbwbwbxbydhdjdibwcmcmcncobSbTbybDbDcVcWcWcWcWcXbDcQbybDcddkdldadldmcwcRcSbybGbGbGbWbGbGbWbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJdcbDbDbDbDbDddbN +ahbfbeaTbcbdbbaZaVcAcUcUcUcUcUcUcUcUcUcUcUdnaSbcaXaUaWbaaZaYambnaqarasatauavaKbhbibjbkboblbmbnawaqarasatboawbhbibjbkboblbmbnaEaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbRbwbwbwbwbwbwbwbybTbSdodhdjdhdjdpbTbSbybDbDcVcWcWcWcWcXbDcQbybDdrdqdadadadscwcRcSbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbHdtdcbDbDbDbDbDddbN +afbcaUbaaZbgbebbaYcTcUcUcUcUcUcUcUcUcUcUcUcHaVaZaTbdbfaWbbaXalbjbkboblbmbnaqaHasatdvdudxdwdzdydAdydBdAdDdCdCdEatauavawbhbibjaBaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbwbwbwbwbwbybSbTbSbTbSbTbSbTbTbSbybDbDdFdGdGdGdGdHbDcQbybDcddkdldldldmcwdIdJbybGbWbGbGbGbGbGbGbWbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJdcbDbDbDbDbDddbN +abaZbdaWbbaSaUbeaXcBcUcUcUcUcUcUcUcUcUcUcUdKaYbbbabgbcbfbeaTaaatauavawbhbibjaBbobldLdMdNdOdPdQdRdSdTdUdVdWdXdxdwdLbnaqarasataIaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububxbwbwbwbRbwbwbwbwbRbybzbAbzbAbzbzbAbzbAbzbydYbDbDbDbDbDbDbDbDdZbybDbEeaebebebeccwbFbFbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJedeeeeeeeeeeefbN +ajbbbgbfbeaVbdaUaTdecUcUcUcUcUcUcUcUcUcUcUcGaXbeaWaSaZbcaUbaaibibjbkboblbmbnaEarasegdSdTdUdVehdMdNdOdPdQdRdSdTdUegauavawbhbiayaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPejejejejejejejejejejaPejejejejejejejejejejaPejejejejejejejejejejaPekekekekekekekekekekaPekekekekekekekekekekaPekekekekekekekekekekaPekekekekekekekekekekaP +agbeaSbcaUaYbgbdbaelcUcUcUcUcUcUcUcUcUcUcUemaTaUbfaVbbaZbdaWanarasatauavawbhazbjbkdAendUdTehdXdVdWdXeneoehdMdNdOdAblbmbnaqaraGaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqeqeqeqeqeqeqbybVbVbVbVbVbVbVbVbVerbybHbIbJeteseteuevesevbyexeweyexezexeweyexezbybHbIbJeBeAeAeAeAeAeCbyeDeDbHbHbHbHbHbHbHbHbN +amaUaVaZbdaXaSbgeEeFcUcUcUcUcUcUcUcUcUcUcUeHeGbdbcaYbebbbgbfaeavawbhbibjbkboaDbmbneIdSdTdUdVdOeneoehdMdNdOdPdQdReIarasatauavaKaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepeJepepepepeJepbyeqeKeqeqeqeqeKeqeqeqbybVbVeMeLeLeLeNbVbVbVbybHbIbJdcbDdcbDddbDddbyezeOePezexezexeOeOexbybHbIbJdcbDbDbDbDbDddbybHbHbHbHeQeQeQbHbHbHbN +albdaYbbbgaTaVaSdfcUcUcUcUcUcUcUcUcUcUcUcUcUeRbgaZaXaSaUaVaZaobkboblbmbnaqaraGataududMdNdOdPdTdTdUdVdWdXeneoehdMduawbhbibjbkaAaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqeqeqeqeqeSeqbybVbVbFbFbFbFbFbVbVbVbybHbHcidcbDesesesbDddbyexezexewexexeUeTewexbybHbHcidcbDbDbDbDbDddbybHbHbHeVeWeWeWbHbHbHbN +aabgaXbeaSbaaYaVeXcUcUcUcUcUcUcUcUcUcUcUcUcUcDaSbbaTbdbdaYbbacblbmbnaqarasataIavawdwdWdXeneodVehdOdPdQdRdSdTdUdVdwbibjbkboblaCaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepeJepepepepeJepepepbyeqeqeYeqeSeqeqeqeqeqbyeZeZeZeZeZeZeZeZeZbHbybHbIbJdcbDbDbDbDbDddbyewexezeOfaewexezeOezbybHbIbJdcbDbDbDbDbDddbybHeQfbetesesbDfceQbHbN +aiaSaTaUaVaWaXaYcAcUcUcUcUcUcUcUcUcUcUcUcUcUcHaVbebabgbgaXbeadawbhbibjbkboblaCbnaqdCdTdUdVdWdPdSdTdUdVdWdXendwdzdCasatauavawaxaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqfdeqeqeqeqfdeqbydZfefffffffffffgeZbHbybHbIbJfhfififjfififkbyexeyexeweyexeyflewfmbybHbIbJedeeeeeeeeeeefbybHeQfbdcfofnbYfceQbHbN +anaVbabdaYbfaTaXcTcUcUcUcUcUcUcUcUcUcUcUcUcUdKaYaUaWaSaSaTaUahboblbmbnaqarasaJauavdxdwdzdydBdAdwdCdEegdvdDegdvavawbhbibjbkboaDaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqeqeqeqeqeqeqbydZcVcWcWcWcWcWcXeZbHbybHbIbJbKbLbLbLbLbLbMbyezfmfpfpfqeyfmfpfpfrbybHbIbJftfsfsfsfsfsfubybHeQfbdcfvfwbYfceQbHbN +aeaYaWbgaXbcbaaTcBcUcUcUcUcUcUcUcUcUcUcUcUcUcGaXbdbfaVaVbabdafasatauavawbhbiaybkboblbmbnaqarasblbmbnaqarasbjbkboblbmbnaqarasaJaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepeJepepepepeJepbyeqeqeqeqeKeqeYeqeqeKbyeZcVcWcWcWcWcWcXeZbHbybHbIbJbXbDbDbDbDbDbYbyfmfrfxfxfyfpfrfxfxfxbybHbIbJbXbDbDbDbDbDbYbybHeQfbbDfzfzfAfceQbHbN +akaXbfaSaTaZaWbadecUcUcUcUcUcUcUcUcUcUcUcUcUemaTbgbcaYaYaWbgabbjbkboblbmbnaqaHasatauavawbhbibjbkboblbmbnaqarasatauavawbhbibjaBaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyfBeqeqeqeqfBeqeqeqeqbyeZcVcWcWcWcWcWcXeZbHbybHbHdtbXbDfzfzfzbDbYbyfrfxfxfxfxfxfxfxfxfxbybHbHdtbXbDbDbDbDbDbYbybHbHbHfCfCfCfDbHbHbHbN +aoaTbcaVbabbbfaWelcUcUcUcUcUcUcUcUcUcUcUcUcUeHbaaSaZaXaXbfaSajauavawbhbibjbkaAblbmbnaqarasatauavawbhbibjbkboblbmbnaqarasatauaLaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepeJepepepepeJepepepbyeqfdeqeYeqeqfdeqeYeqbyeZdFdGdGdGdGdGdHeZbHbybHbIbJbXbDbXbDbYbDbYbyfxfxfxfxfxfxfxfxfxfxbybHbIbJbXbDbDbDbDbDbYbybHbHbHeQeQeQbHbHbHbHbN +acbaaZaYaWbebcbfeFcUcUcUcUcUcUcUcUcUcUcUcUcUfEaWaVbbaTaTbcaVagbnaqarasatauavaKbhbibjbkboblbmbnaqarasatauavawbhbibjbkboblbmbnaEaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqfBeqeqeqeqfBbyeZeZeZeZeZeZeZeZeZbHbybHbIbJfFfzfFfGfAfzfAbyfxfxfxfxfxfxfxfxfxfxbybHbIbJfHfIfIfIfIfIfJbybHbHbHbHbHbHbHbHfKfKbN +adaWbbaXbfaUaZbccCcUcUcUcUcUcUcUcUcUcUcUcUcUcFbfaYbebabaaZaYamblbmbnaqarasataIavawbhbibjbkboblbmbnaqarasatauavawbhbibjbkboblaCaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaP +ahbfbeaTbcbdbbaZfNcUcUcUcUcUcUcUcUcUcUcUcUcUfObcaXaUaWaUaVaZapavawbhbibjbkboaDbmbnaqarasatauavawbhbibjbkboblbmbnaqarasatauavaKaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +afbcaUbaaZbgbebbczcUcUcUcUcUcUcUcUcUcUcUcUcUdnaZaTbdbfaUaVaZaobibjbkboblbmbnaEarasatauavawbhbibjbkboblbmbnaqarasatauavawbhbiayaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +abaZbdaWbbaSaUbefPcUcUcUcUcUcUcUcUcUcUcUcUcUfQbbbabgbcbdaYbbacatauavawbhbibjaBaAaDaCaFaEaHaGaJaIaLaKaxazayaBaAaDaCaFaEaHaGaJaIaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +ajbbbgbfbeaVbdaUfRcUcUcUcUcUcUcUcUcUcUcUcUcUcEbeaWaSaZbgaXbeadaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +agbeaSbcaUaYbgbdfScUcUcUcUcUcUcUcUcUcUcUcUcUfTaUbfaVbbaSaTaUahaSaaacabaeadagafahaaajaialakanamaoafagaiabaeahaladanajaoaSbcaMfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +amaUaVaZbdaXaSbgeRdKdKcGfVcUcUcUcUcUfVcFfOdKeGbdbcaYbeaVbabdafaVaiaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebaacaVaZaMfUbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +albdaYbbbgaTaVaSbfaXbceRemfVfWfXfYfZcHfQbbaSaWbgaZaXaUaYaWbgabaYanaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWadaYbbaMfUaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aabgaXbeaSbaaYaVbcaTaZbfeHcGeRfEfQeGdKaXbeaVbfaSbbaTbdaXbfaSajaXaeaYaWbgaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfahaXbeaMfUbfaYbebfbfaYbebfaYbebfaYbebfaYbebfbfaYbebfaYbebfaYbebfaYbebfaYbebfbfaYaNfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aiaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebabgaTbcaVagaTakaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcafaTaUaMfUbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgagbgbgbgbgbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +anaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaSbaaZaYambaaoaTbcaVbabbbfaWbdaZbgaUaYaSbeaXbfbbbgbcaVaWaUbaaSaZabbabdaMfUbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgegdgggfghgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aeaYaWbgaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfaVaWbbaXalaWacbaaZaYaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdaWaVbbajaWbgaMfUbgbbbbbabgbbbabgbbbabgbbbabgbbbabgbgbbbbbabgbbbabgbbbabgbbbabgbbbabgaUbbfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigjgjgjgigcgcgcgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +akaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcaYbfbeaTaabfadaWbbaXbfaUaZbcaSglgkgngmgpgogrgqgsaVbbaXbcbgbfaYbeagbfaSaMfUaSbebeaWaSbeaWaSbeaWaSbeaWaSbeaWaSaSbebeaWaSbeaWaSbeaWaSbeaWaSbeaWaSbebefUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigtgtgtgigcgvgugcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aoaTbcaVbabbbfaWbdaZbgaUaYaSbeaXbfbbbgbcaVaWaUbaaSaZaXbcaUbaaibcahbfbeaTbcbdbbaZgwgxgygzgAgBgCgDgEgogFbeaTaZaSbcaXaUambcaVaMfUaVaUaUbfaVaUbfaVaUbfaVaUbfaVaUbfaVaVaUaUbfaVaUbfaVaUbfaVaUbfaVaUbfaVaUaUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigGgHgIgigcgcgcgcgcgcgcgcgcgcgcgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +acbaaZaYaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdaWaVbbaTaZbdaWanaZafbcaUbaaZbgbebbgFgBgJgAgEgKgLgMgNgOgPaUbabbaVaZaTbdalaZaYaMfUaYbdbdbcaYbagQgQgQgQgQgQbagQgQgQbababagQgQgQbagQgQgRgSgFgRbcaYbdbcaYbdbdfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigGgHgIgigTgUgVgWgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +adamanabalakaiaaadaeahacajafaoagaiakahanabaaacalafaeaganacalhcbbabaZbdaWbbaSaUbegPgMgNgDhdgygEgAgChehfbdaWbeaYbbbabgaabbaXaMfUaXbgbgaZaXbagQhggQgQhggQbagQhggQgQgQgQgQhggQbagQhghhhhhihhaZaXbgaZaXbgbgfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigGgHgIgihjgUgYgYgXgYgUgYhbhbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +ahbeaTaZaSbcaXaUbcbeaTaZaSbcaXaUbcaXaUbeaTaZaSbcaXaUamaNaNaNaNbeajbbbgbfbeaVbdaUhfgAgCgOgJgBhdgDgzgLgQbgbfaUaXbeaWaSaibeaTaMfUaTaSaSbbaTbagQhghghghggQgQgQhghghghkhlhlhmgQgQgQhkhlhlhmhhbbaTaSbbaTaSaSfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigHgHgHhnhohpgYgYgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +afaUbabbaVaZaTbdaZaUbabbaVaZaTbdaZaTbdaUbabbaVaZaTbdalaNaNaNaNaUagbeaSbcaUaYbgbdgQgDgzhegNgMgJgOgKgEhqaSbcbdaTaUbfaVanaUbaaMfUbaaVaVbebabagQhghghghggQgQhghghghghrhshshthggQgQhrhshshthhbebaaVbebaaVaVfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigHgHgHhnhohpgYgYgYgYhugYhbhbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaNaNaNaNaNaNaNaNaNaNaNaN +abbdaWbeaYbbbabgbbbdaWemhwhxgrcFbbbabgbdaWbeaYbbbabgaaaNaNaNaNbdamaUaVaZbdaXaSbghqgOgKgLgCgAgNhegyhdhyaVaZbgbabdbcaYaebdbfaMfUaWaYaYaUaWbagQhghghghggQgQhghghghghzhAhAhBhggQgQhzhAhAhBhhaUaWaYaUaWaYaYfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgihCgHhDgihjgUgYgYgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +ajbgbfaUaXbeaWaSbebgbfeHhFhGhHfObeaWaSbgbfaUaXbeaWaSaiaNaNaNaNbgalbdaYbbbgaTaVaShyhIgygEgzgDgCgLgBgsgSaYbbaSaWbgaZaXakbgbcaMfUbfaXaXbdbfbagQhghghkhlhlhmhghghghghghJhKhghghghghghJhKhghhbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbhLgihMgihNgTgUgYgYgXgYgUgYhbhbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +agaSbcbdaTaUbfaVaUaSbcfEhOhPhQdnaUbfaVaSbcbdaTaUbfaVanaNaNaNaNaSaabgaXbeaSbaaYaVhIgqgKgOgKgOgzgKgOgohRaXbeaVbfaSbbaTaoaSaZaMfUbcaTaTbgbcbagQhghghrhshshthghghghghkhShThkhghghghkhShThkhhbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbhUhLhVhNhUgTgUgYgYgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +amaVaZbgbabdbcaYbdaVaZcFhWhXhYfQbdbcaYaVaZbgbabdbcaYaeaNaNaNaNaVaiaSaTaUaYhZgmibiagKgBgLgBgLgygBgLgDgogogRibaZaVbebaacaVbbaMfUbaaSaZbaaZbagQhghghzhAhAhBhghghghghrhlichrhghghkhrhlichrhhaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +alaYbbaSaWbgaZaXbgaYbbfOhHidiecEbgaZaXaYbbaSaWbgaZaXakaNaNaNaNaYanaVbabdaXgSgDgMhdgBgLgCgKgOgBgNgOgKgJgDgDgmbbaYaUaWadaYbeaMfUaWaVbbaWbbbagQhkhlhlhmhKhghghghghghghghghghghghrhshshthihhaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEaNaNaNaNaNaNaNaNaNhEaNaNaNaNhEhEhEhEhEhEhEhEhEhEaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aaaXbeaVbcaTaZbfaUaVbcfTdKcDeHcGaWbdaYbaaZaVbfaSbbaTaoaNaNaNaNaXaeaYaWbgaThRgDgAgJgNgOgzgBgLgMgCgDgygNgOgzgrbeaXbdbfahaXaUaMfUbfaYbebfbebagQhrhshshthThkhkhlhlhmhlhlhmhghghghzhAhAhBhihhaYbebfaYbeaNbffUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNhEaNaNaNaNifaNaNhEhEaNaNaNihigijiiaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aibbaUaYaSbeaVbgaTaYaSbeaVbgaTaYbdbaaZaUaVaYbcaVbebaacaNaNaNaNaTakaXbfaSbaikgOgDgNgChegKgDgJgAgzgLgBgChegKilaUaTbgbcafaTbdaMfUbfaYbebfbegQgQhzhAhAhBichrhrhshshthshshthghghghghJhKhghihhgFbebfaYbeaNbffUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNhEaNaNimaNaNaNaNaNaNaNinaNioipaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +anbebdaXaVaUaYaSbaaXaVaUaYaSbaaXbgaWbbbdaYaXaZaYaUaWadaNaNaNaNbaaoaTbcaVaWiqhegOgCgzgLgygOgNgDgKgEgMgzgLgyhZbdbaaSaZabbabgaMfUbfaYbebfbegQhghghJhKhghghghzhAhAhBhAhAhBhghghghkhShThkhihigFbebfaYbeaNbffUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNhEhEhEhEaNaNirisaNaNaNaNaNaNaNiraNinitiuaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aeaUbgaTaYfEiviwilfTaYbdaXaVaWaTaScDiqixibfTbbaXbdbfahaNaNaNaNaWacbaaZaYbfgsgLhegzgKgEgBhegCgOgyhdgAgKgEgBhIbgaWaVbbajbfaSaMfUbcaXaUbcaUgQhghkhShThkhkhlhlhmhKhghJhKhghghghghrhlichrhihigPaUbcaXaUaNbcfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNiyhEhEhEhEaNizaNaNaNaNaNaNaNaNaNisaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +akbdaSbaaXcFiAiBiCeGaXbgaTaYbfbaaVcHiDiEiFeGbeaTbgbcafaNaNaNaNbfadaWbbaXbcgogEgLgKgyhdgMgLgzhegBgJgDgyhdgMgqaSbfaYbeagaNaVaMfUbgbbbbbabggQgQhrhlichrhrhshshthThkhShThkhghghghghghihihihhgQbgbbbabgaUbbfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNiGiHhEhEhEaNisaNifaNiraNaNaNaNaNaNaNaNaNaNaNaNaNaNhEaNaNaNhEhEhEaNhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aobgaVaWaTfOiIiJiKeRaTaSbaaXbcaWaYdKiLiMiNeRaUbaaSaZabaNaNaNaNbcahbfbeaThRgnhdgEgygBgJgAgEgKgLgMgNgOgBgJgAiagwbcaXaUambcaYaMfUaSbebeaWaSbagQgQgQgQgQhzhAhAhBichrhlichrhghghghggQhhhhhhhhaWaSbeaWaSbebefUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNhEhEhEiPiOiPhEhEaNaNaNiGiQaNaNaNiraNifiRiGaNiSiSiShEhEaNaNaNaNaNaNhEaNaNhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +acaSaYbfbdeRiTiUiVfOaYbfbdaWaVbbaWdniWiEiXcDbdaWaVbbajaNaNaNaNaZafbcaUbaikgzgJhdgBgMgNgDhdgygEgAgChegMgNgDhdgFaZaTbdalaZaXaMfUaVaUaUbfaVbababababagQhghJhKhghghghghghghghghghggQaNaNaNaNbfaVaUbfaVaUaUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNiYioifhEaNaNaNaNiZifizisifaNaNaNifiuhEiSiSjahEhEaNaNaNaNaNaNhEaNhEhEhEhEhEhEhEhEhEhEhEaNhvaNaNaNaNaNaNaNaNaNaNaNaN +adbbaXbcbgcDiBjbiCcGaXbcbgbfaYbebffQjciWjdcHbgbfaYbeagaNaNaNaNbbabaZbdaWjegKgNgJgMgAgCgOgJgBhdgDgzgLgAgCgOgJgPbbbabgaabbaTaMfUaYbdbdbcaYbababababagQhkhShThkhghghghghghghghghggQaNaNaNaNbcaYbdbcaYbdbdfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNiraNaNaNaNaNaNaNaNifjfifaNifaNaNaNiSiSiShEaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEhEhEhvaNaNaNaNaNaNaNaNaNaNaNaN +ahaTaTaZaScHcEeHcHfTaTaZaSbcaXaUbccEeHfTfTdKaSbcaXaUamaNaNaNaNbeajbbbgbfjggygCgNgAgDgzhegNgMgJgOgKgEgDgzhegNhfbeaWaSaibebaaMfUaXbgbgaZaXbababababagQhrhlichrhghghghghghghghghggQaNaNaNaNaZaXbgaZaXbgbgfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNifaNaNaNiraNaNiSiSiSaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEhEhEhEhvaNaNaNaNaNaNaNaNaNaNaNaN +afbababbaVaZaTbdaZbababbaVaZaTbdaZaTbdbababbaVaZaTbdalaNaNaNaNaUagbeaSbcgRgBgzgCgDgOgKgLgCgAgNhegyhdgOgKgLgCgQaUbfaVanaUbfaMfUaTaSaSbbaTbababababagQgQgQhghghghghghghghghggQgQgQaNaNaNaNbbaTaSbbaTaSaSfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNisifaNaNaNaNaNhEisiraNaNaNaNaNaNaNjhaNaNaNaNhEhEhEhEhEhEhEhEhEhEhEhEaNhvaNaNaNaNaNaNaNaNaNaNaNaN +abaWaWbeaYbbbabgbbaWaWbeaYbbbabgbbbabgaWaWbeaYbbbabgaaaNaNaNaNbdamaUaVaZjigMgKgzgOgBhegDhdgLgAgJgKgMhegygEgzhqbdbcaYaebdbcaMfUbaaVaVbebaaVaNaNaNaNaNaNhhhhhihihihihihihihhhhaNaNaNaNaNaNbebaaVbebaaVaVfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhEhEaNaNaNaNaNaNaNaNaNhEhEaNiQaNaNaNaNaNaNjjjjjjiyjkjkjlaNaNaNaNhEhEaNaNhEhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +ajbfbfaUaXbeaWaSbebfbfaUaXbeaWaSbeaWaSbfbfaUaXbeaWaSaiaNaNaNaNbgalbdaYbbjmgAgygKhegMgLgOgJgEgDgNgygAgLgBhdgKhybgaZaXakbgaZaMfUaWaYaYaUaWaYaUaWaYaUaWaYaUhqgFjghqhqgFgFjghqaYaUaWaYaUaWaYaUaWaYaUaWaYaYfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhEhEhEaNaNizjkifjnaNhEhEhEaNjoaNaNaNaNaNisjjjjjjjpjqjrjsaNaNaNhEhEhEaNaNhEhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +agbcbcbdaTaUbfaVaUbcbcbdaTaUbfaVaUbfaVbcbcbdaTaUbfaVanaNaNaNaNaSaabgaXbefNgDgBgygLgAgEhegNhdgOgCgBgDgEgMgJgyeXaSbbaTaoaSbbaMfUbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNhEhEaNaNifjtaNaNjujujuhEaNaNaNaNaNaNaNirjjjjjjjvjkjkjwaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +amakahaiaoabadacamafalaganaafUfUfUfUfUahaiacagaoaaafaeaNaNaNaNaVaiaSaTaUgpgOgMgBgEgDhdgLgCgJhegzgMgOhdgAgNgBgqaVbebaacaVbeaMfUbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNiraNaNjujujuisaNaNaNaNaNaNhEhEjjjjjjaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +bfbdaYbbbgaTaVaSbfaXbcaWbeaZbaaUaVaTbcaYbbaSaWbgaZaXaUaNaNaNaNaYanaVbabdibhegAgMhdgOgsgEgzgNgLgKgrhegJgDgCgMiaaYaUbfadaYaUaMfUbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNisaNhEaNjujujuaNaNaNaNaNaNaNaNhEhEhEaNaNaNaNaNaNaNhEhEhEaNaNaNaNaNhEaNhEhEaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +bcaXbeaVbfaSaVbfaSaXbeaVbfaSaXbeaVbfaSaXbeaVbfaSbbaTbdaNaNaNaNaXaeaYaWbggmgLgDgAgJhegohdgKgCgEgyilgLgNgOgzgAglaXbdbfahaXbdaMfUaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjujujuaNaNaNaNaNaNaNaNhEaNaNaNizaNaNaNaNhEhEhEhEaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aZaTaUaYbcaVaYbcaVaTaUaYbcaVaTaUaYbcaVaTaUaYbcaVbebabgaNaNaNaNaTakaXbfaSgrgEgOgDgNgLgngsgpjxglibhZgEgChegKgDgsaTbgbcafaTbgaMfUbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +bbbabdaXaZaYaXaZaYbabdaXaZaYbabdaXaZaYbabdaXaZaYaUaWaSaNaNaNaNbaaoaTbcaVilglhIhZgniajxbdaXaVaUaThIgljxgqgphZgobaaSaZabbaaSaMfUbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNiyjyjzaNhEaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +beaWbgaTbbaXaTbbaXaWbgaTbbaXaWbgaTbbaXaWbgaTbbaXbdbfaVaNaNaNaNaWadaWbbaXbfaUaZbcaSbeaVbgaTaYbdbaaZaUaVbbaXbcbgbfaYbeagaWaYaMfUbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNifiQinaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aUbfaSbabeaTbabeaTbfaSbabeaTbfaSbabeaTbfaSbabeaTbgbcaYaNaNaNaNbfahalaeajaaaoanaiahakafadagabacamanaoafaeabajadaaabakambfaXaMfUaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUfUfUfUfUfUfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNhEaNinifaNhEhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +bdbcaVaWaUbaaWaUbabcaVaWaUbabcaVaWaUbabcaVaWaUbaaSaZaXaNaNaNaNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjAjBjCjBjDfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjBjEjFjGjBfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjHjFjIjFjHfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjJjFjFjFjJfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjJjFjFjFjJfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjKjFjFjFjKfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjBjLjMjNjBfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjBjOjOjOjBfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjPjQjRjSjTfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUfUfUfUfUfUfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaN +aPaPaPaPaPaPaPjWaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNjVjVjVjVjVjVjVaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNjVjVjVjVjVjVjVjVjVaNjVjVjVjVjVjVjVjVaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNjXaNifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNjXifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNjXaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVaNaNaNaNaNaNjYifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVaNaNaNaNaNaNjZaNifjVjVgbgbgbgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNgbgbkbkckdgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNkekfkgkhkgkfgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNkikfkgkhkgkfgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNkjkfkgkhkgkfgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgbkhkhkkgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbkhkhkhgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNklkmkmkngbgbkogbgbgbgbgbgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNkpkrkqkqkqktksaNaNkukvkxkwkvkvkvkygbkzkAkBkCgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNkpkDkEkFkGkHkIkDksaNkukvkJkJkvkvkvkvkKkLkLkLkMgbgbgbgbgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNkDkNkOkOkPkOkOkHkDaNkukQkSkRkTkvkvkvgbkLkLkLkUgbkVkWkXgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNkDkYkOkOkOkOkZlakDaNkukvlblbkvkvkvlcgbldkLlelfgblgkWlhgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDlikOkOljkOkOlkkDaNkukvkvkvkvkvkvllgbgbgbgbgbgblmkWlngbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlokDlpkDkDkDkDkDlqaNlrkmkmlsgbltltltgblululvlwgblxkWlygbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDlzlAlBlClDkDaNaNaNaNaNaNlEltltltlGlFlFlHlHgblxkWlygbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDlIlJkZkOlKkDaNaNaNaNaNaNlLltltltgblMlFgbgbgblNlOlNgbgbgbgbjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkpkDlPlAkZkOlQkDksaNaNjZjYlRgbltltltgbgbgbgblSlSkWkWkWlTlTlUgbgbjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkpkDkDkDkDlVlAkZkOlWkDkDkDkDkslXlXgblYltltltgblZmakWkWkWkWkWkWkWkWmbgbjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDmcmdmekDkOmfkOmgkDkDmimhmkmjmlmmmlltltltltmnkWkWkWkWkWmokWkWkWkWmpgbjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNmqmrmsmrkDkDkDmtkDkDmumimvmwmjmlmxmlltltltltgbmymzkWkWkWkWkWkWkWkWmAgbjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNkDkDmqmBkDkDmCkOmDkDkDmEmFmEkDmGmGgbmHkmlsgbgbgbgbmImJkWkWkWmKmKmLgbgbjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkDmMkOkOmNkDkOkOkOkDmOmPmQmRkDifaNifaNaNaNaNjVjVgbgbgblNmSlNgbgbgbgbjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkDmTkOkOkOmUkOkOkOmVkOkOkOmWkDjYjYjYjYaNaNaNaNjVjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNkDmYkOkOkOmZkOkOkOnakOkOkOnbkDaNaNaNaNaNaNaNaNaNjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkpkDkDkDkDkDkDkOkOkOkDkDkDkDkDkDksaNaNaNaNaNjXaNifjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkDncndnenfngkDnhkOnikDnjnknknmnlkDaNaNaNaNaNjXifjVjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNnnndndndndndkDkOkOkOkDnokOkOkOnpnqaNaNaNaNaNjZaNjVjVjVgbgbnrgbgbjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNntnsnundndndnvkOkOkOnwkOkOkOnxnynzaNaNaNaNaNjXififjVjVjVgbgbgbjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnAndndndndndnBkOkOkOnCkOkOkOkOnDnEaNaNaNaNaNjXaNaNifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDnFndndndnGkDmEnHmEkDnInJnKkOnLkDaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDnMnNnOnQnPkDnRkOnSkDnTkDkDnUkDkDaNaNaNaNaNaNaNjXaNifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDnVndnWkDkDkDkOnXnYkDkDkDnZkOoakDaNaNaNaNaNaNaNjXififjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDobocodkDaNkDoeoeoekDaNkDkHofogkDaNaNaNaNaNaNaNjXaNifaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDoeoeoekDaNloohoiojlqaNkDoeoeoekDaNaNaNaNaNaNaNjXifififififjVjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNloohoiojlqaNaNaNaNaNaNaNloohoiojlqaNaNaNaNaNaNaNjXaNifaNifaNaNjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokolololololololololololololololololololokaNaNaNaNaNaNaNaNaNomomomomomomomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokonononononononononononononononononononokaNaNaNaNaNaNaNaNaNomopoooooooqomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororororororororororororororororororokaNaNaNaNaNaNaNaNaNomosoposoqosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororororotouououououovororororororokaNaNaNaNaNaNaNaNaNomosososososomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororororotowoxoyozoAoBowovorororororokaNaNaNaNaNaNaNaNaNomosoCosoDosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororotowoEoFoGoHoGoFoIowovororororokaNaNaNaNaNaNaNaNaNomoCoJoJoJoDomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororouoGoGoGoLoKoMoGoGoGouororororokaNaNaNaNaNaNaNaNaNomomomoNomomomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororowoOoPoQowoRowoSoToUowororororokaNaNaNomomomomomomomoVoWoYoXoVomomomomomomomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororowoZouowowowowowouoZowororororokaNaNaNomopoooooooqompapboYpcpaomopoooooooqomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororowoGpdowpepfpeowpgoGowororororokaNaNaNomosoposoqosompiphoYpjpiomosoposoqosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNpkaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororouoGpdowplpmpnowpgoGouororororokaNaNaNomososososospooYoYoYoYoYpposososososomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororotowoOpdowpqpmpnowpgoUowovorororokaNaNaNomosoCosoDosompsproYptpsomosoCosoDosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowpuoGpdowowpvowowpgoGpuoworororokaNaNaNomoCoJoJoJoDompapboYpcpaomoCoJoJoJoDomaNaNaNpwpwpwpwpwpwpwpwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGoGpxoGoGoGpxoGoGoGpyorororokaNaNaNomomomomomomompapboYpcpaomomomomomomomifififpwpApzpzpzpzpBpwpwpwpwpwpwpwpwpwpwpwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowpCoGouoGoGoGoGoGouoGpDoworororokaNaNaNomompEpFpEpFpGpapboYpcpapHpFpEpFpEomomaNifaNpwpIpApIpIpBpIpwpJpKpKpKpLpKpKpKpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGouoGpOpOpOoGouoGoGouorororokaNaNaNompQpPpspRpspapapboYpcpapapspRpspSpTomomomompwpIpIpIpIpIpIpwpJpVpUpUpUpUpUpWpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGpXouoGpYpZqaoGoupXoGouorororokomomomomqcqbpaoVpapapapboYpcpapapaoVpaqdqeomaNifaNpwpIpIpIpIpIpIpwpJqfqgqgqgqgqgqfqhpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGouoGqiqiqioGouoGoGouorororokaNaNaNompQqjpiqkpipapapboYpcpapapiqkpiqlpTomomomompwpIqmpIpIqnpIpwqoqfqpqgqgqgqqqfpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowqroGouoGqsqtquoGouoGqvoworororokaNaNaNomomqwqxqwqxpHpapboYpcpapGqxqwqxqwomomaNifaNpwqmqyqyqyqyqnpwpKqfqgqgqgqgqzqApwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGqBoGoGoGoGoGqBoGoGpyorororokaNaNaNomomomomomomompapboYpcpaomomomomomomomifififpwpwpwpwpwpwpwpwpKqfqgqgqgqgqgqCpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNqDhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvpkhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowouqEowououqFououowqGouoworororokaNaNaNomopoooooooqompapboYpcpaomopoooooooqomaNaNaNaNaNaNifaNaNaNpwpKqfqgqgqgqgqHqfpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowqIqJowqKqLqMqNqOowqPqQoworororokaNaNaNomosoposoqosompiphoYpjpiomosoposoqosomaNaNaNaNaNaNififaNaNpwpKqfqgqgqgqgqgqCpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowqRqSowqTqUqMqMqVowqWqXoworororokaNaNaNomosososososqYoYoYqZoYoYraosososososomaNaNaNaNaNaNaNififaNpwpKqfqgqgqgqgrbrcpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowrdrdowreqMqMqMrfowrdrdoworororokaNaNaNomosoCosoDosompsproYptpsomosoCosoDosomififififififififififpwpKqfqpqgqgqgqqqfpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororrgrhrhowriqMqMrjrkowrhrhrlorororokomomomomoCoJoJoJoDompapboYpcpaomoCoJoJoJoDomaNaNaNaNaNaNaNaNaNifpwrmqfqgqgqgqgqgqfrnpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororororrgowrororoowrlorororororrpokrqrqrqokomomomomomompapboYpcpaomomomomomomomaNaNaNaNaNaNaNaNaNaNpwpKrsrrrtrtrtrrrupMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororororororrgrhrhrhrlororororororrwrvrqrqrqokomomomomomompapboYpcpaomomomomomomomaNaNaNaNaNaNaNaNaNaNpwpKpKrxryryryrzpKpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororororororororororororororororrwrvrqrqrqrArCrBrErDrFrApapboYpcparArGrHrIrJrJrAomomomomomomomomomompwpKpKpKpKrKpKpKpKpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrMrMrMrMrMrMokrqrqrqrArNrOrOrOrPrApapboYpcparArJrJrJrJrJrAaNaNaNaNaNaNaNaNaNaNpwpwpwpwpwpwpwpwpwpwpwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrQrLrSrRrUrTrWrVrLrXrZrYsbsasdscscseserMsfsgsgsgsgokrqrqrqrArNrOrOrOrPrApiphoYpjpirArJrJrJrJrJrAaNaNaNaNaNaNaNaNaNaNaNifaNifaNifaNifaNifaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLshrLrYrYrYrYrYrYrLsirZrYrYrYrYrYrYrYrYrMsjsgsksgsgokrqrqrqrAslsmsnsosprAsqsrsqsrsqrArJrJrJrJrJrAaNaNaNaNaNrArArArArArArArArArArArArArArArArAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssstsvsusxswrYrYrYrYrYrYrYsyrLrLrLrYrYrYrYrYrYrYrYrMszsAsBsgsgokoksCokrArArAsDrArArAoYsEoYsEoYrArArAsFrArArAsGsGsGsGsGrAsHsIsKsJsMsLsOsNsQsPsSsRsUsTsWsVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYsZtasYsYsYtbsZtdtcsvsvterLtfrYrYrYrYrYrYtgrLthrYrYrYtititjtltktkrMtmtntosgsgrMtptqtqtqrAtrtstststspRpRpRpRpRtststststtsGtutvtwtvtxtyrAsIsIsKtztBtAtDtCtFtEtHtGtJtItKsVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLswrLrLrLrYrYrYrYrYrYrYrYrLtMrYrYrYtNrLrLrLrLrLrMrMrMrMrMtOrMtptqtqtPrAtQrOrOtRrOpapapapaparOtRrOrOtStTtututUtutUturAsIsIsKtVtXtWtZtYubuauducufueugsVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuiuhuhuhujujujuhuhujujujuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssuksvsvulrLunumupuouruqrYrYrLusrYrYrYutrLuuuvuvuuuwuyuxuztqtqtqtqtqtquArLtQrOuBuCuCuCuCuCuCuCuCuCuDrOtSsGtutututututurAsIsIuFuErJrJuGuGuGuHuHuHuHuHuHuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuJuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuKtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYuLtasYsYsYtbuLuMtcsvsvuNrLuOuPuPuPuQrLrYrYrLuRrYrYrYuSrLrYtqtqtquTtqtqtqtqtqtqtqtquUrLrLtQtRuVuWuWuWuWuWuWuWuWuWuXtRtSsGsGuYuZvavbturAsIsIsKvcvdvdvdvdvdvdvdvdvdvdvduIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhuhuhuhuhuhuhuhuhveuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssvfsvsvvguwvivhvkvjvluwrYrYuwrYrYrYrYvmuwrYtqtqsxvntqtqtquxuxrLrLrLrLrLvotQrOuVuWvprOvqvrvsrOvtuWuXrOtSvusGsGsGsGsGsGrAsIsIsKsJsMsLsOsNsQsPsSsRsUsTsWvvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhuhuhuhuhuhuhuhuhuJuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYvwtasYsYsYtbvwvxtcsvsvvyuTvzrYrYrYvAuTrYrYuTrYrYvBvDvCuTvEtqtqtqrLuOuPvFuPuQrLvGvGvGvHvotQrOvIuWvJvKvLvMvNvOvPuWvQrOtSvuvRvSvSvSvSvSvTsIsIsKtztBtAtDtCtFtEtHtGtJtItKvvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhvUveuhuhuhuhuhuhuhuhuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssvVsvsvvWrLvXrYrYrYvYrLvZvZrLwawarLrLrLrLvEtqtqsxwbwcwcwcwcwcwdwcwcwcwevotQrOrOwfrOrOwgrOwgrOrOwfrOrOtSvuwhvSvSwivSvSwjsIsIsKtVtXtWwktYubuauducufueugvvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhwlwluhuhuhuhuhuhuhuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYwmtasYsYsYtbwmwownsvsvsxwprYrYrYrYrYwprYrYwqrYrYwrwtwswsrYtqtqwurLuOuPvFuPuQrLwvwvwvwwvotQrOwxuWwyvKwzrOwAvOwBuWuDrOtSwCwDsIsIsIsIsIvTsIsIuFuErJrJuGuGuGuHuHuHuHuHuHuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhwlwEwFwluhuhuhuhuhuhuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLsvsvsxwprYrYrYrYrYwprYrYwGrYrYtqwHwHwHtqtqtqwIwJwKwLtqwMwNrLrLrLrLrLvotQrOuVuWwOrOwPrOwPwQwRuWuXrOtSwCrAwSwSwSwSwSrAsIsIsKvcvdvdvdvdvdvdvdvdvdvdvduIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhwlwTwUwluhuhvUuhwVuhuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLsvsvwWrLuOuPuPuPuQrLwXwXrLwYrYtqwZxaxbtqtqtqxdxcwLtqtqtqtqvntqxevBrLrLtQrOuVrArAxfxgrOxhxirArAuXrOtSrArAaNaNaNifaNrAsIsIsKsJsMsLsOsNsQsPsSsRsUsTsWxjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhwlwluhuhuhuhuhuhuhuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLxlxkxnxmxorYrYrYuwxprYtqxaxqxrtqtqtqtqvntqtqtqxsxtuwtqtqtqxurLtQtRuVrArAuWuWuWuWuWrArAuXtRtSrAififififififrAxvxvxwtztBtAtDtCtFtEtHtGtJtItKxjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhveuhuhuhuhuhuhuhuhuhuhuhuhuhuJuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrYrYrYrYrYrYrYrYuTxxrYtqxyxyxytqtqtqtqvntqtqtqxsxtuTtqxzxBxArLtQrOvIxCxCxCxCxCxCxCxCxCvQrOtSrAaNifaNaNifaNrAsIxDxEtVtXtWxFtYubuauducufueugxjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhvUveuhuhuhuhuhuhuhuhuhuhuhuhveuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrYrYrYrYrYrYrYrYrLxGrYrYxHrYrYrYtqtqxGxctqtqtqxsxtrLrLrLrLrLrLtQrOrOtRrOrOrOrOrOrOrOtRrOrOtSrAaNifaNaNifaNrAxIxJuFxKxLxLxNxMxPxOxOxOxOxOxQuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhuhuhxRuhxRuhxRuhxSuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLxTxTxVxUxXxWxZxYrLyaybtPrLycydrLtPybyawJyetqtqxsxtrLyfyfyfyfrLygyhyhyhyhyhyhyhyhyhyhyhyhyhyirAififififififrAsHyjylykxLymymymymxLymymymymxLuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhynuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLyoyorLrLrLrLrLyptqtqxsxtrLrLrLrLrLrLrAwDyqwjrAwCwCwCwCwCrArArArArArAaNifaNaNaNaNrArArArArArArArArArArArArArArArArAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLyryryryryryryryryryryryryryryryryryryrtLjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNysytyuyvyvyvywywyvyvyvyxrLyytqtqxsxtrLrLyzyByAyzyCyDyEyFyGrAwDyHwjrArAaNifaNaNaNaNifaNaNaNaNaNyGaNaNaNyGaNaNaNyGaNaNaNyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyIyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyIjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNysyuyvyLyKyMyNyNyOyQyPyRrLrLvnvnrLrLrLrLyzySySyzyCyTyEyFyGyVyUyEyWyXyGaNifaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyszbzayNyNyNyNyNyNzcyPyRytuwtqtqtqtqtqrLyzyAyAyzyCyTyEyFyGzdyEyEyEzeyGaNifaNaNaNaNyGzfzfzfzfzfzgzhzizizizjzkzfzfzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyszmyvznznznzoznzpzqyPyRytzrtqtqtqtqtqrLzsyzyzyzztyTyEyFyGzuzvzuzwzuyGaNifaNaNaNaNyGzxzfzfzfzgzyzzzAzBzCzDzEzkzfzfzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNysytzmyvyvyvyvyvyvyvyvzGytzrtqtqtqtqtqvHyzzHyzzHyCyTyEzJzIzdyEzKyEzLyGaNifififififyGzfzfzfzgzyzMzNzOzNzOzNzPzEzkzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLytytytytytytytytytytytytzrtqtqtqtqtqwbyzzHyzzHyCyTyEzJzIzQyEzRzSzTyGaNifaNaNifaNyGzfzfzfzUzOzOzOzVzWzXzOzOzOzUzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLytzYytytzYytytzYytytzYytuTtqtqtqtqtqrLyzzHyzzHyCzZAaAbyGzuAcAeAdzuyGaNifaNaNifaNyGzfzfzfAgAfAhAiAjAkAjAlAmAnAgzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoyGyGApyEyEAqAryGyGyGififififyGzfzfzfAgAszUAtAvAuAvAtzUAsAgzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvAwAwAwAwAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAoAAAzABABABAzABABABAzABABABAzABACAEADAFAFAFAFAFAoAGzuAHyEyEAIzezuAGyGaNaNifaNyGzfzfzfAgzOAmAJAKALAMAJAhzOAgzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvjVjVjVjVjVaPaPaPaPaPaPjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAoAOANANANANANANANANANANANANANABABABAPAFAFAFAFAFAoAGzuAHyEyEyEzezuAGyGyGyGyGyGyGzfzfzfzUzOAmAQARASATAQAhzOzUzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvaPaPaPaPaPaPjVjVjVjVaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABABAVAUAWAVAUAXAZAYAXAZBbBaAAABABADAFAFAFAFAFAoAGzuAHyEBcyEBdzuAGAGAGAGAGAGyGzxzfzgzyAfAmBeARBfATBeAhAnzEzkzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvaPjVjVjVjVjVjVBhBgjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABAVBjBiBlBkBmBnBmBoBmBnBqBpAAABABAoAoAoAoBrBsAoAGzuAHyEyEyEBtzuzuzuzuzuzuzuzuzuzuAgBuzOAmzEzUBvzUzyAhzOBuAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvaPjVjVjVjVjVjVBwBhBxjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABByBoBzBoBABoBoBoBoBoBoBqBpAAABBBAoBDBCBFBEBEyGzuzuBGyEyEyEyEBHyEyEBIyEyEBJBLBKBLBMzOzOzOBNBOzOzOBNzOzOAmzUzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvaPjVjVjVjVjVjVjVBhBhaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNjVjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABBPBRBQBTBSBUBVBUBUBUBVBqBpAAABABAoBXBWBYBEBEBZyEBHyEyEyEyEyEBHyEyEyEyEyEBJzuzuzuAgCazOAmAQAhzOAmAQAhzOCbAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABCcBPAUCdBPAUAXCeCeCeAZCgCfAAABABAoCiChCjBEBEBZyEBHyEyEyEyECkzuzuzuyEyEClCmyGzfzfAQAhzOAmCnAhzOAmCnAhzOAmAQzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP +aNhvaPjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoCpCoCoBEBEyGzuzuCqyECryEBdzuAGCsyEBJCtCuyGzxzfCnAhzOAmCnAhzWAmCnAhzOAmCnzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYjVaP +aNhvaPjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGBEBEBEBECvBEBEBEBEBEBEBEBEBEBECwBEyGAGzuCxyEyEyEBtzuzuzuyEyECzCyyGzfzfBeAhzOAmCnAhzOAmCnAhzOAmBezfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaP +aNhvaPjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACDCCCECACDCCCECACDCCCFyGCHCGCJCIBECHCLCKCIBEBEBEBEBEBEBEBEyGAGzuCMyEyEyEyEBHyEyEyEyEyEBJzuzuzuCNCOzOAmBeAhzOAmBeAhzOCPAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aNhvaPjVaNaNaNaNaNaNaNCRCQCQCSCQCQCQCTCUCUCUCUCUaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGCHCWCXCIBECHCZCYCIBEBEDaDaDaDaDaDayGAGzuDcDbyEyEyEBHyEyEyEyEyEBJBLBKBLDdzOzODezOzOzOzOzODezOAmzUzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVBhaNaNaNaNaNDfDhDgDjDiDiDkDmDlCUDnDpDoCUaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGBEBEBEBEDqBEBEBEBEBEDrDsDsDsDsDsDsyGyGyGyGDtDuDuyGyGyGyGyEyEyEyGzuzuzuDvzUDwDvzhzjDxzhzjDvDwzUDvzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVBhBhaNaNaNaNDyDzDiDiDADiDiDiDiCUDBDDDCCUaNaNaNaNCUCUCUCUCUCUDEjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGCHDFDGCIBECHDIDHCIBEDrDJDKDKDKDKDKyGDLDLDLDMDNDNDPDODOyGzQDQDRyGyGzxzfAgDSDTAgDUDVDWDYDXAgDZEaAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVBhBhaNaNaNDyEbDiEcDAEdDADAEeCUCUEfCUCUaNaNaNaNCUEgEhEhEiEgDEDEjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGCHEjEkCIBECHEmElCIBEDrDKDKDKDKDKDKyGEnEoEoEpDNDNDNDODOyGzuEqzuyGyGzfzfAgErEsAgEtEuDWDWEvAgEwExAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVjVaNEyEzDiDiEbEbEbEbEbDiEADjEBCUCUCUCUCUCUEiECEiEiEiEiDEjVjVjVaPaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGEEEDEGEFEIEHEGEJELEKEGEMENyGBEBEBEBEBEBEBEBEBEBEDrDKDKEOEPEQERyGESDNDNDNEUETDNDNEVyGEXEWEYEZyGzfzfCNFaFaAgFbDWFcFdFeAgFaFaCNzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVDEDEDEjVCUEbDiDiDiDiDiDiDiDiDiDiDjCUEiEiEiEiCUEiECEgEiEiEgDEjVjVjVaPaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGFgFfFiFhDNFfFiFhDNFfFiFhFjyGyGyGyGFkFlFkyGzuzuFmzuzuyGyGyGyGyGyGFnDNDNEUFpFoETFqFryGFsFtFuEZyGzfzfFvFwFwCNFxDWDWDWFyCNFwFwFzzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVDEDEFADEDECUDjDiDiFBDiFCFEFDFCDiDiDiFFEiEiEiEiCUEgEiECECEiFGCUaPaPaPaPaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGESDNDNDNDNDNFHDNDNDNDNDNFIFkFKFJFJFJFJFLyGyVFMFMFMyXyGaNyGyGyGyGyGyGyGFNFLFOFPFqFryGFsFtFuEZyGzxzfzfzfzfFvFQFRFRFRFSFzzfzfzfzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVDEDEFTFVFUFWCUCUDjDiDiDiFCFYFXFCDiDiFZCUEiEiEiEiGaECECECEiEiEgCUjVjVjVjVaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGESDNDNDNDNDNDNDNDNDNDNDNFIFkESDNFHDNDNFIyGzdyEyEyEzeyGaNyGGbGdGcGfGeyGDNGgFPDNDNEUzuFsFtFuEZyGzfzfzfzfzfGhFvFwFwFwFzGhzfzfzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVDEGiFVFVFVFVFVGjDiDjDjDjFCGlGkFCDiGnGmCUEiEiEiEiCUEgECEiECGoEiCUjVjVjVjVaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGFoGpGpGpGpGpGpGpGpGpGpGpFpFkFoGpGpGpGpFpyGzdyEyEyEzeyGyGyGGqDNDNDNDNGrDNDNDNDNDNFIzuFsFtFuEZyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVDEGsFVFVFVGtFVGjDiCUCUCUCUCUCUCUCUCUCUCUCUCUFFCUCUCUCUGaCUCUCUCUCUjVjVaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGGvGuGwGvGyGxzuGzGBGAGDGCGAyGyGyGyGyGyGyGyGAHyEyEyEGEyGaNyGGFGGGHGJGIyGDNDNDNDNDNGKzuFsFtFuEZGMGLGLGLGNEZGOGPGPGPGPGPGPGPGPGPGPGPGPGPGPGQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVDEGRFVGSFVFVGTDECUCUjVjVCUEiEiEiEiEiEiCUGUGUGUGUGVCUEiEiEiEiEiEiCUjVaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGGWDNGXGWDNGYzuGZDNHaHbDNHayGaNyGHcyGHeHdyGAHyEyEyEHfyGaNyGHgHiHhHkHjyGHlHnHmHpHoHqyGFsFtFuEZHsHrHuHtHvEZGPHwHyHxHxHxHzHAHBHxHxHxHCGPGPGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVDEDEHEFVFVFVHFDEjVjVjVjVCUEiEiEiEiEiEiCUGUGUGUGUGUCUEiEiEiEiEiEiCUjVaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGGWDNGXGWDNGYzuGZDNHaHbDNHayGaNyGCVCVCVCVHGzdyEBcyEBdyGaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGFsFtHHHIHKHJHMHLHvEZGPHNHPRwRxHRHSHTHSHUHQHVHWHxHXGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVDEDEHEFVFVHFDEjVaNaNjVCUEiEiEiEiEiEiFFGUGUHYGUGUFFEiEiEiEiEiEiCUjVaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIaHZIbIaHZIczuIdIfIeIgIfIeyGaNyGIhyGCVCVyGIiyEyEyEBdyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNEZFsFtFuEZHsIjIlIkHvEZGPImInHQIoIpHQIoIpHQIoHQIqHQIrGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVDEDEIsItDEDEjVjXaNifCUEiEiCUIuIvIwCUGUGUIxGUGUCUIuIvIwCUEiEiCUifaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGaNyGIyyGIAIzyGIBDbyEICIDyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNEZFsFtFuEZIFIEIEIEIGEZGOImInHQIoIpHQIoIpIHIoHQHQHQIIGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVDEDEDEDEjVifjXaNifCUEiEiCUifififCUCUIuIvIwCUCUifififCUEiEiCUifaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGzdyEzeyGyGyGyGyGyGyGyGyGyGyGyGaNaNaNaNEZFsFtIJEZEZEZEZEZEZEZGPImInHQIoIpHQIoIpHQIoHQIqIKILGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVjVjVjVjVifaNaNifIMININIOifaNifififififififififaNifIMININIOifaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIPIPIQIQIQIQIQIQIQIRyGyUyEyWyGIQISIUITIVIVIVIVIVIWyGaNaNaNaNEZFsFtFuEZIYIXIXIXIZEZGPJaJbHOHQJcHQHQHQJdHQHVJeHxJfGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVjVjVjVjVaNaNaNaNIMJgJhIOaNaNaNaNaNaNaNaNaNaNaNaNaNIMJgJhIOaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQIQISISISIQIQIQJiJjyEJkJiIQISIUyTyEyEyEyEyEzJyGaNaNaNaNEZFsFtFuEZJmJlJoJnJpEZGPJqJsJrJtHxHzHAHBHxJtJrJuGPGPGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVjVjVjVaNaNaNaNaNIMJgJhIOaNaNaNaNaNaNaNaNaNaNaNaNaNIMJgJhIOaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQJvJwJwJwIQIQJxzuDbyEICzuJyIQJzyTyEyEyEyEyEzJyGaNaNaNaNEZFsFtJAJBJDJCJFJEJpEZGPGPGPJGJHJGGPGPGPJGJHJGGPGPGPGQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVjVjVjVaNaNaNaNaNJIININJJaNaNaNJIaNaNaNaNaNJJaNaNaNJIININJJaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKJMJLJLyEJNISIQzuzdyEzezuIQISIUyTyEyEyEyEyEzJyGaNaNaNaNEZJOJPJQEZJmJRJTJSJpEZGOGPGPJGGPJGGPJUGPJGGPJGGPGPGPGPEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVJXJWJVaNaNaNJVJYJZJZJZKaJVaNaNaNJVKbKcJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKyTKdKdzeJNISIQzuzdyEzezuIQISIUKeKfKfKfKfKfKgyGaNaNaNaNEZEZKhEZEZKjKiKiKiKkEZJGJGJGJGJHJGJGJGJGJGJHJGJGJGJGEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVKmKlJVaNaNJIJVJVKnKoKpKqJVJJaNaNJVKrKsJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKyTKdKdzeJNISIQzuzdyEzezuIQISIUKtKuKuKuKuKuKvyGaNaNaNaNEZKxKwKyEZEZEZEZEZEZEZKzKAKwKwKwKwKwKwKwKwKwKwKwKBKzEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVKCKDJVaNaNJVJVKEKFKGKFKHJVJVaNaNJVKIKJJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKyEDQDQDRJNISIQzuzdyEzezuIQISIUzdyEyEyEyEyEzeyGEZJGJGJGEZKKFtKMKLKNKAKwKBKNKOKwKSFtFtFtFtFtFtFtFtFtFtFtKMKwKyEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaUbabeaSbcbdaXaSbgaWbfaVaZbgbabdbcaYbebfaVaZbgbaaUbfaVbbaUaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVKUJVJVJVJVJVKPKQKQKQKQKQKRJVJVJVJVJVKVJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQKTKTKTKWIQIQIQzuyUyEyWzuIQIQKXzdyEyEyEyEyEzeyGKYKZKwKBJGKKFtFtNjKNFtLbFtKNNjFtFtFtFtFtFtFtFtFtFtFtFtFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbdaWaUaVaZbgaTaVaSbfaXbcaWbeaZbaaUaVaTbcaYbbaSaWbdbcaYbebdaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVLjLaLkLcLdJVLeKQKQKQKQKQKRJVLfLgLhLiLlJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQISISISIQIQIQIQJiJjyEJkJiIQISIUzdyEyEyEyEyEzeyGLmLnFtHHKNKKFtFtNjKNLoLuLpKNNjFtFtFtLvLvLqLvLvLvLqLvLvFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbgbfbdaYbbaSbaaYaVbcaTaZbfaUbbaWbdaYbaaZaXbeaVbfbgaZaXaUbgaNaNaNaNaNaN +aNhvaPjVjVaNaNaNaNaNaNaNaNaNaNaNJVLrLsLsLsLtJVLALwLBLxLALwLBJVLyLsLsLzLrJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQIQIQIQIQIQLDLDyGDbyEICyGIRISIULELCLCLCLCLCLHyGLIKZFtHHKNKKFtKzLFJGJGJGJGJGLGFtFtLKLJLLEZLNLMLOEZLQLPLSFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaSbcbgabaeadagafahaaajaialakanamaoafagaiabaeahaladanaTbdaSaNaNaNaNaNaN +aNhvaPjVjVaNaNaNaNaNaNaNaNaNaNaNLTLrLsLsLsLsLxKQKQKQKQKQKQKQLxLsLsLRLsLrLTaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGzdBczeyGyGyGyGyGyGyGyGyGyGyGyGLULVFtHHKNKKFtFtNjKNKAKwKBKNNjFtFtFtLWLWMfLWLWLWMfLWLWFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaVaZaSajaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVaebabgaVaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNMgLXLsLYLsLsJVLZMaKQKQKQMbMcJVLsMdLsMeLrMgaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMhMjMiMlMkzuIQIQIQIQyGyUyEyWyGIRISIUJMJLJMMnMmJLMmyGMsKZLuLpJGKKFtFtNjKNFtLbFtKNNjFtFtFtFtFtFtFtFtFtFtFtFtFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaYbbaVagbdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYakaWaSaYaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNMwLXLsLsJVMoJVJVJVMpMqMrJVJVJVMoJVMxMtMuMwaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMkMkMkMkMvIQIQIQIQJiJjyEJkJiIQISIUyTyEyTyEzJyEzJyGEZJGJGJGEZKKFtMHMyKNLoLuLpKNMILuMNFtFtFtFtFtFtFtFtFtFtFtMHLuMOEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaXbeaYambgaXbcbaaTbebfdecTcCelcAfNfSbcaUaWbgaTbbaXaobfaVaXaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNJIJVMzMAMBJVMCMDMCLTMEMFMGLTMQMPMJJVMKMLMMJVJJaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMkMRMkKdzuIQIQIQJxzuDbyEICzuJyIQJzyTyEJLJLJLyEzJyGaNaNaNaNEZMSLuMVEZEZMWMYMXEZEZKzLoLuLuMZLuLuLuLuLuLuLuLuLpKzEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaTaUaXalaSaTaZaWbaaUbcelNcNbNbNbNdeEaZbdbfaSbabeaTacbcaYaTaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNjVjVaNaNaNMTJVMUMUJVJVMCMCMCMgMEMqMGMgMJMJNeJVJVMUMUJVNfaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGzuNhNgNiNayGIQIQIQIQzuzdyEzezuIQISIUyTyEyEyEyEyEzJyGaNaNaNaNEZEZNkEZEZKAKSFtNmNnEZEZEZEZEZEZNoEZEZEZEZEZNuEZEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbabdaTaaaVbabbbfaWbdaZeFNlNvNxNwNldfbbbgbcaVaWaUbaadaZaXbaaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNjVjVaNaNaNaNMTNpNpNfJVNqNrMCMwNsKQNsMwMJMJNtJVMTNpNpNfaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuzdyEzezuIQISIUNyNzNzNANzNzNByGaNaNaNaNEZNDNCNFEZKKFtNNRsNGEZaNaNEZNHNLNKNONMEZEZNPNKNRNQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaWbgbaaiaYaWbebcbfbgbbcCNENSNVNUNEeXbeaSaZaYbfbdaWahbbaTaWaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNjVjVaNaNaNaNaNaNaNaNJVMCMCMCJVJVLxJVJVNIMJNJJVaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuzdyEzezuIQISIUNWFMFMFMFMFMNXyGaNaNaNaNEZOaNYOcObKKFtFtFtOdEZaNaNEZNHNLNKNONMEZEZNPNKNKNQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbfaSaWanaXbfaUaZbcaScBfNNEOeOgOfNEcAdeaVbbaXbcbgbfafbebabfaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNJVMCMCOhJVKQKQKQJVMJMJNTJVaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuzdyEzezuIQISIUzdyEyEyEyEyEzeyGaNaNaNaNEZOiOiOiEZOkOjLuLuLpEZaNaNEZNHNLNKNONMEZEZEZNKEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbcaVbfaeaTbcbdbbaZaVdeNENENEOlNENENEelaYbeaTaZaSbcabaUaWbcaNaNaNaNaNaN +aNhvaPjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNJVJVNZMCJVKEKQKHJVOoOnJVJVaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuyUyEyWzuIQIQKXzdyEDQDQDQyEzeyGaNaNaNaNEZOpOpOpEZEZEZOqEZEZEZaNaNEZEZEZEZEZEZEZEZOrNKOuOsEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZaYbcakbaaZbgbebbaYfPOvOxOwOwOwOyOvdfaXaUbabbaVaZajbdbfaZaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNMTJVJVJVJVOmOmOmJVJVJVJVNfaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQJiJjyEJkJiIQISIUzdyEzdyEzeyEzeyGaNaNaNaNEZEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEZEZEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbbaXaZaoaWbbaSaUbeaXfROzOAOwOwOwOBOzeXaTbdaWbeaYbbagbgbcbbaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNjVjVaNaNaNaNaNaNaNaNMTJVMUMUMUMUMUJVNfaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkOEMkOFMkzuIQIQIQIRyGDbyEICyGIQISIUzQDQzQOtDRDQDRyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbeaTbbacbfbeaVbdaUaTfSOzOGOwOwOwOJOzcAbabgbfaUaXbeamaSaZbeaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNMTNpNpNpNpNpNfaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGzdyEzeyGyGyGyGyGyGyGyGyGyGyGyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaUbabeadbcaUaYbgbdbaeEOzOKOwOwOwOLOzcTaWaSbcbdaTaUalaVbbaUaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGOPDQDRyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbdaWaUahaZbdaXaSbgaWdfOzOROQOwOwOSOzcBbfaVaZbgbabdaaaYbebdaNaNaNaNaNaN +aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCODOTODOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbgbfbdafbbbgaTaVaSdfeXNlOUOwOwOwOVNldeeXaYbbaSaWbgaiaXaUbgaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOHOIODOXOWOYODOIOHOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaSbcbgabbeaSbaaYaVeXNENENENEOlNENENENEcAaXbeaVbfaSanaTbdaSaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOIOMONOXOWOYONOOOIOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaVaZaSajaUaYbfaTaXcTNEOZPbOwOwOwPdPcNEelbdbdaXaZaVaebabgaVaNaNaNaNaNaN +aNhvaPjVjVjVaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCODOIODOXOWOYODOIODOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaYbbaVagbdaXbcaWaTcBOvOwOwOwOwOwOwOwOvdeaWaWaTbbaYakaWaSaYaNaNaNaNaNaN +aNhvaPjVaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOIOIOXOWOYOIOIPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaXbeaYambgaTaZaWbadeOzOwOwPgPiPhOwOwOzelbfaSbabeaXaobfaVaXaNaNaNaNaNaN +aNhvaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCOCOCOCOCOCOCOCOCOCPjPkPkOXOWOYPaPaPoOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaTaUaXalaSbabbbfaWelOzOwOwPpPrPqOwOwOzeFbcaVaWaUaTacbcaYaTaNaNaNaNaNaN +aNhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOWOWOWOWOWOWOWOWOWOWOCOCPsOCOCOWOCOCPsOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbabdaTaaaVaWbebcbfeFOzOwOwPpPtPqOwOwOzcCaZaYbfbdbaadaZaXbaaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCOCOCOCPuOCOCOCOWOWOWOWOWOWOCOWOCOWOWOWOWOWOWOWOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaWbgbaaiaYbfaUaZbccCOzOwOwPvPxPwOwOwOzfNbbaXbcbgaWahbbaTbfaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPlPmPmPmPmPnOCOCOCOCOCOCOCOCPyOCOCOCOCOCOCOCOCOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbfaSaWanaXbcbdbbaZfNNlOwOwOwOwOwOwOwNlczbeaTaZaSbfafbebaaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPlPmPmPmPmPnOCPCPBPDPBPGPFPFPFPFPFPGPFPGPFPIOCOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbcaVbfaeaTaZbgbebbczNEOwPMPLPOPNPMOwNEfPaUbabbaVbcabaUaWbcaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPzPmPmPmPmPAOCPFPQPQPQPQPQPFPFPFPQPQPQPQPRPTOCOWOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZaYbcakbabbaSaUbefPNENEPEPVPEQaPHNENEfRbdaWbeaYaZajbdbfaZaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPzQbPJPJPmPmPKPFPFQgQfQgPFPFPFPFPFQgQfQgQiPFOCOWOWOWOWOWOWOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbbaXaZaoaWbeaVbdaUfRfSNEQkPPQpPPQqNEcAfSbgbfaUaXbbagbgbcbbaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOWOCOCPSPSPSPSPSOCPFPQPQPQPQPQPFPFPFPQPQPQPQQrPFOCPUPUPUPUPUOCOWOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbeaTbbacbfaUaYbgbdbaeENENcQtQtQtNdNEcTaWaSbcbdaTbeamaSaZbeaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOWOCOCPWPWPWPWPWOCPXPXPXPXPXPXPXPXPXPXPXPXPXPYPXOCPZPZPZPZPZOCOWOWPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaUbabeadbcbdaXaSbgaWdffNOzQuQuQuOzczcBbfaVaZbgbaaUalaVbbaUaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCOCOCQxQxQxQxQxOCQcQdQdQdQdQdQdQdQdQdQdQdQdQeQcOCQAQAQAQAQAOCOCOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbdaWaUahaZbgaTaVaSbfaXeXOzQuQCQuOzfNaTbcaYbbaSaWbdaaaYbebdaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQjQjQjQjQjQGQdQdQdQdQdQdQdQdQdQdQdQdQdQeQdQGQlQlQlQlQlQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbgbfbdafbbaSbaaYaVbcaTcAOzQuQuQuOzczbaaZaXbeaVbfbgaiaXaUbgaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQjQnQjQnQjQGQdQdQdQdQdQdQdQdQdQdQdQdQdQeQdQGQlQoQlQoQlQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaSbcbgabbeaVaWaXaYaZbacTQHNbNbNbQIfPaWbbaTaUaYbcaSanaTbdaSaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQjQjQKQjQjQGQdQdQdQdQdQdQsQOQsQdQdQdQdQeQdQGQlQlQPQlQlQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaVaZaSajaUaYbfaTaXbbaWcBcAeFdeeXcCfRbfbebabdaXaZaVaebabgaVaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQvQvQvQvQvQGQdQdQdQdQdQdQwQQQwQdQdQdQdQeQdQGQyQyQyQyQyQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaYbbaVagbdaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaYakbfaSaYaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQvQzQvQzQvQGQdQdQdQdQdQdQRQBQSQdQdQdQdQeQdQGQyQDQyQDQyQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaXbeaYambgaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaXaobfaVaXaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCOIQTQvQvQvQvQvQGQdQdQdQdQdQdQdQFQdQdQdQdQdQeQdQGQyQyQyQyQyQTOIOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaTaUaXaladaganalamaoaiacakafadaeabalanacaaahamakajacbcaYaTaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQUOCQVQVQVQVQVOCQcQdQdQdQdQdQdQFQdQdQdQdQdQeQcOCQVQVQVQVQVOCQUOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbabdaTbcaVaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdbaaSaZaXbaaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPjQWOIOCQJQJQJQJQJOCPXPXPXPXPXPXQXQLQXPXPXPXPXPYPXOCQMQMQMQMQMOCOIQNPoOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaWaSaWbbaXbfaUaZbcaSbeaVbgaTaYbdbaaZaUaVbbaXbcbgbfaYbebaaWaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOIOCOCOCOCOCOCOCQZQYQYQYQYQYRbRaQZQYQYQYQYRcQZOCOCOCOCOCOCOCOIOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbfaVbfbeaTbcbdbbaZaVaUaYaSbaaXbgaWbbbdaYbeaXaTaSbcaXaUaWbfaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOIOIOWOWOWOWOWOCQZQZRdQZRdQZQZReRfQZRdQZRdRgQZOCOWOWOWOWOWOIOIOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCOCOCOCOWRhQZQZQZRiRiRiQZQZQZRiRiRiRiRiQZRhOWOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCRjRjRjRkRmRlRnQZRpRoRrRqRuRtRvOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +"} diff --git a/maps/Aurora-MapDev/aurora-1.dmm b/maps/Aurora-MapDev/aurora-1.dmm new file mode 100644 index 00000000000..3341ca6eea6 --- /dev/null +++ b/maps/Aurora-MapDev/aurora-1.dmm @@ -0,0 +1,261 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/space,/area/syndicate_station/under) +"c" = (/turf/space,/area/skipjack_station/under) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaacaaaaacaaacaacaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccaaacccccccaaaccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccaacccccccccaaccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccaacccccccccaaccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbabbbbbabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbabbbbbabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaaaaaaabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/Aurora-MapDev/aurora-2.dmm b/maps/Aurora-MapDev/aurora-2.dmm new file mode 100644 index 00000000000..9c2ed641e33 --- /dev/null +++ b/maps/Aurora-MapDev/aurora-2.dmm @@ -0,0 +1,2307 @@ +"aa" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored) +"ab" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ac" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"ad" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ae" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/power) +"af" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ag" = (/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ah" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 5"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ai" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aj" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ak" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"al" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"am" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 6"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"an" = (/obj/machinery/door/airlock/hatch{name = "Engine Access";req_access = list(11)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ao" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Engine Fore Airlock";dir = 8;icon_state = "camera"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ap" = (/obj/machinery/power/smes/buildable,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aq" = (/obj/machinery/light{dir = 1},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ar" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/meeting) +"as" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/outpost/engineering/meeting) +"at" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"au" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"av" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aw" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ax" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ay" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"az" = (/obj/machinery/computer/security/engineering,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aA" = (/obj/machinery/computer/power_monitor,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aB" = (/obj/machinery/computer/station_alert,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Breakroom"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aC" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aD" = (/obj/machinery/vending/coffee,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aE" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aF" = (/turf/simulated/wall,/area/outpost/engineering/meeting) +"aG" = (/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/gloves/yellow,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aH" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Storage"},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aJ" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aL" = (/obj/machinery/power/emitter,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aN" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aO" = (/obj/machinery/door/airlock/hatch{name = "Engine Access";req_access = list(11)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aP" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aQ" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"aR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aS" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aT" = (/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aV" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/meeting) +"aW" = (/obj/structure/table/steel,/obj/item/weapon/storage/briefcase/inflatable,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aX" = (/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"aZ" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"ba" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bb" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"be" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bk" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bo" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"br" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bs" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bt" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/meeting) +"bu" = (/obj/structure/table/steel,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plastic{amount = 10},/obj/item/stack/material/wood{amount = 30},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bw" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/item/stack/cable_coil,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bx" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"by" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bz" = (/obj/structure/cable,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bB" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bC" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bD" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bF" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bG" = (/obj/structure/table/standard,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bH" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bJ" = (/obj/structure/table/steel,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bL" = (/obj/structure/table/rack,/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bM" = (/obj/machinery/shower{icon_state = "shower";dir = 4;pixel_x = 0;pixel_y = 0},/obj/structure/curtain/open/shower/engineering,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"bN" = (/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"bO" = (/obj/machinery/door/airlock/engineering{name = "Restrooms";req_access = list(10)},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"bP" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"bQ" = (/obj/effect/landmark{name = "carpspawn"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bS" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bT" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bV" = (/obj/machinery/power/terminal,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"bW" = (/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"bX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/table/standard,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bY" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"bZ" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"ca" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/meeting) +"cb" = (/obj/structure/table/steel,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cc" = (/obj/machinery/pipedispenser,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cd" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack{pixel_x = -4;pixel_y = 3},/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/stack/medical/ointment{pixel_y = 10},/obj/item/stack/medical/bruise_pack{pixel_x = -4;pixel_y = 3},/obj/machinery/camera/network/engineering_outpost{icon_state = "camera";dir = 5},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Restrooms";dir = 4;icon_state = "camera"},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"ce" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"cf" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cg" = (/obj/machinery/field_generator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ch" = (/obj/machinery/field_generator,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ci" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ck" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cn" = (/obj/machinery/power/smes/buildable/outpost_substation,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Collector Array Fore";dir = 5;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"co" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cp" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"cr" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"cs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting) +"ct" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cu" = (/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cx" = (/obj/machinery/pipedispenser/disposal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cy" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"cz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"cA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"cB" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"cC" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 4";dir = 4;icon_state = "camera"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cE" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cF" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cG" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cH" = (/obj/machinery/floodlight,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cI" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cJ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cK" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cL" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/weapon/pickaxe,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cM" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cN" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cO" = (/obj/machinery/floodlight,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting) +"cP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"cQ" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cR" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cT" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cU" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cV" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Particle Emitter";dir = 2;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cW" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = 36},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cX" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"cY" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/hallway) +"cZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/hallway) +"da" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) +"db" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/airlock/glass_engineering{name = "Break Room";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) +"dd" = (/turf/simulated/wall,/area/outpost/engineering/hallway) +"de" = (/obj/machinery/door/airlock/engineering{name = "Restrooms";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting) +"df" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dh" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"di" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dj" = (/obj/machinery/particle_accelerator/control_box,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dk" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Particle Emitter";dir = 9;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dl" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dm" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dn" = (/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"do" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dq" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"ds" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dt" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"du" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dv" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Corridor Camera 4";dir = 2;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dw" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dx" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dy" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dz" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dB" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dC" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dD" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/power) +"dE" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dF" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dH" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dL" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dM" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dN" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dO" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "eng_sl_eva_inner";locked = 1;luminosity = 1;name = "Engineering Sub-Level EVA";req_access = list(10,13)},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"dP" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "eng_sl_eva_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "eng_sl_eva_airlock";name = "Engineering Sub-level Airlock Console";pixel_y = 25;req_access = list(13,10);tag_airpump = "eng_sl_eva_pump";tag_chamber_sensor = "eng_sl_eva_sensor";tag_exterior_door = "eng_sl_eva_outer";tag_interior_door = "eng_sl_eva_inner"},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"dQ" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/airlock_sensor{master_tag = "eng_sl_eva_sensor";pixel_y = 26},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"dR" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "eng_sl_eva_outer";locked = 1;luminosity = 1;name = "Engineering Sub-Level EVA";req_access = list(10,13)},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"dS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dV" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"dW" = (/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dX" = (/obj/machinery/light,/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Corridor Camera 3";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dY" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"dZ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"ea" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Corridor Camera 2";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"ec" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"ed" = (/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"ee" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "eng_sl_eva_pump"},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"ef" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 3";dir = 4;icon_state = "camera"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eg" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eh" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ei" = (/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"ej" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway) +"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"el" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "eng_sl_eva_airlock";name = "interior access button";pixel_x = 26;pixel_y = 8;req_access = list(10,13)},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"em" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "eng_sl_eva_airlock";name = "exterior access button";pixel_x = -26;pixel_y = 8;req_access = list(10,13)},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"en" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ep" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eq" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"er" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"es" = (/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"et" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eu" = (/obj/machinery/power/tesla_coil,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"ev" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/storage) +"ew" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"ex" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ey" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Collector Array Aft"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ez" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel -Tesla Parts Storage";dir = 5;icon_state = "camera"},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eC" = (/obj/machinery/power/tesla_coil,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eD" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Engine Aft Airlock";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"eE" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eF" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eJ" = (/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/power) +"eK" = (/obj/structure/particle_accelerator/end_cap{icon_state = "end_cap";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eL" = (/obj/machinery/power/grounding_rod,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eM" = (/obj/machinery/power/grounding_rod,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"eO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"eP" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"eQ" = (/turf/simulated/wall/r_wall,/area/maintenance/sublevel) +"eR" = (/turf/simulated/wall/r_wall,/area/mine/unexplored) +"eS" = (/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"eT" = (/obj/structure/particle_accelerator/particle_emitter/center{icon_state = "emitter_center";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eU" = (/obj/structure/particle_accelerator/fuel_chamber{icon_state = "fuel_chamber";dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eV" = (/obj/structure/particle_accelerator/power_box{icon_state = "power_box";dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eW" = (/obj/machinery/power/grounding_rod,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"eX" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"eY" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"eZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) +"fa" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) +"fb" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"fc" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"fd" = (/turf/simulated/mineral/random,/area/mine/unexplored) +"fe" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"ff" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fh" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fj" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fk" = (/obj/structure/particle_accelerator/particle_emitter/left{icon_state = "emitter_left";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"fl" = (/obj/item/toy/figure/engineer,/obj/machinery/the_singularitygen/tesla,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"fm" = (/obj/structure/particle_accelerator/particle_emitter/right{icon_state = "emitter_right";dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage) +"fn" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor,/turf/simulated/floor,/area/outpost/engineering/hallway) +"fo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"fp" = (/obj/machinery/power/emitter{icon_state = "emitter";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fq" = (/obj/machinery/light{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fs" = (/turf/simulated/floor/tiled,/area/turbolift/engineering_maintenance) +"ft" = (/turf/simulated/floor/tiled,/area/turbolift/research_maintenance) +"fu" = (/obj/machinery/door/window/northleft,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fv" = (/obj/machinery/door/window/northright,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fy" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Engine Aft Airlock";dir = 8;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fA" = (/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fC" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 1";dir = 1;icon_state = "camera"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fD" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fE" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fF" = (/obj/machinery/light,/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fG" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 2";dir = 1;icon_state = "camera"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"fH" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fI" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fJ" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"fK" = (/obj/turbolift_map_holder/aurora/engineering,/turf/simulated/floor/tiled,/area/turbolift/engineering_maintenance) +"fL" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"fN" = (/turf/simulated/mineral/random,/area/turret_protected/ai) +"fO" = (/obj/structure/sign/securearea{name = "\improper DANGER: REACTOR VENT SHAFT"},/turf/simulated/wall/r_wall,/area/mine/unexplored) +"fP" = (/turf/simulated/wall/r_wall,/area/security/nuke_storage) +"fQ" = (/turf/simulated/open,/area/mine/unexplored) +"fR" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"fS" = (/obj/machinery/door/window{base_state = "right";dir = 2;icon_state = "left";name = "Core Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/corp,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"fT" = (/obj/machinery/door/window{base_state = "right";dir = 2;icon_state = "right";name = "Core Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/nanotrasen,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"fU" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/open,/area/mine/unexplored) +"fV" = (/obj/item/weapon/hand_tele,/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage) +"fW" = (/obj/item/weapon/aiModule/freeformcore{pixel_x = -4;pixel_y = -8},/obj/item/weapon/aiModule/purge,/obj/item/weapon/aiModule/oneHuman{pixel_x = 4;pixel_y = 8},/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage) +"fX" = (/obj/item/weapon/rig/hazmat,/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage) +"fY" = (/obj/item/rig_module/device/rcd,/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage) +"fZ" = (/obj/effect/decal/warning_stripes,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southright,/mob/living/bot/secbot/ed209{on = 0},/turf/simulated/floor{icon_state = "bcircuitoff"},/area/security/nuke_storage) +"ga" = (/turf/simulated/floor/tiled,/area/turbolift/vault_sub) +"gb" = (/obj/machinery/computer/aiupload,/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = 22},/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gc" = (/obj/structure/table/standard,/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai) +"ge" = (/obj/machinery/alarm/cold{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gf" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gg" = (/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gh" = (/obj/effect/decal/warning_stripes,/obj/machinery/porta_turret{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gi" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gj" = (/obj/machinery/door/window/southleft,/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gk" = (/obj/structure/closet/secure_closet/freezer/money,/obj/item/weapon/storage/belt/champion,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage) +"gl" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/obj/machinery/camera/motion{c_tag = "Secure Vault";dir = 4},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gm" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gn" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"go" = (/obj/structure/sign/biohazard{pixel_x = -32},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Entrance";dir = 5;icon_state = "camera"},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/white,/area/mine/unexplored) +"gp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/security/nuke_storage) +"gq" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station) +"gr" = (/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station) +"gs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station) +"gt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/cyan{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station) +"gu" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station) +"gv" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer) +"gw" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/effect/decal/cleanable/dirt,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gx" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gy" = (/obj/machinery/porta_turret{dir = 4},/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gz" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai) +"gA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gB" = (/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gC" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gD" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gE" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Beta Core 2";dir = 1},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gF" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gG" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gH" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"gI" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gJ" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"gL" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/mine/unexplored) +"gM" = (/obj/effect/decal/warning_stripes,/obj/machinery/nuclearbomb/station,/turf/simulated/floor/reinforced,/area/security/nuke_storage) +"gN" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gO" = (/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gP" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gQ" = (/obj/machinery/door/airlock/vault/bolted,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gR" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gT" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/turretid/lethal{ailock = 1;check_synth = 1;control_area = "\improper Vault";desc = "A firewall prevents AIs from interacting with this device.";name = "Vault lethal turret control";pixel_y = 29;req_access = list(20)},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"gV" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"gW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station) +"gX" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station) +"gY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"gZ" = (/obj/structure/closet/crate{name = "Camera Assembly Crate"},/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/camera/network/command{c_tag = "AI Core - Cyborg Storage"},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"ha" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"hb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station) +"hc" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"hd" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"he" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/camera/network/command{c_tag = "AI Core - Upload Access"},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"hf" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hg" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hh" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai) +"hi" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/porta_turret{dir = 4},/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"hk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"hl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"hm" = (/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1343;name = "Private Channel";pixel_x = 26;pixel_y = 0},/obj/item/device/radio/intercom{broadcasting = 1;listening = 1;name = "Common Channel";pixel_x = -27;pixel_y = 0},/obj/item/device/radio/intercom{listening = 0;name = "Custom Channel";pixel_x = 0;pixel_y = -27},/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/effect/landmark{name = "tripai"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"hn" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"ho" = (/obj/structure/safe/station,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage) +"hp" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/machinery/camera/motion{c_tag = "Secure Vault";dir = 4},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"hq" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"hr" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"hs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/asteroid,/area/mine/explored) +"ht" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"hu" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"hv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station) +"hw" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"hx" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/turret_protected/ai_cyborg_station) +"hy" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/cleanable/blood/oil,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"hz" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/turret_protected/ai_cyborg_station) +"hA" = (/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"hB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station) +"hC" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"hD" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/porta_turret,/obj/effect/decal/warning_stripes,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"hE" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"hF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hH" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/cyan{d2 = 4;icon_state = "0-4"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/ai) +"hI" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai) +"hJ" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai) +"hK" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"hL" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hM" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"hN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"hO" = (/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"hP" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - AI Subgrid";name_tag = "AI Subgrid"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"hQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"hT" = (/obj/item/rig_module/vision/thermal,/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage) +"hU" = (/obj/item/rig_module/mounted/egun{pixel_x = 4;pixel_y = 4},/obj/item/rig_module/mounted/egun{pixel_x = -4;pixel_y = -4},/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage) +"hV" = (/obj/item/weapon/rig/hazard{pixel_x = -8;pixel_y = 0},/obj/item/weapon/rig/hazard{pixel_x = 8;pixel_y = 0},/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/rig/unathi{pixel_y = -6},/turf/simulated/floor/plating,/area/security/nuke_storage) +"hW" = (/obj/item/rig_module/chem_dispenser/combat,/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage) +"hX" = (/obj/effect/decal/warning_stripes,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northright,/mob/living/bot/secbot/ed209{on = 0},/turf/simulated/floor{icon_state = "bcircuitoff"},/area/security/nuke_storage) +"hY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"hZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station) +"ia" = (/obj/machinery/cryopod/robot,/obj/item/toy/figure/borg,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station) +"ib" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"ic" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"id" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station) +"ie" = (/obj/machinery/cryopod/robot,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station) +"if" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"ig" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"ih" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = 27;pixel_y = -5},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"ii" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/motion{c_tag = "AI Core - Upload Room";dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"ij" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"ik" = (/obj/machinery/hologram/holopad,/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"il" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ai_core_outer";locked = 1;name = "Outer Core Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{temperature = 273.15},/area/turret_protected/ai) +"im" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "ai_core_airlock";name = "exterior access button";pixel_x = 27;pixel_y = -26;req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"in" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ai_core_inner";locked = 1;name = "Inner Core Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/turf/simulated/floor/plating{temperature = 273.15},/area/turret_protected/ai) +"io" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "ai_core_airlock";name = "AI Core airlock controller";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "ai_core_pump";tag_chamber_sensor = "ai_core_sensor";tag_exterior_door = "ai_core_outer";tag_interior_door = "ai_core_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "ai_core_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/light/small,/obj/effect/decal/warning_stripes,/obj/effect/decal/remains/mouse,/obj/machinery/camera/network/command{c_tag = "AI Core - Core Airlock"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "ai_core_pump"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{temperature = 273.15},/area/turret_protected/ai) +"ip" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/ai_slipper{icon_state = "motion0"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"iq" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "ai_core_airlock";name = "interior access button";pixel_x = -27;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"ir" = (/obj/machinery/flasher{id = "AI";pixel_x = 22;pixel_y = 36},/obj/machinery/turretid/stun{check_synth = 1;name = "AI Chamber turret control";pixel_x = 36;pixel_y = 36},/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "AI Core Door";req_access = list(16)},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"is" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"it" = (/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"iu" = (/obj/item/device/radio/intercom{listening = 0;name = "Custom Channel";pixel_x = 0;pixel_y = 19},/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1343;name = "Private Channel";pixel_x = 0;pixel_y = -26},/obj/item/device/radio/intercom{broadcasting = 1;listening = 1;name = "Common Channel";pixel_x = 27;pixel_y = -3},/obj/machinery/newscaster/security_unit{pixel_x = 32;pixel_y = 32},/obj/machinery/requests_console{department = "AI";departmentType = 5;pixel_x = 32;pixel_y = -32},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the AI core maintenance door.";id = "AICore";name = "AI Maintenance Hatch";pixel_x = 17;pixel_y = 25;req_access = list(20)},/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan{d2 = 4;icon_state = "0-4"},/obj/effect/landmark/start{name = "AI"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"iv" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iw" = (/obj/effect/decal/warning_stripes,/obj/machinery/light/small{dir = 8},/obj/structure/cable/cyan,/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/machinery/power/smes/buildable{charge = 5e+006;input_attempt = 1;input_level = 200000;output_attempt = 1;output_level = 200000},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"ix" = (/obj/effect/decal/warning_stripes,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/porta_turret{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"iA" = (/obj/machinery/camera/network/command{c_tag = "AI Core - SMES Room";dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iB" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/wall,/area/turret_protected/ai) +"iC" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall,/area/mine/unexplored) +"iD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored) +"iE" = (/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station";req_access = list(16)},/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"iF" = (/obj/machinery/door/window/northleft{req_access = list(16)},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 1},/area/turret_protected/ai_upload_foyer) +"iG" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"iH" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"iI" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iJ" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload";req_access = list(16)},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"iK" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/ai) +"iL" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iM" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai) +"iN" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/ai) +"iO" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"iP" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iQ" = (/obj/machinery/power/apc/super/critical{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/command{c_tag = "AI Core - Alpha Core";dir = 8},/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"iR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"iS" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"iT" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"iU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iV" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iW" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"iX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall,/area/turret_protected/ai) +"iY" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_server_room) +"iZ" = (/obj/machinery/shieldwallgen,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"ja" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jc" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jd" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/ramp{icon_state = "ramptop";dir = 1},/area/turret_protected/ai_upload_foyer) +"je" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jf" = (/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jg" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai) +"jh" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/porta_turret{dir = 4},/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"ji" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jj" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jk" = (/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jl" = (/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1343;name = "Private Channel";pixel_x = 26;pixel_y = 0},/obj/item/device/radio/intercom{broadcasting = 1;listening = 1;name = "Common Channel";pixel_x = -27;pixel_y = 0},/obj/item/device/radio/intercom{listening = 0;name = "Custom Channel";pixel_x = 0;pixel_y = 19},/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan,/obj/effect/landmark{name = "tripai"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jm" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jn" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/wall,/area/mine/unexplored) +"jo" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall,/area/mine/unexplored) +"jp" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/wall,/area/mine/unexplored) +"jq" = (/turf/simulated/floor/bluegrid,/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/machinery/hologram/holopad,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor{icon_state = "siding15"},/area/turret_protected/ai_server_room) +"jr" = (/obj/machinery/computer/message_monitor,/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room) +"js" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jt" = (/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"ju" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jv" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jw" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jx" = (/obj/machinery/hologram/holopad,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jy" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jz" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/freeform,/obj/item/weapon/aiModule/protectStation,/obj/effect/decal/cleanable/dirt,/obj/item/trash/chips,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jA" = (/obj/structure/bed/chair/office/dark,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jB" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/cable/cyan,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai) +"jC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm/cold{dir = 1;pixel_y = -22},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jF" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jH" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Beta Core 1"},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jI" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"jJ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jK" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jL" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jM" = (/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/up/supply,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"jN" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"jO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room) +"jP" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room) +"jQ" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jR" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server";req_access = list(16)},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jS" = (/obj/machinery/porta_turret,/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jT" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jU" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = -27},/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jV" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access";req_access = list(16)},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jW" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"jX" = (/obj/machinery/computer/borgupload,/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = -27},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jY" = (/obj/machinery/computer/robotics,/obj/effect/decal/cleanable/dirt,/obj/machinery/status_display{pixel_y = -32},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"jZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"ka" = (/obj/machinery/door/window/northright,/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai) +"kb" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kc" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "sl1";pixel_x = 26},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ke" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kf" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kg" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kh" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room) +"ki" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Messaging Server";dir = 1},/obj/machinery/blackbox_recorder,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room) +"kj" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"kk" = (/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "High-Risk Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/teleporterOffline,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/purge,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"kl" = (/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "right";name = "High-Risk Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/oneHuman,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/freeformcore,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai) +"km" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ko" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl1i";locked = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ks" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kt" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "sl1p"},/obj/machinery/airlock_sensor{id_tag = "sl1s";pixel_y = -26},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ku" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "sl1";pixel_y = 32;tag_airpump = "sl1p";tag_chamber_sensor = "sl1s";tag_exterior_door = "sl1o";tag_interior_door = "sl1i"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kw" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl1o";locked = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"ky" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kA" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kB" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Lobby";dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"kC" = (/obj/machinery/shieldwallgen,/obj/structure/cable/cyan,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"kD" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Cavern Entrance";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "sl1";pixel_x = -26},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/maintenance/sublevel) +"kE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"kF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"kG" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"kH" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning/dust,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kJ" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kK" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"kL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"kM" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -32;pixel_y = -5},/obj/machinery/turretid/stun{control_area = null;name = "AI Upload turret control";pixel_x = 24;pixel_y = 6},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"kN" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/motion{c_tag = "AI Core - Entrance";pixel_x = 16},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"kO" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"kP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"kQ" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"kR" = (/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/asteroid,/area/turret_protected/ai_upload_foyer) +"kS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"kT" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"kU" = (/obj/machinery/light/small{dir = 1},/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/structure/table/standard,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/outpost/research/analysis) +"kV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"kW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"kX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker) +"kY" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"kZ" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"la" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker) +"lb" = (/turf/simulated/wall/r_wall,/area/outpost/research/analysis) +"lc" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"ld" = (/obj/structure/reagent_dispensers/coolanttank,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"le" = (/turf/simulated/floor/asteroid,/area/mine/unexplored) +"lf" = (/turf/simulated/wall,/area/mine/explored) +"lg" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"lh" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"li" = (/obj/machinery/radiocarbon_spectrometer,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/outpost/research/analysis) +"lj" = (/obj/structure/ore_box,/turf/simulated/floor/asteroid,/area/mine/explored) +"lk" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Sample Analysis";dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"ll" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"lm" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"ln" = (/turf/simulated/wall/r_wall,/area/bridge/aibunker) +"lo" = (/turf/simulated/wall/r_wall,/area/outpost/research/anomaly_analysis) +"lp" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"lq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/anomaly_analysis) +"lr" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/head/helmet/space/emergency,/obj/item/clothing/suit/space/emergency,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"ls" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lt" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/tiled/dark,/area/space) +"lu" = (/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lv" = (/obj/machinery/cryopod,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lw" = (/obj/structure/cryofeed,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lx" = (/obj/structure/closet,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ly" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"lz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"lA" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"lB" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"lC" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"lD" = (/obj/machinery/alarm{dir = 2;pixel_y = 25},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"lE" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"lF" = (/obj/structure/sign/nosmoking_2{pixel_x = 0;pixel_y = 32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"lG" = (/obj/machinery/conveyor{dir = 1;id = "anolaser"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"lH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"lI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis) +"lJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"lK" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"lL" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "sl3";pixel_x = 26},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"lM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker) +"lN" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/asteroid,/area/turret_protected/ai_upload_foyer) +"lO" = (/obj/machinery/door/airlock/highsecurity{name = "Ladder Access";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lP" = (/obj/machinery/light/small/emergency,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker) +"lQ" = (/obj/structure/bed/chair,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"lT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/anomaly_analysis) +"lU" = (/obj/structure/table/steel,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"lV" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"lW" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"lX" = (/obj/structure/table/steel,/turf/simulated/floor/asteroid,/area/mine/explored) +"lY" = (/obj/structure/table/rack,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"lZ" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Anomalous Materials Storage";dir = 8},/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"ma" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mc" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"md" = (/obj/machinery/artifact_analyser,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_analysis) +"me" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mf" = (/obj/machinery/conveyor{dir = 1;id = "anolaser"},/obj/structure/plasticflaps,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"mg" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_analysis) +"mh" = (/obj/machinery/conveyor_switch{id = "anolaser"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mi" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Spectrometry Lab";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/analysis) +"mj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"mk" = (/turf/simulated/wall/r_wall,/area/outpost/research/emergency_storage) +"ml" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"mm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"mn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"mo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"mp" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"mq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl3o";locked = 1},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"mr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "sl3";pixel_y = 32;tag_airpump = "sl3p";tag_chamber_sensor = "sl3s";tag_exterior_door = "sl3o";tag_interior_door = "sl3i"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ms" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "sl3p"},/obj/machinery/airlock_sensor{id_tag = "sl3s";pixel_y = -26},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"mt" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"mu" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl3i";locked = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"mv" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/structure/window/reinforced,/obj/machinery/status_display{layer = 4;pixel_x = 32;pixel_y = 0},/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"mw" = (/obj/machinery/light/small{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -25;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mx" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"my" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mz" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mA" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mB" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mC" = (/obj/machinery/power/emitter{anchored = 1;dir = 4;state = 2},/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mD" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mE" = (/obj/machinery/conveyor{dir = 1;id = "anolaser"},/obj/machinery/door/window/westleft{dir = 2;layer = 3.1;name = "laser testing";req_access = list(65)},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"mF" = (/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mG" = (/obj/machinery/door/window/westleft{dir = 4;name = "Monkey Pen";req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"mH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"mI" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Corridor Camera 6"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"mJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"mK" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"mL" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/gloves{pixel_x = 4;pixel_y = 5},/obj/item/weapon/storage/box/samplebags{pixel_x = 3;pixel_y = -3},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5;pixel_y = 5},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"mM" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "sl3";pixel_x = -26},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"mN" = (/obj/machinery/power/emitter{anchored = 1},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"mO" = (/obj/machinery/suspension_gen,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"mP" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mQ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mR" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mS" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mT" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/obj/machinery/camera/network/command{c_tag = "AI Core - AI Maintenance Bunker";dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mU" = (/obj/structure/bed/chair{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"mV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/bridge/aibunker) +"mW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mX" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"mY" = (/obj/structure/closet/crate,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"mZ" = (/obj/machinery/floodlight,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"na" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"ne" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nf" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"ng" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nh" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ni" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nl" = (/obj/machinery/door/airlock/research{name = "Supply Closet";req_access = list(65)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/emergency_storage) +"nm" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nn" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"no" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5;pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5;pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"np" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"nq" = (/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"nr" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/highsecurity{name = "Ladder Access";req_access = list(16)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker) +"ns" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/anomaly_analysis) +"nt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nu" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Anomalous Materials Lab";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nv" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"nw" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"nx" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis) +"ny" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nz" = (/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nA" = (/obj/structure/table/rack,/obj/item/clothing/head/welding,/obj/item/weapon/weldingtool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nB" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nC" = (/obj/machinery/light/small,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nD" = (/obj/machinery/door/window/westleft{dir = 2;name = "Monkey Pen";req_access = list(47)},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nF" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nG" = (/obj/structure/closet/hydrant{pixel_x = -32},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"nH" = (/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nI" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"nJ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/maintenance/sublevel) +"nK" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage) +"nL" = (/turf/simulated/floor/plating,/area/maintenance/sublevel) +"nM" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{name = "Anomalous Materials Locker Room";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nN" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials";req_access = list(65)},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis) +"nO" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/asteroid,/area/mine/explored) +"nP" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nQ" = (/obj/machinery/light{dir = 8},/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nS" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nT" = (/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"nU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway) +"nV" = (/turf/simulated/wall/r_wall,/area/outpost/research/anomaly_storage) +"nW" = (/turf/simulated/wall/r_wall,/area/medical/virology) +"nX" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nY" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"nZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oa" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ob" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"od" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage) +"oe" = (/obj/machinery/button/crematorium{id = "patientmurder";pixel_x = -4;pixel_y = 4},/obj/structure/table/standard,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"of" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Medical (Sub-level)";name_tag = "Medical (Sub-level)"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"og" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage) +"oh" = (/obj/machinery/artifact_scanpad,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_storage) +"oi" = (/obj/machinery/artifact_harvester,/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_storage) +"oj" = (/obj/structure/crematorium{id = "patientmurder"},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"ok" = (/obj/machinery/power/smes/buildable{RCon_tag = "Substation - Medical (Sub-level)"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ol" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Medical (Sub-level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"om" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway) +"on" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oo" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"op" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"oq" = (/obj/structure/table/rack,/obj/item/stack/material/steel{amount = 10},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"or" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"os" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ot" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ou" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ov" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ow" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ox" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oy" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/external{name = "Access Airlock";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage) +"oz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage) +"oB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage) +"oC" = (/obj/item/weapon/anodevice{pixel_x = 3;pixel_y = 3},/obj/item/weapon/anodevice,/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage) +"oD" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"oE" = (/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage) +"oF" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"oG" = (/turf/simulated/floor/tiled/dark,/area/medical/virology) +"oH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"oI" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"oJ" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"oK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"oL" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"oM" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small/emergency,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"oN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oO" = (/turf/simulated/wall,/area/mine/unexplored) +"oP" = (/obj/structure/ore_box,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"oQ" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oR" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oS" = (/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oT" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oU" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oV" = (/obj/machinery/light,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Corridor Camera 5";dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oY" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"oZ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage) +"pa" = (/obj/item/weapon/anobattery{pixel_x = -6;pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = -2;pixel_y = -2},/obj/item/weapon/anobattery{pixel_x = 2;pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = 6;pixel_y = 6},/obj/structure/table/steel,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage) +"pb" = (/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage) +"pc" = (/obj/machinery/light/small{dir = 8},/obj/structure/table/standard,/obj/item/device/camera{name = "Autopsy Camera";pixel_x = -2;pixel_y = 7},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Morgue";dir = 4;icon_state = "camera"},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pd" = (/obj/machinery/light/small/emergency{dir = 8},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"pe" = (/obj/effect/landmark/corpse/engineer/rotten,/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"pf" = (/obj/effect/decal/cleanable/blood,/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"pg" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"ph" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"pk" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/maintenance/sublevel) +"pl" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"pm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring) +"pn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring) +"po" = (/turf/simulated/wall/r_wall,/area/outpost/research/isolation_monitoring) +"pp" = (/obj/machinery/door/airlock/research{name = "Anomaly Isolation";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor,/area/outpost/research/isolation_monitoring) +"pq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring) +"pr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring) +"ps" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage) +"pt" = (/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Anomaly Analysis";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage) +"pu" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pv" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pw" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_storage) +"px" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"py" = (/obj/machinery/disposal,/obj/effect/decal/warning_stripes,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/turf/simulated/floor/plating,/area/medical/virology) +"pz" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"pA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"pC" = (/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"pD" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/maintenance/sublevel) +"pE" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"pF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"pG" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pH" = (/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pI" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pJ" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pK" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/structure/window/reinforced{dir = 4},/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pL" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/unexplored) +"pM" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "research_airlock";name = "exterior access button";pixel_x = -25;pixel_y = -25;req_one_access = list(13,65)},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"pN" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pO" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/tape_roll,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pP" = (/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pQ" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"pR" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/autopsy_scanner,/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pS" = (/obj/machinery/optable,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/medical/virology) +"pU" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"pV" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"pW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway) +"pX" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pY" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"pZ" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qa" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qb" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qc" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qd" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/virology) +"qe" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/medical{name = "Virology Morgue";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"qf" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/structure/flora/pottedplant/random,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/white,/area/mine/unexplored) +"qg" = (/turf/simulated/floor/tiled,/area/turbolift/medical_sub) +"qh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/space) +"qi" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/white,/area/space) +"qj" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/space) +"qk" = (/turf/simulated/wall/r_wall,/area/outpost/research/eva) +"ql" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva) +"qm" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "research_outer";locked = 1;name = "Research Outpost External Access";req_access = list(10,13)},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"qn" = (/turf/simulated/wall/r_wall,/area/outpost/research/hallway) +"qo" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Corridor Camera 4";dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"qp" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qq" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qr" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qs" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qt" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qu" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/manifold/visible/supply,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qv" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qw" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qx" = (/obj/structure/table/standard,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three");req_one_access = list(47,24,11)},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qy" = (/obj/structure/table/standard,/obj/item/weapon/folder,/obj/item/device/camera,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qz" = (/obj/structure/closet/medical_wall{pixel_x = 28;pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"qA" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qB" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes{pixel_x = 4;pixel_y = 4},/obj/item/weapon/reagent_containers/dropper,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qC" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qE" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qF" = (/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory";req_access = list(39)},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"qG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qH" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qI" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qJ" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Airlock";dir = 5;icon_state = "camera"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qK" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qL" = (/obj/structure/closet/wardrobe/virology_white,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qN" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"qQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"qR" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/space) +"qS" = (/turf/simulated/floor/tiled/white,/area/space) +"qT" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled/white,/area/space) +"qU" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"qV" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"qW" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"qX" = (/obj/machinery/light/small{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "research_pump";tag_exterior_door = "research_outer";frequency = 1379;id_tag = "research_airlock";tag_interior_door = "research_inner";pixel_x = -25;pixel_y = 0;tag_chamber_sensor = "research_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "research_pump"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Expedition Airlock";dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"qY" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "research_pump"},/obj/structure/closet/walllocker/emerglocker/east,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"qZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ra" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"rb" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Port";dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rc" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rd" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"re" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rf" = (/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rh" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1;tag_south = 2;tag_west = 3},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"ri" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rj" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Starboard";dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rk" = (/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rl" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/device/antibody_scanner,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"ro" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Quarantine Entrance";dir = 4;icon_state = "camera"},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"rq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/junction/yjunction{icon_state = "pipe-y";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rs" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virology_airlock_interior";locked = 1;name = "Virology Interior Airlock";req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rt" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virology_airlock_control";name = "Virology Access Console";pixel_x = 26;pixel_y = 28;tag_exterior_door = "virology_airlock_exterior";tag_interior_door = "virology_airlock_interior"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"ru" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rv" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "virology_airlock_control";name = "Virology Access Button";pixel_x = -26;pixel_y = 28;req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rw" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virology_airlock_exterior";locked = 1;name = "Virology Exterior Airlock";req_access = list(39)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "virology_airlock_control";name = "Virology Access Button";pixel_x = 0;pixel_y = -24;req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"ry" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/sign/v,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rA" = (/obj/machinery/door/airlock/external{name = "Virology Access";req_access = list(39)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rC" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/tiled/white,/area/space) +"rD" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/outpost/research/eva) +"rE" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/outpost/research/eva) +"rF" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/outpost/research/eva) +"rG" = (/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "research_sensor";pixel_x = -25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "research_pump"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"rH" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"rI" = (/obj/structure/ore_box,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "research_pump"},/obj/structure/sign/vacuum{pixel_x = 32},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"rJ" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rK" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rL" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rM" = (/obj/machinery/power/emitter{anchored = 1},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rN" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rO" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"rP" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rT" = (/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory";req_access = list(39)},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rV" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rX" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"rY" = (/obj/machinery/shower{dir = 1},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/medical/virology) +"rZ" = (/obj/machinery/shower{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sa" = (/obj/machinery/shower{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sb" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sc" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "virologyquar";name = "Virology Emergency Lockdown Control";pixel_x = -25;pixel_y = -5;req_access = list(40)},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology) +"sd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/space) +"se" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/space) +"sf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva) +"sg" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "research_inner";locked = 1;name = "Research Outpost External Access"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/outpost/research/eva) +"sh" = (/obj/machinery/atmospherics/unary/freezer{dir = 4;icon_state = "freezer"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"si" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sj" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sk" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sl" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sm" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"sn" = (/obj/machinery/power/smes/buildable{RCon_tag = "Substation - Research (Sub-level)"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"so" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Research (Sub-level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"sp" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"sr" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"ss" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "virologyq_airlock_control";name = "Virology Quarantine Access Button";pixel_x = 32;pixel_y = 0;req_access = list(39)},/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virologyq_airlock_interior";locked = 1;name = "Virology Quarantine Airlock";req_access = list(39)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"st" = (/obj/turbolift_map_holder/aurora/medical,/turf/simulated/floor/tiled,/area/turbolift/medical_sub) +"su" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/space) +"sv" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/tiled/white,/area/space) +"sw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/space) +"sx" = (/obj/structure/closet/excavation,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sy" = (/obj/machinery/light/small{dir = 1},/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sz" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva) +"sB" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "research_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25;req_one_access = list(13,65)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sC" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Expedition Preparation"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sE" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"sF" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/glass_mining{name = "Loading area";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"sG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"sH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"sI" = (/obj/machinery/atmospherics/valve/digital/open,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sJ" = (/obj/machinery/button/remote/airlock{id = "riso1";name = "Door Bolt Control";pixel_x = -25;pixel_y = 0;specialfunctions = 4},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sK" = (/obj/machinery/button/remote/airlock{id = "riso2";name = "Door Bolt Control";pixel_x = 0;pixel_y = -25;specialfunctions = 4},/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sL" = (/obj/machinery/atmospherics/valve/digital/open,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sM" = (/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sN" = (/obj/machinery/button/remote/airlock{id = "riso3";name = "Door Bolt Control";pixel_x = 0;pixel_y = -25;specialfunctions = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sO" = (/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sP" = (/obj/machinery/atmospherics/valve/digital/open,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring) +"sQ" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"sR" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"sS" = (/obj/item/weapon/storage/lockbox/vials,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/structure/table/standard,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 7;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Virology Emergency Phone";pixel_x = -6;pixel_y = 8},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sU" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"sV" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sW" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology North"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"sY" = (/obj/machinery/disease2/diseaseanalyser,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"sZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"ta" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"tb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_wing) +"tc" = (/obj/machinery/door/airlock/external{name = "Patient Recovery Wing Access";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"td" = (/obj/structure/closet/excavation,/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"te" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva) +"tg" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"th" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"ti" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tj" = (/turf/simulated/wall/r_wall,/area/outpost/research/isolation_a) +"tk" = (/obj/machinery/door/airlock/external{id_tag = "riso1";name = "Access Airlock";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a) +"tl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_a) +"tm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_a) +"tn" = (/obj/machinery/door/airlock/external{id_tag = "riso2";name = "Access Airlock";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b) +"to" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_b) +"tp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_b) +"tq" = (/turf/simulated/wall/r_wall,/area/outpost/research/isolation_b) +"tr" = (/obj/machinery/door/airlock/external{id_tag = "riso3";name = "Access Airlock";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c) +"ts" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_c) +"tt" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_c) +"tu" = (/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"tv" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"tw" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"tx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "sl2";pixel_x = -26},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"ty" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/vials,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "virologyquar";name = "Virology Emergency Lockdown Control";pixel_x = -25;pixel_y = 0;req_access = list(5)},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"tz" = (/turf/simulated/floor/tiled/white,/area/medical/virology) +"tA" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"tB" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"tC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"tD" = (/obj/machinery/computer/diseasesplicer,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"tE" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Quarantine Airlock";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"tF" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"tG" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"tH" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"tI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"tJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"tK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"tL" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access = list(5)},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"tM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"tN" = (/obj/structure/closet/excavation,/obj/machinery/light{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Expedition Storage";dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tR" = (/obj/machinery/door/airlock/glass_mining{name = "Equipment storage";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tU" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"tV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a) +"tW" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a) +"tX" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one";dir = 8;pixel_x = 22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a) +"tY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b) +"tZ" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b) +"ua" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two";dir = 8;pixel_x = 22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b) +"ub" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c) +"uc" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c) +"ud" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_three";dir = 8;pixel_x = 22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c) +"ue" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"uf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ug" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"uh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ui" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"uj" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"uk" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ul" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl2i";locked = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"um" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "sl2";pixel_y = -26},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"un" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "sl2p"},/obj/machinery/airlock_sensor{id_tag = "sl2s";pixel_y = -26},/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"uo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "sl2";pixel_y = 32;tag_airpump = "sl2p";tag_chamber_sensor = "sl2s";tag_exterior_door = "sl2o";tag_interior_door = "sl2i"},/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"up" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"uq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl2o";locked = 1},/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ur" = (/obj/structure/bed/padded,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"us" = (/obj/item/roller,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/virology) +"ut" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"uu" = (/obj/machinery/disposal,/obj/effect/decal/warning_stripes,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/medical/virology) +"uv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/tiled/white,/area/medical/virology) +"uw" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"ux" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"uy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"uz" = (/obj/machinery/disease2/isolator,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"uA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"uB" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"uC" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"uD" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/patient_wing) +"uE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"uF" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"uG" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"uH" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing) +"uI" = (/turf/simulated/wall/r_wall,/area/medical/patient_a) +"uJ" = (/turf/simulated/wall/r_wall,/area/medical/patient_b) +"uK" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"uL" = (/turf/simulated/floor/tiled,/area/outpost/research/eva) +"uM" = (/obj/machinery/floodlight,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"uN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva) +"uO" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/door/window{dir = 4;name = "Air Tank Access";req_one_access = list(47,10,24)},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"uP" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"uQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"uR" = (/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/machinery/status_display{layer = 4;pixel_x = 32;pixel_y = 0},/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"uS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"uT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"uU" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a) +"uV" = (/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a) +"uW" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Cell A";dir = 8},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a) +"uX" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b) +"uY" = (/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b) +"uZ" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Cell B";dir = 8},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b) +"va" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c) +"vb" = (/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c) +"vc" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Cell C";dir = 8},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c) +"vd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ve" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Research Sublevel - Cavern Entrance";dir = 4;icon_state = "camera"},/turf/simulated/floor/asteroid,/area/maintenance/sublevel) +"vf" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Cell A";dir = 4;icon_state = "camera"},/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vh" = (/obj/machinery/door/window/westleft{name = "Virology Isolation Cell Alpha";req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"vi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"vk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vm" = (/obj/machinery/computer/centrifuge,/obj/item/weapon/storage/secure/safe{pixel_x = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vn" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virologyq_airlock_exterior";locked = 1;name = "Virology Quarantine Airlock";req_access = list(39)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "virologyq_airlock_control";name = "Virology Quarantine Access Button";pixel_x = -24;pixel_y = 0;req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"vo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/virology) +"vp" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"vq" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"vr" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"vs" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing) +"vt" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"vu" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoA_window_tint";pixel_y = 26},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"vv" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"vw" = (/turf/simulated/wall,/area/medical/patient_a) +"vx" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"vy" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoB_window_tint";pixel_y = 26},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"vz" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"vA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"vB" = (/obj/machinery/suspension_gen,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"vC" = (/obj/machinery/floodlight,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"vD" = (/obj/machinery/door/window{dir = 4;name = "Air Tank Access";req_one_access = list(47,10,24)},/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"vE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"vF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled,/area/outpost/research/eva) +"vG" = (/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/green,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/outpost/research/eva) +"vH" = (/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"vI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"vJ" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a) +"vK" = (/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_a) +"vL" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_a) +"vM" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b) +"vN" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_b) +"vO" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_b) +"vP" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c) +"vQ" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c) +"vR" = (/obj/structure/bed,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c) +"vS" = (/obj/structure/crematorium{id = "slimemurder"},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology) +"vT" = (/obj/machinery/button/crematorium{id = "slimemurder";pixel_x = -4;pixel_y = 4},/obj/structure/table/standard,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Waste Management"},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology) +"vU" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology) +"vV" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vW" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vX" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vY" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"vZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wb" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wc" = (/obj/machinery/smartfridge/secure/virology,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wd" = (/obj/machinery/disease2/incubator,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"we" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/medical/virology) +"wf" = (/obj/structure/closet/secure_closet/personal/patient,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wg" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wh" = (/turf/simulated/wall,/area/medical/morgue) +"wi" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"wj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"wk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"wl" = (/turf/simulated/wall/r_wall,/area/medical/patient_wing) +"wm" = (/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"wn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"wo" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"wp" = (/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"wq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"wr" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"ws" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva) +"wt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva) +"wu" = (/obj/machinery/door/airlock/glass_research{name = "Xenoarchaeology Department";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"wv" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology) +"ww" = (/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology) +"wx" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology) +"wy" = (/turf/simulated/wall,/area/medical/virology) +"wz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"wA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"wB" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"wC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"wD" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/machinery/microwave,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"wF" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/ramp,/area/medical/virology) +"wG" = (/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"wH" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"wI" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"wJ" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"wK" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"wL" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"wM" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/pink/full,/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"wN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"wO" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"wP" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/pink/full,/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"wQ" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"wR" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"wS" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"wT" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"wU" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"wV" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"wW" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"wX" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Camera Corridor 3"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"wY" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"wZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"xa" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xb" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology) +"xc" = (/obj/machinery/door/window/eastleft,/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology) +"xd" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Quarantine"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"xf" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"xg" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xh" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"xj" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xk" = (/obj/structure/morgue,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"xl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"xm" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xn" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing) +"xo" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/patient_wing) +"xp" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/patient_wing) +"xq" = (/obj/machinery/newscaster{pixel_x = 30;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xr" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "isoA_window_tint"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_a) +"xs" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "isoA_window_tint"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_a) +"xt" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Sub-Acute A"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"xu" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "isoB_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "isoB_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "isoB_window_tint"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_b) +"xv" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Sub-Acute B"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/patient_b) +"xw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"xx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"xy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"xz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"xA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"xB" = (/obj/machinery/door/airlock/research{name = "Secure Disposals";req_access = list(55)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology) +"xC" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Cell B";dir = 4;icon_state = "camera"},/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xE" = (/obj/machinery/door/window/westleft{name = "Virology Isolation Cell Beta";req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"xF" = (/obj/machinery/vending/snack,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xG" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/virology) +"xH" = (/obj/item/weapon/folder/white,/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/folder/white,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xI" = (/obj/structure/table/standard,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xJ" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xK" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xL" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"xM" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"xN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"xO" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xP" = (/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xQ" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"xR" = (/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xS" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xT" = (/obj/structure/closet/crate/freezer{name = "O- Blood Packs"},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xU" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xV" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xW" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Patient Wing Hallway East"},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xX" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"xY" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing) +"xZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/sign/a,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"ya" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/sign/b,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"yc" = (/obj/machinery/light,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"yd" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"ye" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"yf" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"yg" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"yh" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway) +"yi" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"yj" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Fore"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"yk" = (/obj/machinery/computer/operating{name = "Xenobiology Operating Computer"},/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"yl" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"ym" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"yn" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"yo" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio6";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"yp" = (/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"yq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"yr" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology) +"ys" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/tiled/white,/area/medical/virology) +"yt" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology) +"yu" = (/obj/structure/table/standard,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"yv" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/turf/simulated/floor/tiled/white,/area/medical/virology) +"yw" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"yx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio6";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"yy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"yz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"yA" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"yB" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yC" = (/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/medical/morgue) +"yD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yE" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yG" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;id_tag = null;name = "Patient Recovery Wing";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yI" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yN" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yQ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/patient_wing) +"yR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"yS" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway) +"yU" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/outpost/research/hallway) +"yV" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"yW" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Camera Corridor 2";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"yX" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"yY" = (/obj/machinery/optable{name = "Xenobiology Operating Table"},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"yZ" = (/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"za" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = 29},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"zb" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"zc" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/westright{name = "Containment Pen";req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"zd" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"ze" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/virology) +"zf" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/tiled/white,/area/medical/virology) +"zg" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) +"zh" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio6";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"zi" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 6";dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"zj" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"zk" = (/turf/simulated/wall,/area/medical/medbay4) +"zl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"zm" = (/turf/simulated/wall,/area/medical/ward) +"zn" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Morgue";dir = 8;icon_state = "camera"},/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"zo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/ward) +"zp" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/medical{name = "Staff Wing";req_access = list(5)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"zq" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/grass,/area/medical/patient_wing) +"zr" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"zs" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"zt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"zu" = (/obj/machinery/door/airlock/multi_tile/glass{name = "Patient Ward";req_access = list(5)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/ward) +"zv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass,/area/medical/patient_wing) +"zw" = (/obj/effect/floor_decal/corner/mauve/full,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"zx" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass,/area/medical/patient_wing) +"zy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/grass,/area/medical/patient_wing) +"zz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"zA" = (/obj/item/toy/plushie/spider,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"zB" = (/obj/machinery/light,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"zC" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Camera Corridor 1";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"zD" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"zE" = (/obj/machinery/smartfridge/secure/extract,/obj/effect/floor_decal/corner/white/full,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"zF" = (/obj/machinery/disposal,/obj/machinery/vending/wallmed1{name = "Emergency NanoMed";pixel_x = 26;pixel_y = 0},/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"zG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"zH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"zI" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"zJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/virology) +"zK" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"zL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"zM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"zN" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"zO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio6";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"zP" = (/obj/structure/window/reinforced,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"zQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"zR" = (/obj/structure/flora/pottedplant/random,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/medical/medbay4) +"zS" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4) +"zT" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward) +"zU" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward) +"zV" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward) +"zW" = (/obj/structure/bed/chair/comfy/teal,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"zX" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward) +"zY" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward) +"zZ" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Aa" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Ab" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Ac" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Ad" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Ae" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/research/hallway) +"Af" = (/obj/structure/bed/chair/comfy/teal{dir = 8;icon_state = "comfychair_preview"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Ag" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab";req_access = list(7)},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Ah" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Ai" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Aj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Ak" = (/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Al" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Am" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = 0;pixel_y = 29},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"An" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Ao" = (/obj/machinery/camera/network/research_outpost,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Ap" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Aq" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Cell C";dir = 4;icon_state = "camera"},/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Ar" = (/obj/structure/sink{pixel_y = 16},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/medical/virology) +"As" = (/obj/structure/bed/chair,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/plating,/area/medical/virology) +"At" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Au" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Av" = (/obj/machinery/light{dir = 8},/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Aw" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Ax" = (/obj/machinery/disposal,/obj/effect/decal/warning_stripes,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/wall/r_wall,/area/medical/virology) +"Ay" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Az" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"AA" = (/turf/simulated/floor/tiled/white,/area/medical/ward) +"AB" = (/obj/structure/bed/chair/wheelchair{icon_state = "wheelchair";dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/medbay4) +"AC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward) +"AD" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = -25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/ward) +"AE" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"AF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"AG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward) +"AH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/medical/patient_wing) +"AI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/medical/patient_wing) +"AJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"AK" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"AL" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/ward) +"AM" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/medical/patient_wing) +"AN" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"AO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"AP" = (/obj/structure/closet/l3closet/scientist,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel -Xenobiology Entrance"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"AQ" = (/obj/structure/closet/l3closet/scientist,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"AR" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"AS" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"AT" = (/obj/machinery/newscaster{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"AU" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio5";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Starboard";dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"AV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"AW" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/medical/virology) +"AX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/medical/virology) +"AY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio5";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"AZ" = (/obj/machinery/door/window/eastleft{name = "Simian Storage";req_access = list(39)},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Ba" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Bb" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Bc" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Bd" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Be" = (/obj/structure/bed/chair/wheelchair{icon_state = "wheelchair";dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/medbay4) +"Bf" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Bg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Bh" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Bi" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Bj" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 8},/obj/machinery/newscaster{pixel_x = 30;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Bk" = (/obj/structure/bed/chair/comfy/teal{icon_state = "comfychair_preview";dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Bl" = (/obj/machinery/vending/coffee,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing) +"Bm" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Bn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Bo" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing) +"Bp" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing) +"Bq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Br" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Bs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Bt" = (/obj/machinery/door/airlock/research{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "xeno_airlock_exterior";locked = 1;name = "Xenobiology External Airlock";req_access = list(55)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "xeno_airlock_control";name = "Xenobiology Access Button";pixel_x = 0;pixel_y = -24;req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Bu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Bv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Bw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Bx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"By" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Bz" = (/obj/machinery/door/airlock/research{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "xeno_airlock_interior";locked = 1;name = "Xenobiology Internal Airlock";req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"BA" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"BB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"BC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"BD" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 2;pixel_y = 2},/obj/item/glass_jar,/obj/item/glass_jar,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"BE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"BF" = (/mob/living/carbon/slime,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"BG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"BH" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) +"BI" = (/turf/simulated/floor/plating,/area/medical/virology) +"BJ" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio5";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"BK" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 5";dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"BL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"BM" = (/obj/structure/curtain,/turf/simulated/floor/tiled/white,/area/medical/ward) +"BN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology) +"BO" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward) +"BP" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4) +"BQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward) +"BR" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"BS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"BT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing) +"BU" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -27},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"BV" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing) +"BW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"BX" = (/obj/structure/disposalpipe/junction,/obj/machinery/camera/network/medbay{c_tag = "Medbay Equipment Storage";dir = 1},/obj/machinery/light,/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing) +"BY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"BZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Ca" = (/obj/machinery/shower{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = -32},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Cb" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Cc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Cd" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Ce" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/machinery/shower{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Cf" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/shower{dir = 1},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "xeno_airlock_control";name = "Xenobiology Access Button";pixel_x = 28;pixel_y = 8;req_access = list(55)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Cg" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Ch" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Ci" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "xeno_airlock_control";name = "Xenobiology Access Console";pixel_x = -22;pixel_y = 8;tag_exterior_door = "xeno_airlock_exterior";tag_interior_door = "xeno_airlock_interior"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Port";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Cj" = (/turf/simulated/wall,/area/crew_quarters/medbreak) +"Ck" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/gloves/latex,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Cl" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Cm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio5";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Cn" = (/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"Co" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak) +"Cp" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak) +"Cq" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak) +"Cr" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/medbay{c_tag = "Medical - Staff Area Hallway";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Cs" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Ct" = (/turf/simulated/wall/r_wall,/area/medical/ward) +"Cu" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/patient_wing) +"Cv" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"Cw" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Cx" = (/turf/simulated/wall/r_wall,/area/rnd/telesci) +"Cy" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Cz" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 8},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = 27},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 4;status = 2},/turf/simulated/floor/tiled/white,/area/medical/ward) +"CA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"CB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"CC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room";req_one_access = list(7,29)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"CD" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"CE" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 5},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"CF" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"CG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak) +"CH" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak) +"CI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward) +"CJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"CK" = (/turf/simulated/wall/r_wall,/area/rnd/mixing) +"CL" = (/turf/simulated/wall/r_wall,/area/rnd/storage) +"CM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak) +"CN" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak) +"CO" = (/turf/simulated/floor/tiled/dark,/area/rnd/telesci) +"CP" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/medical/medbay4) +"CQ" = (/obj/machinery/door/airlock/research{name = "Toxins Storage";req_access = list(8)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/storage) +"CR" = (/obj/machinery/door/airlock/research{name = "Toxins Storage";req_access = list(8)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/storage) +"CS" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"CT" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "telescience";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/telesci) +"CU" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel -Telescience"},/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"CV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"CW" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"CX" = (/obj/structure/closet/bombcloset,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"CY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"CZ" = (/obj/structure/sink{pixel_y = 18},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Da" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Db" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"Dc" = (/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Dd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"De" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Df" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Dg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Dh" = (/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Di" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"Dj" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Dk" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio4";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"Dl" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Dm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio4";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Dn" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Do" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4) +"Dp" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Dq" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Dr" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_y = -32},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Ds" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Mixing Fore"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Dt" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Du" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Dv" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Dw" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward) +"Dx" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"Dy" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/rnd/storage) +"Dz" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Storage"},/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled,/area/rnd/storage) +"DA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/camera/network/medbay{c_tag = "Medical - Patient Ward";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/ward) +"DB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"DC" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"DD" = (/obj/machinery/telepad,/turf/simulated/floor/tiled/dark,/area/rnd/telesci) +"DE" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"DF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage) +"DG" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Telescience Teleporter";dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/telesci) +"DH" = (/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"DI" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"DJ" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"DK" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "telescience";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/westright,/obj/machinery/door/window/eastleft,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/telesci) +"DL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"DM" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"DN" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"DO" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"DP" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"DQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"DR" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"DS" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"DT" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio4";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"DU" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 4";dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"DV" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/donut,/obj/structure/disposalpipe/junction/yjunction{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"DW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"DX" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"DY" = (/obj/machinery/atmospherics/unary/freezer,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"DZ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Ea" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Eb" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Ec" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing) +"Ed" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Ee" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Ef" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Eg" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"Eh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/rnd/storage) +"Ei" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage) +"Ej" = (/obj/machinery/door/airlock/glass_medical{name = "Staff Break Room";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Ek" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/sign/nosmoking_1{pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/medbay4) +"El" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "xenobot_inj";pixel_y = 1;use_power = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Em" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage) +"En" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"Eo" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/rnd/telesci) +"Ep" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "telescience";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Eq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Er" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Es" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Et" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"Eu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio3";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"Ev" = (/obj/machinery/door/window/northright{name = "Containment Pen";req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"Ew" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"Ex" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio2";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"Ey" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Aft";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology) +"Ez" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"EA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"EB" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"EC" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"ED" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"EE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio1";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"EF" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology) +"EG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio4";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"EH" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"EI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/medical/medbay4) +"EJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4) +"EK" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/medical/medbay4) +"EL" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/simulated/floor/tiled,/area/medical/medbay4) +"EM" = (/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/medical/medbay4) +"EN" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"EO" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/tiled,/area/medical/medbay4) +"EP" = (/obj/structure/closet/hydrant{pixel_y = 32},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"EQ" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/medical/medbay4) +"ER" = (/turf/simulated/wall/r_wall,/area/medical/medbay4) +"ES" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"ET" = (/obj/structure/table/glass,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 4;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Break Room Emergency Phone"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"EU" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"EV" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"EW" = (/obj/structure/table/rack,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/obj/machinery/camera/network/medbay{c_tag = "Medical - Secondary Storage"},/turf/simulated/floor/tiled,/area/medical/medbay4) +"EX" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"EY" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/mob/living/simple_animal/mouse,/turf/simulated/floor/tiled,/area/rnd/storage) +"EZ" = (/turf/simulated/floor/tiled,/area/rnd/storage) +"Fa" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Fb" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"Fc" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"Fd" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_in";dir = 8;use_power = 1;initialize_directions = 1;pump_direction = 0;external_pressure_bound = 0;internal_pressure_bound = 4000;pressure_checks = 2;external_pressure_bound_default = 0;internal_pressure_bound_default = 4000;pressure_checks_default = 2},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Fe" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"Ff" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage) +"Fg" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Fh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Fi" = (/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/obj/machinery/computer/telescience,/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Fj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Fk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Fl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Fm" = (/obj/machinery/door/window/southright{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"Fn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio2";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Fo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio2";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Fp" = (/obj/machinery/door/window/southright{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio2";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"Fq" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"Fr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio1";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Fs" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "Medical - Operating Theatre One"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"Ft" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"Fu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio1";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology) +"Fv" = (/obj/machinery/door/window/southright{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio1";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"Fw" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Fx" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"Fy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Fz" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"FA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"FB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"FC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"FD" = (/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"FE" = (/turf/unsimulated/chasm_mask,/area/crew_quarters/medbreak) +"FF" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing) +"FG" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"FH" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"FI" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"FJ" = (/obj/machinery/recharge_station,/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medical - Break Room";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"FK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"FL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing) +"FM" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"FN" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"FO" = (/obj/machinery/door/airlock/glass_medical{name = "Auxiliary Storage";req_access = list(5)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"FP" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"FQ" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/turf/simulated/mineral/random,/area/mine/unexplored) +"FR" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"FS" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{icon_state = "intact";dir = 1},/turf/simulated/wall/r_wall,/area/rnd/mixing) +"FT" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"FU" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"FV" = (/obj/structure/bed/chair/comfy/beige,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"FW" = (/obj/structure/table/reinforced,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/machinery/light,/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"FX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"FY" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"FZ" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Ga" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/telesci) +"Gb" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"Gc" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Gd" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Ge" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"Gf" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Gg" = (/obj/machinery/door/airlock/glass_medical{name = "Staff Smoking Lounge";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"Gh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Gi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"Gj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"Gk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/medbay4) +"Gl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Gm" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"Gn" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Go" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Gp" = (/obj/machinery/washing_machine,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -27},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Gq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Gr" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Gs" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Gt" = (/obj/structure/closet/crate{icon_state = "crateopen";name = "Grenade Crate";opened = 1},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/machinery/firealarm{dir = 1;pixel_y = -24},/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/medical/medbay4) +"Gu" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/medical/medbay4) +"Gv" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Gw" = (/obj/machinery/atmospherics/binary/pump{dir = 1;name = "CO2 to Connector"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Gx" = (/obj/structure/closet/bombcloset,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage) +"Gy" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"Gz" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"GA" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"GB" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) +"GC" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage) +"GD" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"GE" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage) +"GF" = (/turf/simulated/wall,/area/crew_quarters/sleep/medical) +"GG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage) +"GH" = (/obj/structure/table/glass,/obj/item/weapon/material/ashtray/bronze,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 4;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Break Room Emergency Phone"},/obj/machinery/firealarm{dir = 1;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"GI" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak) +"GJ" = (/obj/machinery/door/airlock/medical{name = "Staff Dormitories";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"GK" = (/obj/structure/closet/l3closet/general,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/gas,/obj/item/clothing/head/bio_hood/general,/turf/simulated/floor/tiled,/area/medical/medbay4) +"GL" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/wall/r_wall,/area/mine/unexplored) +"GM" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GN" = (/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GO" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GP" = (/obj/machinery/door/airlock/medical{name = "Staff Hygiene Facilities";req_access = list(5)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"GQ" = (/obj/structure/table/standard,/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = -5;pixel_y = 5},/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = 5},/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = -5},/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = -5;pixel_y = -5},/turf/simulated/floor/tiled,/area/medical/medbay4) +"GR" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GS" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GT" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GU" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringegun,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled,/area/medical/medbay4) +"GV" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GW" = (/obj/machinery/atmospherics/binary/pump{dir = 4;icon_state = "map_off";name = "Mix out"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"GX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/storage) +"GY" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"GZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/rnd/storage) +"Ha" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"Hb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage) +"Hc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/storage) +"Hd" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"He" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 1";dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"Hf" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 2";dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"Hg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Hh" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Hi" = (/obj/machinery/washing_machine,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Hj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Hk" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 3";dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology) +"Hl" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Hm" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/open,/area/mine/explored) +"Hn" = (/turf/simulated/open,/area/mine/explored) +"Ho" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"Hp" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"Hq" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";name = "Cubicle 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Hr" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/simulated/floor/plating,/area/rnd/mixing) +"Hs" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1;frequency = 1441;icon_state = "map_injector";id = "co2_in";use_power = 1;pixel_y = 1},/turf/simulated/floor/airless/ceiling,/area/mine/unexplored) +"Ht" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing) +"Hu" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/obj/machinery/meter,/turf/simulated/floor/plating,/area/rnd/mixing) +"Hv" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing) +"Hw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Hx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Hy" = (/obj/machinery/button/remote/blast_door{id = "mixvent";name = "Mixing Room Vent Control";pixel_x = 25;pixel_y = 35;req_access = list(7)},/obj/machinery/button/ignition{id = "mixingsparker";pixel_x = 25;pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Hz" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"HA" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/storage) +"HB" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage) +"HC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"HD" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"HE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/rnd/storage) +"HF" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HG" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HH" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"HJ" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"HK" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HL" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HM" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HN" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"HO" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"HP" = (/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"HQ" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"HR" = (/obj/machinery/firealarm{dir = 1;pixel_y = -24},/obj/machinery/camera/network/medbay{c_tag = "Medbay Equipment Storage";dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"HS" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"HT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"HU" = (/obj/machinery/door/blast/regular{id = "mixvent";name = "Mixer Room Vent"},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"HV" = (/obj/structure/closet/secure_closet/personal,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HW" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/simulated/floor/plating,/area/rnd/mixing) +"HX" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HY" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/machinery/light/small,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"HZ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/machinery/sparker{dir = 2;id = "mixingsparker";pixel_x = 25},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"Ia" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Ib" = (/obj/structure/bed,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/item/weapon/bedsheet/green,/obj/machinery/light/small,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical) +"Ic" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"Id" = (/obj/machinery/door/airlock/medical{name = "Showers";req_access = newlist()},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Ie" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"If" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";name = "Cubicle 2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Ig" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1441;icon_state = "map_injector";id = "waste_in";use_power = 1},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"Ih" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Ii" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"Ij" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"Ik" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/rnd/mixing) +"Il" = (/obj/structure/dispenser,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Im" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Mixing Aft";dir = 8},/obj/structure/sign/nosmoking_1{pixel_x = 32;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"In" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Io" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak) +"Ip" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 9},/obj/machinery/sparker{dir = 2;id = "mixingsparker";pixel_x = 25},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing) +"Iq" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Ir" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"Is" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing) +"It" = (/obj/structure/table/standard,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Iu" = (/obj/structure/table/standard,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Iv" = (/obj/structure/table/standard,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Iw" = (/obj/machinery/vending/phoronresearch,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Ix" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Observation"},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Iy" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Iz" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced,/turf/simulated/floor/plating,/area/rnd/mixing) +"IA" = (/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/mixing) +"IB" = (/obj/structure/table/standard,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IC" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/rnd/mixing) +"ID" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "toxinsairlock_airlock";name = "exterior access button";pixel_x = 25;pixel_y = -25;req_one_access = list(13,65)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"IE" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"IF" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "toxinsairlock_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "toxinsrec_airlock";pixel_x = 0;pixel_y = -35;tag_airpump = "toxinsairlock_pump";tag_chamber_sensor = "toxinsairlock_sensor";tag_exterior_door = "toxinsairlock_outer";tag_interior_door = "toxinsairlock_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "toxinsairlock_sensor";pixel_x = 0;pixel_y = -25},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/rnd/mixing) +"IG" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "toxinsairlock_outer";locked = 1;name = "Toxins External Access";req_access = list(10,13)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/rnd/mixing) +"IH" = (/obj/item/target,/obj/item/target,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/syndicate,/obj/item/target/syndicate,/obj/structure/closet/crate{name = "Target Crate"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing) +"II" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/rnd/mixing) +"IJ" = (/turf/simulated/floor/tiled,/area/rnd/mixing) +"IK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/rnd/mixing) +"IL" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "toxinsairlock_inner";locked = 1;name = "Toxins External Access"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/rnd/mixing) +"IM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IN" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IO" = (/obj/machinery/door/window/southright{dir = 8;name = "Toxins Launcher";req_access = list(8)},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/rnd/mixing) +"IP" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IS" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/rnd/mixing) +"IT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"IU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IW" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Storage";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/rnd/mixing) +"IY" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/rnd/mixing) +"IZ" = (/obj/machinery/door/airlock/research{name = "Toxins Launch Room";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/rnd/mixing) +"Ja" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jb" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jc" = (/obj/structure/closet/bombcloset,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jd" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Je" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "toxinsairlock_airlock";name = "interior access button";pixel_x = 0;pixel_y = -25;req_one_access = list(13,65)},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jf" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jg" = (/obj/structure/table/standard,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jh" = (/obj/structure/closet/bombcloset,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Ji" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jj" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jk" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/asteroid,/area/rnd/mixing) +"Jl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/mixing) +"Jm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/mixing) +"Jn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/mixing) +"Jo" = (/obj/structure/bed/chair,/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber.";layer = 4;name = "Test Chamber Telescreen";network = list("Toxins Test Area");pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jp" = (/obj/structure/bed/chair,/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber.";layer = 4;name = "Test Chamber Telescreen";network = list("Toxins Test Area");pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/button/remote/driver{id = "toxins_mass_driver";name = "Mass Driver button";pixel_x = 26;req_access = list(7)},/turf/simulated/floor/tiled,/area/rnd/mixing) +"Jq" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/mineral/random,/area/mine/unexplored) +"Jr" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/asteroid,/area/rnd/mixing) +"Js" = (/obj/structure/sign/securearea{name = "\improper CAUTION: BOMB RANGE"},/turf/simulated/wall/r_wall,/area/rnd/mixing) +"Jt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Ju" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing) +"Jv" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing) +"Jw" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/mineral/random,/area/mine/unexplored) +"Jx" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing) +"Jy" = (/obj/machinery/light/small,/turf/simulated/floor/asteroid,/area/rnd/mixing) +"Jz" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"JA" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"JB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"JC" = (/turf/simulated/wall/r_wall,/area/rnd/test_area) +"JD" = (/obj/structure/disposalpipe/segment,/turf/simulated/mineral/random,/area/mine/unexplored) +"JE" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing) +"JF" = (/turf/simulated/floor/tiled/airless,/area/rnd/test_area) +"JG" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"JH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/mass_driver{id = "toxins_mass_driver"},/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing) +"JI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "BOMB RANGE";pixel_x = 32;pixel_y = 0},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"JJ" = (/obj/structure/sign/securearea{name = "\improper CAUTION: BOMB RANGE"},/turf/simulated/wall/r_wall,/area/mine/unexplored) +"JK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"JL" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"JM" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "KEEP CLEAR: MEDICAL EXOSUIT PARKING";pixel_y = -32},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"JN" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/test_area) +"JO" = (/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/test_area) +"JP" = (/obj/structure/window/reinforced{dir = 5;health = 1e+007},/turf/simulated/floor/tiled/airless,/area/rnd/test_area) +"JQ" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Port";dir = 4},/turf/simulated/floor/tiled/airless,/area/rnd/test_area) +"JR" = (/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/tiled/airless,/area/rnd/test_area) +"JS" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Starboard";dir = 8},/turf/simulated/floor/tiled/airless,/area/rnd/test_area) +"JT" = (/obj/machinery/light/spot,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Aft";dir = 1},/turf/simulated/floor/tiled/airless,/area/rnd/test_area) +"JU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer) +"JV" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"JW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled,/area/crew_quarters/medbreak) +"JX" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"JY" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"JZ" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Ka" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kb" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Ke" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kf" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kg" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Ki" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kj" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kl" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Km" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kn" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Ko" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kr" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Ks" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Ku" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 1},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Ky" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power) +"Kz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"KA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"KB" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"KC" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KD" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KE" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"KF" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"KG" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KH" = (/obj/turbolift_map_holder/aurora/vault,/turf/simulated/floor/tiled,/area/turbolift/vault_sub) +"KI" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"KK" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"KL" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KM" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KN" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KO" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"KP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KQ" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KR" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KS" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"KT" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KU" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KV" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"KW" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KX" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"KY" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"KZ" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"La" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lb" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Lc" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Ld" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Le" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Lf" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Lg" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Lh" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Li" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Lj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Lk" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Ll" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lm" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Ln" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lo" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lp" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lq" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lr" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"Ls" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lt" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"Lu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker) +"Lv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"Lw" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"Lx" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"Ly" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"Lz" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LA" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LB" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LC" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LD" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LE" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LF" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LG" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LH" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LI" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LJ" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LK" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LL" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LM" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LN" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LO" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LP" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LQ" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LR" = (/obj/turbolift_map_holder/aurora/aiaccess,/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LS" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LT" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LU" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LV" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub) +"LW" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"LX" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"LY" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"LZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"Ma" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/mine/unexplored) +"Mb" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/mine/unexplored) +"Mc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/mine/unexplored) +"Md" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"Me" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"Mf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"Mg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"Mh" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"Mi" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mj" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology) +"Mk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"Ml" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mm" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/newscaster{pixel_x = 30;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"Mo" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mp" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mq" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mr" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/obj/machinery/firealarm{dir = 1;pixel_y = -24},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Ms" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mt" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mu" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mv" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Mw" = (/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6)},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue) +"Mx" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway) +"My" = (/turf/simulated/floor/tiled,/area/turbolift/research_maintenance) +"Mz" = (/obj/turbolift_map_holder/aurora/research,/turf/simulated/floor/tiled,/area/turbolift/research_maintenance) +"MA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"MB" = (/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"MC" = (/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer) +"MD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ME" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"MF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"MG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"MH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"MI" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"MJ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"MK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"ML" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"MM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"MN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"MO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"MP" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"MQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"MR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"MS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"MT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"MU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel) +"MV" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored) +"MW" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored) +"MX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored) +"MY" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored) +"MZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"Na" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"Nb" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"Nc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"Nd" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Ne" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Nf" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"Ng" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) +"Nh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"Ni" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/virology) +"Nj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/virology) +"Nk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology) +"Nl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"Nm" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Nn" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/door/firedoor,/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"No" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Np" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Nq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"Nr" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"Ns" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel) +"Nt" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/patient_wing) +"Nu" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/patient_wing) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadleleadleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaafleleadleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagJXahajajajajajajamajajanajajaoaeaqapaearararararasararararararleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagatJYagagavagagatagJYavawaeaxagJYaeayKbaeazaAaBaCaDaEaFaGaHaIaJarleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagaKaLagagaMagagaKagaLaMaNaeaeaeaOaeaQauaeaRaSaTaUaTaTaVaWaXaYaZarleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebbbabdbcKcbfbgKcKebgbibfbjbkagblbmbnJYauaebobpbpbqbrbsbtbuaXbvbwararararararleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebxagbybzagagbzagagbzbyagbAbBagaMbCajbDKgaebEbFbGbHbIaTbtbJaXbKbLarbMbNbObParlelelebQleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRagbSbTbTbTbTbTbTbTbSagKhKiKjKkbUKjbVcUaebWbYbXbZbIaTcacbaXbKccarcdceaFaFarleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfcgagagagagchagagcgcicjckbeclcmaicncoaecpcqbrcrcsctcucvcvcwcxarcyczcAcBarleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecCcfagagagagagagagagagcicDbBaeaecFcEaeaeaecGcHaTcJcIcKaFcLcMcNcOaFcycPbNcBarleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecRcQagagagagagagagagagcibAbBJXajbDcTcWcVcXcYcZdadbdcdaddddddddddaFaFdeaFaFarcYcYcYcYcYcYleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfcgagagagagagagagagdfdgbBdhdiagdjagaudmdldndodpdndndqdndrdndsdtdndudndndqdndvdwdxdycYcYcYcYleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfagagagagagagagagagdzdAbBdBdidididicTdDdCdCdCdFdEdEdGdEdHdEdIdJdEdKdEdEdGdEdLdEdMdNdOdQdPdRleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedScQagagagagagagagagcgdTdUbBdVdiagagagagcXdWdYdXdZdndndqdndndndneadndndndndqdndndnebecdOeeeddRleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeefcfagagagagagagagagagcibAbBKnegehKocoagdmcYcYcYejeicYcYcYcYcYcYcYcYcYcYcYcYcYcYdoekelcYcYcYcYemleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeencQagagagagagagagagagcicDbBaeaeeoepaeaeaeeqesereteseseuevaaaalelelelelelelelecYdqewdqcYleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfcgagagcgagagagagcgcibAbBagagaKKpeyagaeezeseAeBeseCeCevaalelelelelelelelelecYdnebeDcYleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRageEeFeFeFeFeFeFeFeEagcjckbebebhKqbeeHeJeIeIeKeMeLeCeCevlelelelelelelelelelecYeNeOePcYeQeQeQeQeQeQeQeQeQeQeQeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebxagbyageSageSagageSbyagbAbBagagagJYagaMaeeTeVeUeWeLeCeCevlelelelelelelelelelecYeYeXfaeZfbfbfbfbfbKzfbfbfbfbfceQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefffebdfeKsfgKtKuKvKwbiKxfifhagagagJYagaMaefkfmfleLeLeCeCevlelelelelelelelelecYcYcYcYcYcYcYcYeQeQeQeQeQeQeQeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagfpagagaKagaMagagfpaKaNaeaeaeaefqagfraeevevevevevevevevlelelelelelelelelecYfsfsfsfsfsfscYleleleleaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagJYagagfxagfragagJYfxagaeaxfyaeaQagawaeaaaaaaaaaaaaaaaaaalelelelelelelelecYfsfsfsfsfsfscYleleleleaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagKnfCajajfFfEajajfGajajanajajanbDagagaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYfsfsfsfsfsfscYleleaaaaaaaaaaeQKAeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYfsfsfsfsfsfscYleleaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdlelelelefdfdfdfdfdfdaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeReReReReReReReReReReReRfdfdfJfJfJfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRaaeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYfKfsfsfsfsfscYleleaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdlelelelelelelelefdfdfdfdaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeReReReReReReReReReReReRfdfJfJfJfJfJfJfJfdfdfdfdfJfJfJfJfdfNfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYcYcYcYcYcYcYcYleleaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdlelelelelelelelelelefdfdfdaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeReRfdfdfdfdfdfdfdfdfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReRfQfQfQeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRnLnLnLnLnLnLeQeQeQeQeQeQeQeQeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdleleleabeRabeRablelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdeReReReReRfdfdlelelefdfdfdfJfJfJfJfJfSfTfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRKBnLnLnLnLnLnLnLnLnLnLnLnLnLnLfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdleleKCgagagagagaKDlelelefdfdaaaaaaaaaaeRfdfdfdfdfdeReReReReRfdlelelelelefdfdfJfJfJgbgchQgBgffJfJfJfJfJfJghgggiggfJfJgjfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReRfQfQfQeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRnLnLnLnLnLnLKEnLnLnLnLnLnLnLKEfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdleleeRgagagagagaeRlelelefdfdaaaaaaaaaaeRfdfdfdfdfdeReRfdfdfdgrgqgsgqgtgugugvgvgvgvgwgxgBgygBgBgzgBgAgDgCgFgEgHgGgJgIgKfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRgLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReQeQeQeQeQeQeQeQeQeQeQeQeQeQeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdleleKCgagagagagaKDlelebQfdfdaaaaaaaaaaeRfdfdfdfdfdeReRfdfdlegWgXgYgZhagXhbhchehdgvhfhggBgBgBgBhhgBhihkhjhlfJhmfJfJfJhnfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRaaeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdleleleeRgagagagagaeRlelefdfdfdfdaaaaaaaaeRfdfdfdfdfdeReRfdlelehvhuhxhwhzhyhBhAhDhChEhFhGgBgBhHhJhIhLhKhNhMfJhOhPfJhRhQhSfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdleleleKCKHgagagagaKDlelefdfdfdfdaaaaaaaaeRfdfdfdfdfdeReRfdlelehZiaibicidiehZifigihgviiijikimilioiniqipisiriuitiwiviyixiAiziBfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdleleleKCKJfRgOfRKKKDlelefdfdfdaaaaaaaaaaeRfdfdfdfdfdeReRfdfdfdgvgvgviEgvgvgviFiGiHiJiIiIiIiLiKiNiMiPiOiRiQhOiSiTfJiViUiWfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdeRfdfdfdfdfdfdfdfdeRfdleleleKMKNKOKPKQlelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdeRiYiYiYiYgviZjajbjciZgvjdjehdgvjfhQgBgBgBgBjggBjhjjjijkfJjlfJfJfJjmfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQeQeQeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaleleleleleleleleaaaaaaaaaaaaaaaaaaleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdeRfPfPfPfPfPfPfPfPfPfPeRleleleleKRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYjrjqgvjsjtjujtjvgvjwjxJUgvjzjAhQgyhQgBjBgBjCjEjDjGjFjIjHjKjJjLfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQjMjNeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaleleleleleleleleleleleleleaaaaaaleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPfPfPfPfPfPfPfPfdleleleleKRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYjPjOjRjQjTjSjTjQjVjUjWjygvjXjYhQgBgefJfJfJfJfJfJghjZggggfJfJkafJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQkbkceQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQkdeQeQeQeQkekflelelelelelelelelelelelelelelelelelelekekgkfleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPfVfWfXfYKXfPfPleleleleleKRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYkhkigvjsjtkjjtjsgvgveRfJfJfJfJkkklfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQkmkoknkokokokokokokokokokokokokokokokokokokokokokokokokqkpkskrkuktkwkvkxkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkzkykAleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPgkglgmgmgmLbfPfPabababababeRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYiYiYgvkCkBkEkFkCgvgveRfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJjnjpfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQkGkGeQeQeQeQeQkDkHlelelelelelelelelelelelelelelelelelelekJkIkHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPgMgNgOgOgPgRgQgTgSLeLeLeLeLeLjeRlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYiYiYgvgvgvkKgvgvgvgvfdfdfdeRfJfJfJfJfJfJfJfJfJfJfJfJfJfJjnjojojpfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRaaaaaaaalelelelebQleleleleleleleleaaaaaaaalelelelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPhohphqhqhqLkfPfPLlKMKMKMKMKMeRlelelelelelefdfdaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdeRgvgvgvkMgvgvgvgvfdfdfdfdfdfJfJfdfdjnjojojojojojojojojpfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleaaaaaaaaaaaaaaaaaaaaaaaalelelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPhThUhVhWKXfPfPLslelelelelelelelelelelelefdfdaaaaaaaaaaeRfdfdfdfdfdfdfdfdeRleleleKRkPkNleleleeRfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPfPfPfPfPfPfPfPiClelelelelelelelelelelelelefdfdaaaaaaaaeRfdfdfdfdfdfdfdfdkRleleleKRkSMAabababkRfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdeRfPfPfPfPfPfPfPfPfPfPiClelelelelelelelelelelelelefdfdaaaaaaaaeRfdfdfdfdfdfdfdleleleleabLtkQkVkVLukXKDfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdeRfdfdfdfdfdjnjojojojplelelelelelelelelelelefdfdfdfdaaaaaaaaeRfdfdfdfdfdfdfdleleleKRLvkYMBMCLwMDlaKDfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdiCfdfdfdfdlelelelelelelelelefdfdfdfdfdaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleKRLxLxLxLxLxMElaKDlefdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalblblblbaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdiCfdfdfdfdlelelelelelelefdfdfdfdfdfdaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleeRLxLxLxLxLxeRlaKDlefdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalblblcldlbaaaaaaaaaaaaaaaaaaaaaaaaaalelekLleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdlelelelefdfdfdaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleKRLxLxLxLxLxMFlaKDlelefdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoOleleleleleleleleaaaaaaaaaaaaaaleleleaaaaaaaaaaaaaalbkUlhlglbaaaaaaaaaaaaaaaaaaaaaaaalelelekLleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaaalelelelelelelelefdfdfdfdfdfdiCfdfdfdfdfdfdfdlefdfdfdfdfdfdaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdleleleeRLxLxLxLxLxeRlaKDlelefdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPleleleleleleleleleaaaaaaaaaaleleleleleaaaaaaaaaaaalblilllklbaaaaaaaaaaaaaaaaaaaaaalelelelekLleleleleleleaaaaaaaaaalelelelelelelelelelelelelelelelelelelelelelelelelefdiCfdfdfdfdfdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdleleleKRLRLxLxLxLxMGlaKDlnlnlnlnlnlnlnlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPleleleleleleleleleleaaaaaalelololololololololololololilmlplbaaaaaaaaaaaaaaaaaaaaaalelelelekLlelebQleleleleleleleleleleleleleleleleaaleleleleleleleleleleleleleleleleleLslefdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleleKMeRKMeRKMKRlaMHlnlrlsltlulvlwlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelxlelelelelelelelelelelqlzlAlylolClDlBlFlElGlolilIlHlbaaaaaaaaaaaaaaaaaaaaaalelelekelJkflelelelelelelelelelelelelelelelelekekflelelelelelelelelelelelelelelelekelKlLeQeQeQeQeQeQeQfdaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdlNleleleleleleleKRlMlPlOlRlRlSlululQlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalUlVlelWlUlYlelelelelelelelelelTmamblZlomcmemdmgmhmflolblbmilbmkmkmkmkmkmkaaaaaaaaaalelelemlmjmnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmomnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmompoHmqmsmrmumtmxeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeRlelefdlelelebQleKQeRlnlulumylumzmAlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalUlelelelUlYlelelelelelelelelelTmambmvlomwmDmBmFmCmElomHmGmJmImKmkmNmOmLmkaaaaaaaaaaaalelekJkIkHlelelelelelelelelelelelelelelelelekJkHlelelelelelelelelelelelelelelelekJMIkHeQeQeQeQmMmxeQeQeQeQeQeQeQeQeQeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdlelelefdfdlnmRmSmQmPmUmTmVjpfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelemYmZlelelelelelelelelelTnanbncmXmWnendnfnfnfngninhnknjnmnlnnnqnomkaaaaaaaaaaaalelelekLleleleleleleaaaaaaaaaaleaaaaaaaaleleleleleleleaaaaaaaaaaleleleleleleleleleMJleaaaaaaeQkmnpMKnpnpnpnpnpnpnpfceQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdlefdfdfdlnlnlnnrlnlnlnlnfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaalelelelelelelelelelelelelelelensnvnwnxlontnznAnBnCnulonDnynEnHnFmknGnqnKmkaaaaaaaaaaaaaalelekLleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleMLleleaaaaeQnLnLMMeQeQeQeQeQeQeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaalUlVlelelelelelelelelelelelelelololololonMlolololonNlonQnPnRnHnSnVnVnVnVnVnVaaaaaaaaaaaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdnWnWnWnWnWaaaaaaaaaaaaaaleMNleleeQeQeQnTeQMOeQaaaaaaaaaaeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaalUlelelelelelelelelelelelelelelenUnYnXoanZoanXobnXoanXoanXocnHnFnVodogohoinVaaaaaaaaaaaalelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdeRfdfdnWojoeojnWaaaaaaaaaaaaaaleMPleleeQolokofeQMQeQaaaaaaaaaaeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaooopoqleleleleleleleleleleleleomoronotosototovouotowotoxosotozoyoBoAoEoCnVaaaaaaaaaaaalelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdadadlefdnWoGoGoGnWnWnWaaaaaaaaaakeoDoIoFoKoJoMoLeQMReQaaaaaaaaaaeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaoOaaleleoPoPleleleleleleleomoQoNoSoRoToRoVoUoToWoToXoToRoYnVoZpbpbpanVaaaaaaaaaaaalelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdeRpdpepfeRnWpcoGphpipgnWaaaaaaaalekJCnkHleeQeQeQpjeQMSeQeQaaaaaaaaeQnIeQaaaaaaaaaaaaeReReReReReReReReReReReReReReReReReReReReReReQpkeQeReReReReReReReReReReReReReReReReReReReReReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleomoroNplpopnpmpopppopqprprprprpmpoptpspwoinVaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdadpxadfdnWpuoGpvpApynWaaaaaalelelepCpCpCpCpDpzpEMTMUpFeQaaaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleomoQoNnFpopIpJpKpGpHpNpOpPpPpPpPponVnVnVnVnVaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdeRpQeRfdnWpRpSpToGpgnWaaaaeRMVMWMXMYpLeReReReQeQeQeQLZMZleaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelepUpMpVlelepWoroNplpopXpYpZqapPpNqbqcpPpPpPpoaaaaaaaaaaaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWnWqdnWnWnWnWnWqenWnWnWnWnWnWgoMaMbMaqfeRqgqgqgqgqgeQLZeQleaaaaaaeQnIeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleqkqlqmqlqkleqnoQoNqopoqpqqqsqrqtquqvqwqxqyqzpoaaaaaaaaaaaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWqBqAqDqCqFqEqHqGqInWqJqKqLnWqNtzNatztznWqgqgqgqgqgeQLZNbleleaaaaeQqUfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbqVeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleqkqXqWqYqkleqnorqZraporbrcrdreqtrfrgqprhrirjpoaaaaaaaaaaaaaaaaaaaalelelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWrlrkrmrnrprorqrrrtrsrvrurxrwrzryNcNdtznWqgqgqgqgqgeQLZeQleleaaaaeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaalelerErDrFqkrGrHrIqkleqnoQoNnFporJrKrLpGrNrMpPpPrOpPpPpoaaaaeQeQeQeQeQaaaaaaaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWrPrQrRrSrTrUrWrVrXnWrZrYsanWscsbNeNfNgnWqgqgqgqgqgeQLZNhleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaleleqkqkqkqksfsgqlqkqkqnoroNplposhqssisjrKskrKrKrKslpPpoaaaaeQsmsnsoeQaaaaaaaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWnWsqspsrsqnWnWsqssnWnWnWnWnWnWNiNjMhNkMjnWstqgqgqgqgeQLZeQleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaleqksxsyszsAsBsDsCsFsEsHsGnFposJsIrNsKsMsLrNsNsOsPpPpoaaaaeQoLsRsQeQeReReRaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWsSsTsUsVsWsYsXsZsUtasXleleaaleleuDMlvrMmwlwlwlwlwleQeQLZNlleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqktdtesztftgthtiqkqkoroNnStjtktltmtjtntotptqtrtstteQeQeQeQtueQtveQtwtweQeQeQeQtxleleaaaaaaaaaaaaaaaaaaaaaaaanWnWnWnWnWtytztAsVtBtDtCtEtAtFtCleleleleleuDMovrMpNmNntHtJtItLtKtMeQleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaqktNtOtPtRtQtTtStUqkoQoNnFtjtVtWtXtjtYtZuatqubucudeQufueueuguhuiukujumuluounuqupleleaaaaaaaaaaaaaaaaaaaaaalesXurtzusutuuuvuwsVuxuzuyuAuBuCuyleleleleleuDMlNoNpySNqySuGuFeQNrNseQleleuIuIuIuIuIuJuJuJuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaqkuKuLuMuNuOuPuQuRqkuTuSpltjuUuVuWtjuXuYuZtqvavbvceQvdeQeQeQeQeQeQeQeQeQeQeQeQveleleaaaaaaaaaaaaaaaaaaaaleletCvftzvgvhvivivjvkvlvmnWnWvnvonWaaleleleleNtMrMstGtGvpMvvruFNuleleleleleuIvtvvvuvwvxvzvyuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleaaaaaaaaaaaaqkvAvBvCsAvDvEvFvGqkvHvIoYtjvJvKvLtjvMvNvOtqvPvQvReQvdeQvSvTvSvUaaaaaaaaaaaaaaaaleleaaaaaaaaaaaaaaaaaaaaleleuyvVvWvXutvYvZwawbwcwdsXwfwewgnWaaoOwhwhwhwhwhwhMwwhwhwiwkwjvsleleleleleuIwmwnwovwwpwqwruJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaqkqkqkwswtqkqkqkqkqnqnwuqnqnqneQeQeQeQeQeQeQeQeQeQeQvdeQwvwwwxvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelewywywywywytzwzsVwBwAwAwCwEwDwFnWnWnWwHwGwGwIwHwGwGwJwhwKwNwLwlaaaaleleleuIwMwQwOvwwPwSwRuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelelelelelelelelelelelelenUwTnXnXnXwUwVnXnXwWwXnZnXwYqneQeQeQeQufueueueueueuewZeQwwwwwwvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelesXurtzusuttzwzxaxexbxcxdtzxfxhxgxjnWxkwGwGwIwHwGwGxlwhxmvrxqwlwlwlxnxoxpuIxrxtxsvwxuxvxuuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleomornHonoxovotxwxyxxxyxzxAplqneQeQeQeQvdeQeQeQeQeQeQeQeQxBvUvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleletCxCtzvgxEvixDxHtCxFtzxGxKxIxJtzxLnWwHwGwGxNxMwGwGxQwhvqvruFxOJVxUxPxRxSxTxVxZxWxXxVyaxVxYleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelelelelebQleleleleleleomornHyboXycoRoRoRoRMxyeygyfyhueueueyiwZeQvUykyjylvUynymywyoyxypypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleuyvVvWvXuttzyqyrtCystzxGytyuxGtzyvnWwHwGwGyzyyyyyyyAyCyByEyDyGyFyIyHyKyJyMyLyOyNySyPyVBSyQleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaleleleleleleleleomuTyRyWqnqnqnqnqnqnqnoroNplqneQeQeQeQeQeQvUyYyXzavUzbyZzdzczhypypzivUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelewywywywywytzzetzuyzftztztzzgtztzzjnWwHwGwGzlwHwGwGznwhzkzpzmzmzmzuzozmzmzmzxzqzrzsztzyzvwlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaaaaaleleleleleleleomzwzBzzqnMyMyMyMyMyqnzCoNnSqneQzAvUvUvUvUvUzEzDzFvUzbyZzdzKzOzGzHzIvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelesXurtzusutvYzJzPnWnWzLzMzNzQzLzMnWnWwHwGwGwIwHwGwGwIwhzRzSzmzUzTzXzVzYzUzmzWAcAazZAdAbAfxYleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleaaaalelelelelelelepWAgAeAhqnMyMyMyMyMyqnorAjAivUvUvUvUvUAkAmAlymymymAoApyZzdAnvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleletCAqtzvgxEviAtAsArsXAvAutzAwAyAxnWwhxkwGwGwIwHwGwGAzwhABzSzmADAAAGACAAALzmAEAFAMAHAIAJAKuHleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleaaaaleleleleleleaaqnANARAOqnMyMyMyMyMyqnoroNplvUASAPAQvUATyZyZyZyZyZyZyZyZAVAUAYypypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleuyvVvWvXuttzAZAWAXuyBcBatztzBdBbnWwhwHwGwGwIwHwGwGwIwhBeBgzmBhBfAGACBfBjzmBkBiBlBpBozsBmuHleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleaaleleleleleleleleleleleaaaaqnorBnBqqnMyMyMyMyMyqnorBrozBtBsBvBuBzByBwBwBxBDBEBABBBCBGzcBJypBFBKvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelenWnWnWnWnWtzBHAWBInWnWBLwAwABNnWnWwhwhwhwhwhwhwhwhwhwhABBPzmBMBMBQBOBMBMzmBRBUBTBXBVzsAfyQleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaqnBYyRBZqnMzMyMyMyMyqnBWCcCbvUCeCaCfvUCiyZyZCdCkClCgChyZzdzKCmzGzHzIvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelelenWBLwAwABNnWleleleleleleaaaaaaCjCpCoCqCjCjFECjABCrzmCwCsCyACCsCzCtwlwlwlCuwlwlwlwlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaaaaaaaaaaaaaaaqnCvoRCBqnqnqnqnqnqnqnCxCCCxvUvUvUvUvUCDyZyZCdCACECgChyZzdCFvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaCjCHCGCNCMCjCjCjCPzSzmADAACyCIAAALCtaaaaaaCJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaCKCKCKCKCKCKCKCKCKCKCLCLCQCLCRCLCLCLCOCOCOCTCSCVCUCXCWvUCZDgDayZyZyZyZyZyZCYyZzdDkDmypypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleaaaaaaleDbDcDdDeDfDnDhDiDjDozmDlDrDADwBfDlCtaaeRadDpadeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaCKDqDCDsDtCKDuDvDECKDxDxDyDzDFDBDBCLDGDDCODKDIDLDHDHDMvUDJDNDNDNDNDNDNDNDNDNDNDSzcDTypypDUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleDODPDQDRDVDXDWEjEeEkzmzmzmzmzmzmzmCtleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaCKDYDZEaEbEcEdElEfCKDxEgEhEiEmDBEnCLEoCOCOCTDIEqEpEsErvUEtEvEuAnEwEvExEyEwEvEEyZEFEGzGzHzIvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelebQleleleleEzEAEAEBCjECEDETENDeEUEHEIEJEKELEMEWEOEPEQERaaleadleleadleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCKESEXFaEVEcEdFdEfCKFeDxEYEZFfFbFcCLCxCxCxCxFhFjFiFgDMvUFkFmFlvUFnFpFovUFrFvFuvUvUvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleFqFzFsFtCjFJEDDeFKFwDcFxEIFyFOFAFBFCFDFDEQERaaeRleadleeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFQFFFGFHFIFRCKFSFLFSCKFMDxDyEZDFFNFTCLaaaaaaCxFPFYFWGaFZvUFUypypvUFUypypvUFUypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleFqFVGbFXGgGlGhJWGmGcGdGeGfGpEKGtGiGjGkFDGuERaaaaaaadleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJqCKGnDqGoGvGqGrGsGwCKGxGEGCEZGGGyGzCLaaaaaaCxCxCxCxCxCxvUGAypypvUGABFypvUGAypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleGBGHGDGIGFGJGFCjGPCjCjCjCjCjCjCjGQGUGKGKzkERaaaaaaeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRGLCKGMGNGOGVGWGRGSGTCKEZGZGXHcHbGYHdCLaaaaaaaaaaaaaaaaaavUHaHeypvUHaHfypvUHaHkypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleGFGFGFGFGFHpHoCjHgHhHiHhHjHqHlCjERERERERERERaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQHsHrHuHtHuHvHxHwHCHyHDHcHEHzHAHBGYGYCLaaaaaaaaaaaaaaaaaavUvUvUvUvUvUvUvUvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGFHGHFHKHHHMHLCjHIHJHNHRHQCjCjCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfQfQfQfQHUHOHPHZHWHSHTIaGSCKCLCLCLCLCLCLCLCLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGFHVIbHVIbHXHYCjIdCjCjCjHJIfHlCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQfQHUHOIgIcIkIeEVInImCKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGFGFGFGFGFGFGFCjHJIhHJCjCjCjCjCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfQfQfQfQHUIiIjIpHWIlGNIrIqCKCKCKCKCKCKCKCKCKCKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCjIoIoIoCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQfQIsHtHtHtIzCKCKIACKCKIBItIuIvIwIxIyICCKCKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCjCjCjCjCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReReReRleleleleCKIIIMIHCKINIJIJIKIJIJIJIPIOISaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleCKCKCKIWIQIRIZIXIUIVJaIJIJIJJdCKIYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleIEIDIGIFILJeJfJbCKJcJhJgJjJiJoJoJpCKJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleeRJkITleCKCKCKCKCKCKCKCKCKCKCKCKJlJmJnCKJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleITleaaaaCKleleleCKaaaaleJsleleKRJvJuJwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleITleleleJrleleleJrleleleJrleleKRJxJtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleJAJzJzJzJzJzJzJzJzJzJzJzJzJzJzJBJEKDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelebQleleleJyleleleJyleleleJyleleKRJHJGleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleJIJJaaaaleeRaaleleJJaaleleJKleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaaaaaaaaaaaaaaaleleleJLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaaaaaaaaaaaaaaaaaleleleJLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleJKJMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJNJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJOJOJOJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJOJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJFJFJFJFJFJFJFJFJFJFJFJFJFJFJFJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJPJQJFJFJFJFJFJRJFJFJFJFJFJSJPJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJFJFJFJFJFJFJFJPJFJFJFJFJFJFJFJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJTJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJPJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJCJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/Aurora-MapDev/aurora-3.dmm b/maps/Aurora-MapDev/aurora-3.dmm new file mode 100644 index 00000000000..76b4d9783cb --- /dev/null +++ b/maps/Aurora-MapDev/aurora-3.dmm @@ -0,0 +1,5987 @@ +"aaa" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored) +"aab" = (/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aac" = (/turf/simulated/wall,/area/maintenance/security_starboard) +"aad" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aae" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaf" = (/obj/item/weapon/shovel{pixel_x = 8},/obj/item/weapon/shovel{pixel_x = -8},/obj/item/weapon/shovel,/obj/structure/table/rack,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aag" = (/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aah" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aai" = (/turf/simulated/floor/asteroid,/area/maintenance/security_starboard) +"aaj" = (/obj/effect/decal/cleanable/generic,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aak" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aal" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aam" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aan" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "rich_command_airlock";name = "exterior access button";pixel_x = -25;pixel_y = -25;req_one_access = list(13,65)},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aao" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aap" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaq" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "rich_command_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aar" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aas" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aat" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aau" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aav" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "rich_command_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "rich_command_pump";tag_chamber_sensor = "rich_command_sensor";tag_exterior_door = "rich_command_outer";tag_interior_door = "rich_command_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "rich_command_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "rich_command_pump"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aax" = (/obj/structure/lattice,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aay" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaz" = (/obj/machinery/light/small/emergency{dir = 1},/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaA" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaB" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaC" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "rich_command_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaD" = (/obj/machinery/door/airlock/maintenance{name = "Armoury Access Lift";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaE" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aaF" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_chapel_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25;req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaH" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaK" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaM" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaN" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaO" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos) +"aaP" = (/turf/simulated/mineral/random,/area/mine/unexplored) +"aaQ" = (/turf/simulated/wall,/area/mine/unexplored) +"aaR" = (/turf/simulated/floor/airless,/area/mine/unexplored) +"aaS" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aaT" = (/turf/simulated/wall,/area/security/vacantoffice2) +"aaU" = (/turf/simulated/wall,/area/security/brig) +"aaV" = (/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"aaW" = (/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) +"aaX" = (/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) +"aaY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored) +"aaZ" = (/obj/structure/bed/chair,/obj/item/weapon/handcuffs,/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/airless,/area/mine/unexplored) +"aba" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abb" = (/obj/structure/table/standard,/obj/item/weapon/scalpel{desc = "Cut, cut, and once more cut. This one looks a little rusty. Perhaps its best not to cut yourself with this!";name = "rusty scalpel"},/obj/item/weapon/retractor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/airless,/area/mine/unexplored) +"abc" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abf" = (/obj/structure/flora/pottedplant/random,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_y = 30},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2) +"abi" = (/obj/structure/flora/pottedplant/random,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abj" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"abk" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abl" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"abm" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abo" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abp" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abq" = (/obj/effect/landmark{name = "carpspawn"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"abr" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"abs" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) +"abt" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) +"abu" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abv" = (/obj/random/junk,/turf/simulated/floor/airless,/area/mine/unexplored) +"abw" = (/obj/effect/decal/cleanable/vomit,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored) +"abx" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/toxin,/obj/item/weapon/reagent_containers/syringe,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored) +"aby" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/simulated/floor/airless,/area/mine/unexplored) +"abz" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice2) +"abB" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abC" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/landmark/start{name = "Internal Affairs Agent"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abD" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abE" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/landmark/start{name = "Security Cadet"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abF" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abG" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abH" = (/obj/machinery/door/airlock/glass_security{name = "Briefing Room";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abI" = (/turf/simulated/floor/tiled,/area/security/brig) +"abJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"abK" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"abL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abM" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abN" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abO" = (/turf/simulated/wall,/area/maintenance/substation/security) +"abP" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"abQ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"abS" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{frequency = 1441;id_tag = "air_out"},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"abT" = (/obj/machinery/atmospherics/unary/outlet_injector{frequency = 1441;id = "air_in"},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"abU" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "air_sensor";output = 7},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"abV" = (/obj/machinery/atmospherics/unary/outlet_injector{frequency = 1441;id = "o2_in"},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) +"abW" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{frequency = 1441;id_tag = "o2_out"},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) +"abX" = (/obj/structure/table/rack,/obj/item/weapon/shovel,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored) +"abY" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "o2_sensor"},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos) +"abZ" = (/obj/machinery/atmospherics/unary/outlet_injector{frequency = 1441;id = "n2_in"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) +"aca" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{frequency = 1441;id_tag = "n2_out"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) +"acb" = (/obj/structure/table/standard,/obj/item/weapon/folder/blue,/turf/simulated/floor/carpet,/area/security/vacantoffice2) +"acc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2) +"acd" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "n2_sensor"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos) +"ace" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acf" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acg" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ach" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aci" = (/obj/structure/barricade,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ack" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice2) +"acl" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Security Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"acm" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"acn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"aco" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"acp" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos) +"acq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos) +"acr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/atmos) +"acs" = (/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"act" = (/obj/structure/girder/displaced,/turf/simulated/floor/airless,/area/mine/unexplored) +"acu" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Security Subgrid";name_tag = "Security Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"acv" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Security"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"acw" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/carpet,/area/security/vacantoffice2) +"acx" = (/turf/simulated/floor/carpet,/area/security/vacantoffice2) +"acy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/security/vacantoffice2) +"acz" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter{frequency = 1443;id = "mair_in_meter";name = "Mixed Air Tank In"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos) +"acA" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter{frequency = 1443;id = "mair_out_meter";name = "Mixed Air Tank Out"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos) +"acB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2) +"acC" = (/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"acD" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/effect/landmark/start{name = "Head of Security"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"acE" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/machinery/camera/network/security{c_tag = "Security - Briefing Room";dir = 4;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"acF" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/landmark/start{name = "Warden"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"acG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/security{c_tag = "Security - Briefing Room";dir = 8;icon_state = "camera"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"acH" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/security) +"acI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"acJ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"acK" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"acL" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"acM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2) +"acN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acO" = (/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small,/obj/machinery/camera/network/security{c_tag = "Security - Security Substation";dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"acP" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"acQ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acR" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/door/airlock/engineering{name = "Security Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/security) +"acS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acT" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acU" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"acV" = (/turf/simulated/wall/r_wall,/area/engineering/atmos) +"acW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"acX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"acY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"acZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"ada" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"adb" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adc" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"add" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"ade" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"adf" = (/obj/structure/lattice,/turf/simulated/floor/airless,/area/mine/unexplored) +"adg" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/mine/unexplored) +"adh" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/mine/unexplored) +"adi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adj" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Security Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"adk" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adl" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"adm" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adn" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice2) +"ado" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adp" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adq" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adr" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Internal Affairs Agent"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"ads" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Detective"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adt" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adu" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Forensic Technician"},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adv" = (/obj/machinery/door/airlock/glass_security{name = "Briefing Room";req_access = list(1)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adw" = (/obj/item/weapon/wrench,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"adx" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"ady" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adz" = (/turf/simulated/floor/tiled,/area/engineering/atmos) +"adA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/security/brig) +"adB" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) +"adC" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adD" = (/obj/item/stack/tile/floor,/obj/item/weapon/autopsy_scanner,/obj/machinery/light_construct{tag = "icon-tube-construct-stage1 (WEST)";icon_state = "tube-construct-stage1";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adE" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/tiled,/area/engineering/atmos) +"adF" = (/obj/machinery/atmospherics/binary/pump{name = "O2 to Connector"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adG" = (/obj/machinery/atmospherics/valve/digital/open{name = "Oxygen Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adH" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"adI" = (/obj/machinery/atmospherics/valve/digital/open{name = "Nitrogen Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adJ" = (/obj/machinery/atmospherics/binary/pump{name = "O2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adK" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adL" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adM" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "air_in";name = "Mixed Air Supply Control";output_tag = "air_out";pressure_setting = 2000;sensors = list("air_sensor" = "Tank")},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adN" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "o2_in";name = "Oxygen Supply Control";output_tag = "o2_out";sensors = list("o2_sensor" = "Tank")},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2) +"adP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "n2_in";name = "Nitrogen Supply Control";output_tag = "n2_out";sensors = list("n2_sensor" = "Tank")},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"adQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adR" = (/obj/structure/barricade,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"adS" = (/obj/structure/morgue,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"adT" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/flora/pottedplant/random,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adU" = (/obj/item/bodybag,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"adV" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adW" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"adX" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"adY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ) +"adZ" = (/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aea" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aeb" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"aec" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/maintenance/civ) +"aed" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"aee" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/remains/mouse,/turf/simulated/floor/plating,/area/maintenance/civ) +"aef" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeg" = (/obj/machinery/disposal,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"aeh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aei" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aej" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aek" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ael" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aem" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aen" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeo" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aep" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeq" = (/obj/machinery/atmospherics/omni/mixer{active_power_usage = 7500;tag_east = 1;tag_east_con = 0.79;tag_south = 2;tag_west = 1;tag_west_con = 0.21},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aer" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"aes" = (/obj/machinery/atmospherics/unary/outlet_injector,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aet" = (/obj/structure/grille/broken,/obj/structure/lattice,/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/mine/unexplored) +"aeu" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored) +"aev" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aew" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"aex" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aey" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/blue/diagonal,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"aez" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "n2o_in";name = "Nitrous Oxide Supply Control";output_tag = "n2o_out";sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeA" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/red,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeB" = (/turf/simulated/wall,/area/security/forensics_office) +"aeC" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/turf/simulated/floor/plating,/area/security/vacantoffice2) +"aeD" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aeE" = (/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aeF" = (/obj/item/stack/tile/floor,/turf/simulated/floor/plating,/area/maintenance/civ) +"aeG" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/plating,/area/maintenance/civ) +"aeH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"aeI" = (/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/plating,/area/maintenance/civ) +"aeJ" = (/turf/simulated/floor/plating,/area/maintenance/civ) +"aeK" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"aeL" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/mine/unexplored) +"aeM" = (/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"aeN" = (/obj/item/device/radio/intercom/locked{pixel_y = -32},/obj/machinery/newscaster{pixel_x = 27;pixel_y = -27},/obj/effect/floor_decal/corner/blue/diagonal,/obj/machinery/papershredder,/turf/simulated/floor/tiled,/area/security/vacantoffice2) +"aeO" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos) +"aeP" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aeQ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"aeR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/tiled,/area/security/brig) +"aeS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"aeT" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aeV" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 4;frequency = 1441;icon_state = "map_vent_in";id_tag = "tox_out"},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"aeW" = (/obj/machinery/atmospherics/valve/digital{dir = 4;name = "Phoron Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeX" = (/obj/machinery/atmospherics/binary/pump{dir = 4;name = "Phoron to Connector"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeY" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aeZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"afa" = (/obj/machinery/atmospherics/omni/filter{name = "N2/O2 filter";tag_east = 1;tag_north = 4;tag_south = 2;tag_west = 3},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"afb" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) +"afc" = (/obj/machinery/atmospherics/omni/filter{name = "N2O Filter";tag_east = 7;tag_north = 0;tag_south = 1;tag_west = 2},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"afd" = (/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) +"afe" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/mine/unexplored) +"aff" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/simulated/floor/airless,/area/mine/unexplored) +"afg" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"afh" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"afi" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "n2o_in";pixel_y = 1;use_power = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) +"afj" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos) +"afk" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"afl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"afm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"afn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"afo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"afp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"afq" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"afr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/brig) +"afs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"aft" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"afu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/brig) +"afv" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"afw" = (/obj/item/bodybag,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"afx" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"afy" = (/obj/item/stack/tile/floor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"afz" = (/obj/structure/filingcabinet/security{desc = "A large cabinet with hard copy security records.";name = "Security Records"},/obj/machinery/camera/network/security{c_tag = "Security - Forensic Records"},/turf/simulated/floor/lino,/area/security/forensics_office) +"afA" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"afB" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/tiled,/area/maintenance/civ) +"afC" = (/turf/simulated/floor/tiled,/area/maintenance/civ) +"afD" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"afE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"afF" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"afG" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"afH" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records.";name = "Medical Records"},/obj/machinery/light{dir = 4},/turf/simulated/floor/lino,/area/security/forensics_office) +"afI" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"afJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"afK" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"afL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) +"afM" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"afN" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"afO" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) +"afP" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"afQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 10},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"afR" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"afS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/engineering/atmos) +"afT" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) +"afU" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/mine/unexplored) +"afV" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"afW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"afX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"afY" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "tox_in";name = "Phoron Supply Control";output_tag = "tox_out";sensors = list("tox_sensor" = "Tank")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/atmos) +"afZ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aga" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agb" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "N2O to Connector"},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agc" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 10},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"agd" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "n2o_sensor"},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) +"age" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"agf" = (/obj/machinery/door/airlock/security{name = "Security Lockers";req_access = list(63)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/brig) +"agg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"agh" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/brig) +"agi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) +"agj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"agk" = (/obj/structure/disposalpipe/junction{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"agl" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"agm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"agn" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/brig) +"ago" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"agp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"agq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/security/forensics_office) +"agr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"ags" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"agt" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"agu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/security/brig) +"agv" = (/turf/simulated/wall,/area/maintenance/civ) +"agw" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/civ) +"agx" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/civ) +"agy" = (/obj/structure/table/reinforced,/obj/item/trash/tray,/obj/machinery/door/window/southleft,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"agz" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"agA" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/random/loot,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"agB" = (/obj/structure/table/reinforced,/obj/item/trash/tray,/obj/machinery/door/window/southright,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"agC" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"agD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"agE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"agF" = (/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"agG" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/obj/machinery/light_construct{tag = "icon-tube-construct-stage1 (EAST)";icon_state = "tube-construct-stage1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"agH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agJ" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agK" = (/obj/machinery/atmospherics/valve/digital{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"agM" = (/turf/simulated/wall,/area/engineering/atmos) +"agN" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"agO" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos) +"agP" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agQ" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1441;icon_state = "map_injector";id = "tox_in";use_power = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"agR" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"agS" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"agT" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"agU" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agV" = (/obj/structure/grille/broken,/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"agW" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"agX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"agY" = (/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Port Camera";dir = 8},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"agZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Starboard Camera";dir = 4},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aha" = (/obj/machinery/atmospherics/valve/digital{dir = 4;name = "N2O Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahb" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "N2O to Transit"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahc" = (/turf/simulated/wall/r_wall,/area/security/forensics_office) +"ahd" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 8;frequency = 1441;icon_state = "map_vent_in";id_tag = "n2o_out"},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) +"ahe" = (/obj/machinery/computer/security/telescreen{layer = 4;name = "Observation Screen";network = list("Interrogation");pixel_x = 0;pixel_y = -32},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/security/brig) +"ahf" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 2;pixel_y = 5},/obj/item/weapon/pen,/obj/machinery/camera/network/security{c_tag = "Security - Interrogation Observation";dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"ahg" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{frequency = 1449;pixel_x = 27;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"ahh" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"ahi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"ahj" = (/obj/machinery/door/airlock/security{name = "Evidence Storage";req_access = list(1)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ahk" = (/obj/random/toolbox,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ahl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ahm" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"ahn" = (/obj/machinery/door/airlock/security{name = "Evidence Storage";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"aho" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"ahp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Forensic Technician";req_access = list(4)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/forensics_office) +"ahq" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/tiled,/area/maintenance/civ) +"ahr" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/civ) +"ahs" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plating,/area/maintenance/civ) +"aht" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/plating,/area/maintenance/civ) +"ahu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahv" = (/obj/machinery/atmospherics/binary/pump{name = "Air Mix to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahw" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahx" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahy" = (/obj/machinery/space_heater,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahz" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/forensics_office) +"ahA" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/ramp/bottom,/area/security/forensics_office) +"ahB" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"ahC" = (/obj/machinery/door/airlock/external,/obj/machinery/door/firedoor,/turf/simulated/floor/airless,/area/maintenance/engineering) +"ahD" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/security_starboard) +"ahE" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"ahF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ahG" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/simulated/floor/tiled,/area/maintenance/civ) +"ahH" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ahI" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Evidence Lockers"},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ahJ" = (/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ahK" = (/obj/structure/filingcabinet/filingcabinet{desc = "A large cabinet with drawers. There seems to be a layer of dust covering it."},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ahL" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ahM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/tiled,/area/security/forensics_office) +"ahN" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahO" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ahP" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/camera/network/security{c_tag = "Security - Evidence Lockers"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ahQ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9;icon_state = "intact"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ahR" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"ahS" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"ahT" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/maintenance/civ) +"ahU" = (/obj/item/weapon/stool/padded,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/tiled,/area/maintenance/civ) +"ahV" = (/obj/item/weapon/stool/padded,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"ahW" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"ahX" = (/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) +"ahY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 1";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"ahZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled,/area/security/forensics_office) +"aia" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Forensics Office"},/turf/simulated/floor/tiled,/area/security/forensics_office) +"aib" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aic" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aid" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aie" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"aif" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"aig" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aih" = (/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) +"aii" = (/obj/structure/barricade,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aij" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aik" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"ail" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 4;frequency = 1441;icon_state = "map_vent_in";id_tag = "waste_out"},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) +"aim" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/valve/digital{dir = 4;name = "Gas Release Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ain" = (/obj/machinery/atmospherics/binary/pump{dir = 4;icon_state = "map_off";name = "Mix out"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aio" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence{pixel_x = 7},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"aip" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aiq" = (/turf/simulated/floor/tiled,/area/security/forensics_office) +"air" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/forensics_office) +"ais" = (/obj/machinery/atmospherics/omni/filter{name = "CO2 Filter";tag_east = 5;tag_north = 2;tag_south = 1;tag_west = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ait" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "co2_in";pixel_y = 1;use_power = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) +"aiu" = (/obj/structure/table/glass,/obj/machinery/microscope,/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"aiv" = (/obj/machinery/dnaforensics,/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"aiw" = (/obj/machinery/door/airlock/security{name = "Interrogation";req_access = list(63)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/brig) +"aix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"aiy" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aiz" = (/obj/structure/table/standard,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aiA" = (/obj/item/weapon/stool/padded{desc = "Apply butt. This particular stool looks tattered and old. Perhaps there have been budget cuts?";name = "Tattered Stool"},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"aiB" = (/obj/structure/table/standard,/obj/item/trash/tray,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aiC" = (/obj/structure/table/standard,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aiD" = (/obj/structure/table/standard,/obj/effect/decal/remains/mouse,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aiE" = (/obj/structure/table/standard,/turf/simulated/floor/plating,/area/maintenance/civ) +"aiF" = (/obj/machinery/computer/med_data,/obj/machinery/requests_console{department = "Forensic Tech's Desk";departmentType = 5;pixel_x = -32},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/forensics_office) +"aiG" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"aiH" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aiI" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aiJ" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aiK" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/swabs{pixel_x = 5;pixel_y = 5},/obj/item/weapon/storage/box/slides{pixel_x = 2;pixel_y = 2},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"aiL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aiM" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) +"aiN" = (/turf/simulated/wall,/area/maintenance/engineering) +"aiO" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aiP" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aiQ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aiR" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aiS" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/simulated/floor/tiled,/area/maintenance/civ) +"aiT" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder,/turf/simulated/floor/tiled,/area/security/brig) +"aiU" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "waste_sensor";output = 63},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) +"aiV" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "waste_in";name = "Gas Mix Tank Control";output_tag = "waste_out";sensors = list("waste_sensor" = "Tank")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aiW" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled,/area/security/forensics_office) +"aiX" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/forensics_office) +"aiY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aiZ" = (/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"aja" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajb" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "CO2 to Connector"},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajc" = (/obj/item/weapon/stool/padded,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled,/area/maintenance/civ) +"ajd" = (/obj/item/weapon/stool/padded,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled,/area/maintenance/civ) +"aje" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "co2_sensor"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) +"ajf" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ajg" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"ajh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Interrogation";dir = 4;network = list("Brig","Interrogation")},/turf/simulated/floor/tiled,/area/security/brig) +"aji" = (/obj/item/device/radio/intercom{broadcasting = 1;frequency = 1449;listening = 0;pixel_x = 27;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"ajj" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajl" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajm" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajn" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajo" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajp" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/forensics_office) +"ajq" = (/obj/machinery/door/window/westleft{name = "Forensics Operating Theatre";req_access = list(4)},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"ajr" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"ajs" = (/obj/structure/sign/vacuum{pixel_y = 32},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ajt" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aju" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ajv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ajw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ajx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ajy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ajz" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"ajA" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{icon_state = "intact";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ajB" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1441;icon_state = "map_injector";id = "waste_in";use_power = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) +"ajC" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ajD" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/valve/digital{dir = 4;name = "Gas Mix Inlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajE" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "Mix In"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajF" = (/obj/machinery/computer/security,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/forensics_office) +"ajG" = (/obj/machinery/atmospherics/valve/digital{dir = 4;name = "CO2 Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajH" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "CO2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajI" = (/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/briefcase/crimekit,/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/security/forensics_office) +"ajJ" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"ajK" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 8;frequency = 1441;icon_state = "map_vent_in";id_tag = "co2_out"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) +"ajL" = (/obj/structure/sign/securearea{name = "\improper CAUTION";pixel_x = 32},/obj/item/stack/cable_coil,/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ajM" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ajN" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/maintenance/civ) +"ajO" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/wood,/area/maintenance/civ) +"ajP" = (/obj/item/stack/tile/floor,/turf/simulated/floor/tiled,/area/maintenance/civ) +"ajQ" = (/obj/item/stack/rods,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled,/area/maintenance/civ) +"ajR" = (/turf/simulated/wall/r_wall,/area/engineering/engine_waste) +"ajS" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/wall/r_wall,/area/engineering/engine_waste) +"ajT" = (/turf/simulated/wall/r_wall,/area/engineering/drone_fabrication) +"ajU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajV" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"ajX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"ajY" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ajZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aka" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"akb" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/security/forensics_office) +"akc" = (/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/blue,/obj/item/weapon/pen/blue{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red,/obj/structure/table/standard,/obj/machinery/alarm{dir = 1;pixel_y = -25},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/forensics_office) +"akd" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"ake" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled,/area/security/forensics_office) +"akf" = (/obj/machinery/photocopier,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/security/forensics_office) +"akg" = (/obj/structure/table/glass,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel{desc = "Cut, cut, and once more cut. This one is extra shiny!";name = "shiny scalpel"},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"akh" = (/obj/machinery/optable,/obj/machinery/button/windowtint{id = "FT Op";pixel_x = 0;pixel_y = -28},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"aki" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"akj" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"akk" = (/turf/simulated/wall/r_wall,/area/security/brig) +"akl" = (/turf/simulated/floor/wood,/area/maintenance/civ) +"akm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"akn" = (/obj/structure/grille,/obj/item/weapon/material/shard,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"ako" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"akp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"akq" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"akr" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"aks" = (/obj/item/stack/rods,/obj/item/weapon/material/shard{icon_state = "small"},/obj/machinery/door/firedoor,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ) +"akt" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"aku" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"akv" = (/turf/simulated/floor/plating,/area/engineering/engine_waste) +"akw" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"akx" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/black,/obj/machinery/light{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Waste Handling"},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"aky" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/black,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_waste) +"akz" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"akA" = (/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"akB" = (/obj/machinery/drone_fabricator,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"akC" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"akD" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"akE" = (/obj/machinery/cryopod/robot,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"akF" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "co2_in";name = "Carbon Dioxide Supply Control";output_tag = "co2_out";sensors = list("co2_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"akG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/corner/black{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos) +"akH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/atmos) +"akI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"akJ" = (/obj/structure/bed,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/plating,/area/security/brig) +"akK" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/newscaster{pixel_x = 27},/turf/simulated/floor/plating,/area/security/brig) +"akL" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"akM" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"akN" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"akO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"akP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"akQ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"akR" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"akS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"akT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"akU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/civ) +"akV" = (/obj/item/weapon/storage/toolbox,/turf/simulated/floor/plating,/area/maintenance/civ) +"akW" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/wood,/area/maintenance/civ) +"akX" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ) +"akY" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled,/area/maintenance/civ) +"akZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"ala" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/maintenance/civ) +"alb" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/maintenance/civ) +"alc" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{icon_state = "map";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"ald" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"ale" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/engineering/engine_waste) +"alf" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) +"alg" = (/obj/machinery/computer/drone_control,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"alh" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"ali" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"alj" = (/turf/simulated/wall/r_wall,/area/engineering/engine_monitoring) +"alk" = (/obj/machinery/atmospherics/omni/filter{name = "Plasma Filter";tag_east = 0;tag_north = 2;tag_south = 1;tag_west = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"all" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos) +"alm" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aln" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"alo" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"alp" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2";dir = 2},/turf/simulated/floor/tiled,/area/security/brig) +"alq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/atmos) +"alr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"als" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"alt" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"alu" = (/turf/simulated/wall/r_wall,/area/maintenance/security_starboard) +"alv" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"alw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/security/brig) +"alx" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aly" = (/turf/simulated/wall/r_wall,/area/security/main) +"alz" = (/turf/simulated/wall,/area/security/range) +"alA" = (/obj/item/stack/tile/wood,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ) +"alB" = (/obj/machinery/atmospherics/unary/heat_exchanger{icon_state = "intact";dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_waste) +"alC" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/maintenance/civ) +"alD" = (/obj/item/stack/material/wood,/obj/random/loot,/turf/simulated/floor/wood,/area/maintenance/civ) +"alE" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ) +"alF" = (/obj/structure/grille/broken,/obj/item/stack/rods,/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"alG" = (/obj/effect/decal/cleanable/dirt,/obj/item/stack/rods,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ) +"alH" = (/obj/machinery/atmospherics/unary/heat_exchanger,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"alI" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"alJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engineering/engine_waste) +"alK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = 0;pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/drone_fabrication) +"alL" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Aft Camera";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"alM" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"alN" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) +"alO" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{icon_state = "map";dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos) +"alP" = (/turf/simulated/floor/plating,/area/engineering/atmos) +"alQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos) +"alR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/engineering/atmos) +"alS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Maintenance - Atmospherics"},/turf/simulated/floor/plating,/area/engineering/atmos) +"alT" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"alU" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Solitary 2";dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/security/brig) +"alV" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"alW" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/range) +"alX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"alY" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/sensor{name = "Powernet Sensor - Master Grid";name_tag = "Master"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"alZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"ama" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"amb" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Drone Fabrication";dir = 8},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"amc" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"amd" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid";name_tag = "Atmospherics Subgrid"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/engineering/atmos) +"ame" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc/super{name = "north bump";pixel_y = 24},/turf/simulated/floor/plating,/area/engineering/atmos) +"amf" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"amg" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"amh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"ami" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"amj" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"amk" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/storage) +"aml" = (/turf/simulated/wall/r_wall,/area/security/armoury) +"amm" = (/obj/structure/table/standard,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/security/brig) +"amn" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/security/brig) +"amo" = (/turf/simulated/wall,/area/security/main) +"amp" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance Access";req_access = list(12,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos) +"amq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main) +"amr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main) +"ams" = (/obj/machinery/vending/security,/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/main) +"amt" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/main) +"amu" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/main) +"amv" = (/obj/structure/table/standard,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/machinery/recharger/wallcharger{pixel_y = 24},/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/simulated/floor/tiled,/area/security/main) +"amw" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/machinery/recharger/wallcharger{pixel_y = 24},/turf/simulated/floor/tiled,/area/security/main) +"amx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/main) +"amy" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"amz" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) +"amA" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"amB" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos) +"amC" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range) +"amD" = (/turf/simulated/floor/tiled,/area/security/range) +"amE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"amF" = (/obj/structure/table/woodentable,/turf/simulated/floor/plating,/area/maintenance/civ) +"amG" = (/obj/item/stack/tile/wood,/turf/simulated/floor/plating,/area/maintenance/civ) +"amH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/wood,/area/maintenance/civ) +"amI" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ) +"amJ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ) +"amK" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/civ) +"amL" = (/obj/item/stack/tile/floor,/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ) +"amM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"amN" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"amO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"amP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"amQ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"amR" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"amS" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main) +"amT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"amU" = (/obj/structure/table/standard,/obj/item/clothing/glasses/sunglasses{pixel_x = 4;pixel_y = 4},/obj/item/clothing/glasses/sunglasses{pixel_x = 1;pixel_y = 1;pixel_z = 0},/obj/item/clothing/glasses/sunglasses{pixel_x = -2;pixel_y = -2},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range) +"amV" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/security/range) +"amW" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/practiceshells{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/practiceshells{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/practiceshells{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/box/practiceshells{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/box/practiceshells,/obj/item/weapon/storage/box/practiceshells,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range) +"amX" = (/obj/structure/table/standard,/obj/item/clothing/ears/earmuffs{pixel_x = 4;pixel_y = 4},/obj/item/clothing/ears/earmuffs{pixel_x = 1;pixel_y = 1},/obj/item/clothing/ears/earmuffs{pixel_x = -2;pixel_y = -2},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range) +"amY" = (/obj/structure/table/glass,/obj/item/device/mass_spectrometer{pixel_x = 3},/obj/item/device/reagent_scanner{pixel_x = -3},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"amZ" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"ana" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"anb" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"anc" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication/Engine Waste Handling";req_one_access = list(10,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"and" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"ane" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos) +"anf" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos) +"ang" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"anh" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"ani" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos) +"anj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"ank" = (/obj/machinery/pipedispenser/disposal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anl" = (/obj/machinery/pipedispenser,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anm" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos) +"ann" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"ano" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication";req_one_access = list(10,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"anp" = (/obj/machinery/cell_charger,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/atmos) +"anr" = (/obj/structure/table/standard,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/structure/fireaxecabinet{pixel_x = 32},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"ans" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos) +"ant" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/random/junk,/turf/simulated/floor/plating,/area/engineering/atmos) +"anu" = (/obj/machinery/power/smes/buildable{charge = 2e+006;RCon_tag = "Substation - Atmospherics"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/engineering/atmos) +"anv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main) +"anw" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/engineering/atmos) +"anx" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main) +"any" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/main) +"anz" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/main) +"anA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE";pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/atmos) +"anB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos) +"anC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/security/forensics_office) +"anD" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos) +"anE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/obj/machinery/meter,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anF" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anG" = (/obj/item/stack/tile/wood,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/civ) +"anH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ) +"anI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"anJ" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ) +"anK" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ) +"anL" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/civ) +"anM" = (/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable,/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering) +"anO" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;name = "Security";sortType = "Security"},/turf/simulated/floor/tiled,/area/security/brig) +"anP" = (/obj/machinery/door/airlock/glass_security{name = "Briefing Room";req_access = list(1)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/main) +"anQ" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main) +"anR" = (/obj/machinery/door/airlock/maintenance{req_access = list(10,12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"anS" = (/obj/machinery/door/airlock/glass_security{name = "Firing Range";req_access = list(1)},/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/main) +"anT" = (/obj/structure/filingcabinet/security{desc = "A large cabinet with hard copy security records.";name = "Security Records"},/turf/simulated/floor/lino,/area/security/forensics_office) +"anU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/range) +"anV" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/security{c_tag = "Security - Firing Range Starboard";dir = 8},/turf/simulated/floor/tiled,/area/security/range) +"anW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"anX" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anY" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"anZ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"aoa" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 5},/obj/machinery/meter,/obj/machinery/door/window/brigdoor/westleft{dir = 1;icon_state = "leftsecure";name = "Engine Waste";req_access = newlist();req_one_access = list(10,24)},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"aob" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aoc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aod" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aoe" = (/obj/structure/closet/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aof" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/atmos/storage) +"aog" = (/obj/machinery/atmospherics/binary/pump{dir = 1;name = "Waste Pump"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/westleft{dir = 1;icon_state = "leftsecure";name = "Engine Waste";req_access = newlist();req_one_access = list(10,24)},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"aoh" = (/obj/structure/closet/bombclosetsecurity,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aoi" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aoj" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable,/turf/simulated/floor/plating,/area/engineering/engine_waste) +"aok" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/brigdoor/westleft{dir = 1;icon_state = "leftsecure";name = "Engine Waste";req_access = newlist();req_one_access = list(10,24)},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_waste) +"aol" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"aom" = (/obj/machinery/atmospherics/unary/freezer{dir = 1;icon_state = "freezer"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aon" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aoo" = (/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/energy/rifle/laser,/obj/item/weapon/gun/energy/rifle/laser,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aop" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/engineering/atmos) +"aoq" = (/obj/machinery/atmospherics/unary/heater{icon_state = "heater";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aor" = (/obj/item/weapon/stool/padded,/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main) +"aos" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main) +"aot" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main) +"aou" = (/obj/machinery/atmospherics/binary/pump/on{dir = 2;name = "Air to Ports"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aov" = (/obj/machinery/atmospherics/binary/pump/on{dir = 2;name = "Air to Supply"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aow" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aox" = (/obj/structure/table/rack,/obj/item/device/magnetic_lock/security{pixel_x = -3;pixel_y = 4},/obj/item/device/magnetic_lock/security{pixel_x = -3;pixel_y = 4},/obj/item/device/magnetic_lock/security{pixel_x = -3;pixel_y = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aoy" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Armoury Fore"},/obj/structure/table/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = -4;pixel_y = 4},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty{pixel_x = 4;pixel_y = -4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aoz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/range) +"aoA" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastleft{name = "Riot Gear Storage"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aoB" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/security/range) +"aoC" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/range) +"aoD" = (/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = 22},/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/camera/network/security{c_tag = "Armoury - Riot Storage"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aoE" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/maintenance/civ) +"aoF" = (/obj/item/weapon/stool/padded,/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/maintenance/civ) +"aoG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"aoH" = (/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aoI" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 9";dir = 9;icon_state = "camera"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aoJ" = (/obj/effect/decal/cleanable/generic,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ) +"aoK" = (/turf/simulated/wall/r_wall,/area/engineering/engine_room) +"aoL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) +"aoM" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/main) +"aoN" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/main) +"aoO" = (/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aoP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aoQ" = (/turf/simulated/wall/r_wall,/area/engineering/storage) +"aoR" = (/obj/machinery/power/emitter,/turf/simulated/floor/plating,/area/engineering/storage) +"aoS" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/plating,/area/engineering/storage) +"aoT" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/closet/crate/solar,/turf/simulated/floor/plating,/area/engineering/storage) +"aoU" = (/obj/machinery/power/port_gen/pacman/mrs,/obj/machinery/light{dir = 1},/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Hard Storage"},/turf/simulated/floor/plating,/area/engineering/storage) +"aoV" = (/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/engineering/storage) +"aoW" = (/obj/machinery/shield_gen,/turf/simulated/floor/plating,/area/engineering/storage) +"aoX" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aoY" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aoZ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/main) +"apa" = (/obj/machinery/door/airlock/glass_security{name = "Firing Range";req_access = list(1)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/main) +"apb" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"apc" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/range) +"apd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/security/range) +"ape" = (/obj/effect/floor_decal/corner/blue,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/security{c_tag = "Security - Forensic's Office";dir = 8},/turf/simulated/floor/tiled,/area/security/forensics_office) +"apf" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/maintenance/civ) +"apg" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/maintenance/civ) +"aph" = (/obj/machinery/door/blast/regular{tag = "icon-pdoor1 (WEST)";name = "Engine Waste Handling Access";icon_state = "pdoor1";dir = 8;layer = 3.3;id = "EngineEmitterPortWest"},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"api" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/machinery/door/blast/regular{tag = "icon-pdoor1 (WEST)";name = "Engine Waste Handling Access";icon_state = "pdoor1";dir = 8;layer = 3.3;id = "EngineEmitterPortWest"},/turf/simulated/floor/plating,/area/engineering/engine_waste) +"apj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"apk" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"apl" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"apm" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/binary/pump{dir = 4;name = "Supply to Waste"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"apn" = (/turf/simulated/floor/tiled/dark,/area/security/armoury) +"apo" = (/obj/machinery/atmospherics/pipe/manifold/visible/blue{icon_state = "map";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"app" = (/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"apq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/maintenance/security_starboard) +"apr" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aps" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/main) +"apt" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"apu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"apv" = (/turf/simulated/floor/tiled,/area/security/main) +"apw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"apx" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance";req_access = list(12,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"apy" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/obj/item/weapon/gun/energy/laser/practice,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/range) +"apz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/range) +"apA" = (/obj/structure/table/woodentable,/obj/item/stack/material/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ) +"apB" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"apC" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/maintenance/civ) +"apD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/engineering) +"apE" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ) +"apF" = (/obj/machinery/light/spot,/turf/simulated/floor/asteroid,/area/bridge) +"apG" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"apH" = (/turf/simulated/floor/plating,/area/engineering/engine_room) +"apI" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering) +"apJ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"apK" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/turf/simulated/floor/plating,/area/engineering/engine_room) +"apL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"apM" = (/turf/simulated/wall/r_wall,/area/engineering/engine_smes) +"apN" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/eastleft{name = "Riot Gear Storage"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"apO" = (/obj/structure/closet/crate,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil/super_capacity,/obj/item/weapon/smes_coil/super_capacity,/obj/item/weapon/smes_coil/super_io,/obj/item/weapon/smes_coil/super_io,/turf/simulated/floor/plating,/area/engineering/storage) +"apP" = (/turf/simulated/floor/plating,/area/engineering/storage) +"apQ" = (/obj/machinery/shieldgen,/turf/simulated/floor/plating,/area/engineering/storage) +"apR" = (/turf/simulated/open,/area/turbolift/engineering_station) +"apS" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"apT" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"apU" = (/obj/structure/noticeboard{desc = "A board for pinning important notices upon. This board seems a little chipped around the corners. Maybe it just needs to be noticed.";pixel_x = -32},/obj/machinery/newscaster{pixel_x = -27;pixel_y = -27},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Equipment Storage";dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/main) +"apV" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/main) +"apW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/main) +"apX" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/main) +"apY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/security/range) +"apZ" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"aqa" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/maintenance/civ) +"aqb" = (/obj/structure/disposalpipe/segment,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aqc" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aqd" = (/obj/structure/table/rack,/obj/random/handgun,/obj/random/handgun,/obj/random/handgun,/obj/random/handgun,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aqe" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{icon_state = "map";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aqf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aqg" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors.";id = "EngineEmitterPortWest";name = "Engine Room Blast Doors";pixel_x = 0;pixel_y = 25;req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aqh" = (/obj/structure/window/reinforced,/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main) +"aqi" = (/obj/structure/window/reinforced,/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main) +"aqj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main) +"aqk" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_smes) +"aql" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqm" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/main) +"aqn" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/security/main) +"aqo" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/tiled,/area/security/main) +"aqp" = (/obj/effect/floor_decal/industrial/loading,/turf/simulated/floor/tiled,/area/security/range) +"aqq" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ) +"aqr" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqs" = (/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ) +"aqt" = (/turf/simulated/wall/r_wall,/area/bridge) +"aqu" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqv" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1;name = "Scrubber to Waste"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;name = "Atmospherics";sortType = "Atmospherics"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqy" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aqz" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/eastleft{name = "Riot Gear Storage"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aqA" = (/turf/simulated/mineral,/area/mine/unexplored) +"aqB" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aqC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/main) +"aqD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/main) +"aqE" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/civ) +"aqF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"aqG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"aqH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"aqI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/bridge) +"aqJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"aqK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/bridge) +"aqL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/engineering/storage) +"aqM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/storage) +"aqN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/engineering/storage) +"aqO" = (/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/engineering/storage) +"aqP" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqQ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqR" = (/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqS" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqT" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{icon_state = "map";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aqU" = (/obj/machinery/atmospherics/omni/filter{tag_east = 4;tag_north = 2;tag_south = 1;tag_west = 0;use_power = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aqV" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aqW" = (/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aqX" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0;tag_north = 2;tag_south = 1;tag_west = 4;use_power = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aqY" = (/obj/machinery/power/smes/buildable{charge = 1e+007;cur_coils = 4;input_attempt = 1;input_level = 500000;output_attempt = 1;output_level = 500000;RCon_tag = "Engine - Main"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/engineering/engine_smes) +"aqZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 25},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"ara" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"arb" = (/obj/structure/table/reinforced,/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/device/multitool{pixel_x = 5},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"arc" = (/turf/simulated/floor/plating,/area/maintenance/engineering) +"ard" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engineering) +"are" = (/obj/structure/table/reinforced,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = 3},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"arf" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE";pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_smes) +"arg" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1;name = "Ports to Waste"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"arh" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"ari" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"arj" = (/obj/machinery/requests_console{department = "Atmospherics";departmentType = 4;name = "Atmos RC";pixel_x = 0;pixel_y = 28},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"ark" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics Locker Room";req_access = list(12,24)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"arl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"arm" = (/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/projectile/shotgun/pump,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"arn" = (/obj/structure/table/standard,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aro" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/item/device/pipe_painter,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"arp" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 50;pixel_x = 5;pixel_y = 5},/obj/item/stack/material/glass{amount = 50},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"arq" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment,/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering) +"arr" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/engineering) +"ars" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = -3;pixel_y = 3},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"art" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = -3;pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = -3;pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = 3;pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aru" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"arv" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/main) +"arw" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/security/main) +"arx" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donut,/turf/simulated/floor/tiled,/area/security/main) +"ary" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"arz" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ) +"arA" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plating,/area/maintenance/civ) +"arB" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Armoury Section";req_access = list(3)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"arC" = (/obj/structure/largecrate/animal/cow,/turf/simulated/floor/plating,/area/maintenance/civ) +"arD" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ) +"arE" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Solitary 1";dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/security/brig) +"arF" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"arG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"arH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) +"arI" = (/obj/structure/closet/wardrobe/red,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main) +"arJ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main) +"arK" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"arL" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"arM" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room) +"arN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/main) +"arO" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/main) +"arP" = (/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"arQ" = (/obj/machinery/door/window/westleft{name = "Firing Range Access";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/range) +"arR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"arS" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/status_display{pixel_y = 32},/obj/item/weapon/wrench,/obj/item/device/multitool,/obj/item/weapon/book/manual/security_space_law,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"arT" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge) +"arU" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge) +"arV" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"arW" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"arX" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Fore"},/obj/structure/fireaxecabinet{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge) +"arY" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/status_display{pixel_y = 32},/obj/item/weapon/paper{desc = "A few notes scratched out by the last CMO before they departed the station.";info = "\[i]\[center]To the incoming CMO of Exodus:\[/i]\[/center]\[br]\[br]I wish you and your crew well. Do take note:\[br]\[br]\[br]The Medical Emergency Red Phone system has proven itself well. Take care to keep the phones in their designated places as they have been optimised for broadcast. The two handheld green radios (I have left one in this office, and one near the Emergency Entrance) are free to be used. The system has proven effective at alerting Medbay of important details, especially during power outages.\[br]\[br]I think I may have left the toilet cubicle doors shut. It might be a good idea to open them so the staff and patients know they are not engaged.\[br]\[br]The new syringe gun has been stored in secondary storage. I tend to prefer it stored in my office, but 'guidelines' are 'guidelines'.\[br]\[br]Also in secondary storage is the grenade equipment crate. I've just realised I've left it open - you may wish to shut it.\[br]\[br]There were a few problems with their installation, but the Medbay Quarantine shutters should now be working again - they lock down the Emergency and Main entrances to prevent travel in and out. Pray you shan't have to use them.\[br]\[br]The new version of the Medical Diagnostics Manual arrived. I distributed them to the shelf in the staff break room, and one on the table in the corner of this room.\[br]\[br]The exam/triage room has the walking canes in it. I'm not sure why we'd need them - but there you have it.\[br]\[br]Emergency Cryo bags are beside the emergency entrance, along with a kit.\[br]\[br]Spare paper cups for the reception are on the left side of the reception desk.\[br]\[br]I've fed Runtime. She should be fine.\[br]\[br]\[br]\[center]That should be all. Good luck!\[/center]";name = "Outgoing CMO's Notes"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/book/manual/security_space_law,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"arZ" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"asa" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge) +"asb" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/head/helmet/space/void/atmos,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"asc" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_room) +"asd" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/button/remote/airlock{id = "engine_electrical_maintenance";name = "Door Bolt Control";pixel_x = -25;pixel_y = 5;req_access = list(10);specialfunctions = 4},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"ase" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"asf" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/engineering) +"asg" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ash" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/engineering) +"asi" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"asj" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Camera Corridor 4";dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ask" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"asl" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engineering/storage) +"asm" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/plating,/area/engineering/storage) +"asn" = (/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/meter{frequency = 1443;id = "dloop_atm_meter";name = "Distribution Loop"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aso" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"asp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"asq" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/meter{frequency = 1443;id = "wloop_atm_meter";name = "Waste Loop"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"asr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/security/main) +"ass" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"ast" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/security/main) +"asu" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"asv" = (/obj/structure/target_stake,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range) +"asw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"asx" = (/obj/structure/target_stake,/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range) +"asy" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmosphrics Maintenance";dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"asz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/engineering) +"asA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"asB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"asC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"asD" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Armoury Section";req_access = list(3)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"asE" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"asF" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/main) +"asG" = (/turf/simulated/floor/tiled,/area/bridge) +"asH" = (/obj/item/device/radio/beacon,/turf/simulated/floor/tiled,/area/bridge) +"asI" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/security/main) +"asJ" = (/obj/machinery/camera/network/security{c_tag = "Security - Firing Range Aft";dir = 1},/turf/simulated/floor/tiled,/area/security/range) +"asK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"asL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"asM" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room) +"asN" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"asO" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"asP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"asQ" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"asR" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/bridge) +"asS" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge) +"asT" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge) +"asU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"asV" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/tiled,/area/bridge) +"asW" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Fore";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"asX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"asY" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"asZ" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"ata" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"atb" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plating,/area/engineering/storage) +"atc" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"atd" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"ate" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "engine_electrical_maintenance";locked = 1;name = "Electrical Maintenance";req_access = list(10)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/engine_smes) +"atf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/camera/network/engineering{c_tag = "Engineering - SMES Room";dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"atg" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"ath" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"ati" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"atj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"atk" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"atl" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access";req_access = list(11)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/tiled,/area/engineering/engine_smes) +"atm" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engineering) +"atn" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ato" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engineering/storage) +"atp" = (/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/engineering/storage) +"atq" = (/obj/structure/closet/secure_closet/guncabinet,/obj/effect/decal/warning_stripes,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"atr" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/plating,/area/engineering/storage) +"ats" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{icon_state = "intact-scrubbers";dir = 6},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"att" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atu" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{icon_state = "intact-supply";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"atv" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"atw" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/main) +"atx" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/main) +"aty" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/main) +"atz" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/structure/disposalpipe/segment,/obj/machinery/light,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Storage";dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"atA" = (/obj/structure/cable/green,/obj/machinery/power/apc/super{name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"atB" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/device/flashlight,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/device/gps/engineering,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"atC" = (/obj/structure/dispenser/oxygen{phorontanks = 10},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"atD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"atE" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"atF" = (/obj/structure/closet/secure_closet/guncabinet,/obj/effect/decal/warning_stripes,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/flashshells{pixel_x = -2;pixel_y = 2},/obj/item/weapon/storage/box/beanbags{pixel_x = -4;pixel_y = 4},/obj/item/weapon/storage/box/beanbags{pixel_x = -4;pixel_y = 4},/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"atG" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atH" = (/obj/structure/closet/secure_closet/guncabinet,/obj/effect/decal/warning_stripes,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/shotgunshells{pixel_x = 4;pixel_y = -4},/obj/item/weapon/storage/box/shotgunshells{pixel_x = 4;pixel_y = -4},/obj/item/weapon/storage/box/shotgunammo{pixel_x = 2;pixel_y = -2},/obj/item/weapon/storage/box/shotgunammo{pixel_x = 2;pixel_y = -2},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"atI" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"atJ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"atK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage";req_access = list(1)},/turf/simulated/floor/tiled,/area/security/main) +"atL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"atM" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/bridge) +"atN" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/bridge) +"atO" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/bridge) +"atP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage";req_access = list(1)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/main) +"atQ" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atS" = (/turf/simulated/wall/r_wall,/area/mine/unexplored) +"atT" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room) +"atU" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"atV" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atW" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atX" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atY" = (/obj/machinery/door/airlock/glass_command{name = "Command Maintenance";req_access = list(19)},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"atZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge) +"aua" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"aub" = (/obj/machinery/computer/security/engineering,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"auc" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"aud" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aue" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"auf" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/engineering/atmos/storage) +"aug" = (/obj/machinery/power/smes/buildable{charge = 2e+006;input_attempt = 1;input_level = 100000;output_attempt = 1;output_level = 200000;RCon_tag = "Engine - Core"},/obj/structure/cable/orange{icon_state = "0-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"auh" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aui" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access";req_access = list(11)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"auj" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"auk" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = 0;pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_monitoring) +"aul" = (/obj/machinery/door/airlock/engineering{name = "Engineering Hard Storage";req_access = list(11)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/storage) +"aum" = (/obj/machinery/door/airlock/engineering{name = "Engineering Hard Storage";req_access = list(11)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/storage) +"aun" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"auo" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage) +"aup" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"auq" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aur" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/atmos/storage) +"aus" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aut" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering) +"auu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"auv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"auw" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aux" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"auy" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"auz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"auA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/camera/network/command{c_tag = "Security - Corridor Camera 8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"auB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"auC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"auD" = (/turf/simulated/wall,/area/lawoffice) +"auE" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"auF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"auG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"auH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"auI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"auJ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{desc = "Talk... listen through this.";name = "Station Intercom (Brig Radio)";pixel_x = 0;pixel_y = 25;wires = 7},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"auK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"auL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/security/brig) +"auM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig) +"auN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/security/brig) +"auO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"auP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"auQ" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"auR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"auS" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"auT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"auU" = (/obj/effect/floor_decal/corner/yellow/full,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"auV" = (/obj/structure/sign/securearea{name = "\improper DANGER: REACTOR VENT SHAFT"},/turf/simulated/wall/r_wall,/area/engineering/engine_waste) +"auW" = (/obj/machinery/computer/power_monitor,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"auX" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"auY" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge) +"auZ" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall/r_wall,/area/engineering/engine_room) +"ava" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/computer/communications,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge) +"avb" = (/obj/machinery/computer/message_monitor,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"avc" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/tiled,/area/bridge) +"avd" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"ave" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge) +"avf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"avg" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avh" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/item/modular_computer/console/preset/medical,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"avi" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avj" = (/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"avk" = (/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"avl" = (/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"avm" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avn" = (/obj/machinery/light{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Corridor Camera 2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avo" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avp" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"avq" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/monitoring) +"avr" = (/obj/machinery/computer/security/engineering,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"avs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"avt" = (/obj/structure/cable/orange{icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"avu" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"avv" = (/obj/machinery/computer/general_air_control/supermatter_core{frequency = 1438;input_tag = "cooling_in";name = "Engine Cooling Control";output_tag = "cooling_out";pressure_setting = 100;sensors = list("engine_sensor" = "Engine Core")},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"avx" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avy" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled,/area/engineering/foyer) +"avz" = (/turf/simulated/wall/r_wall,/area/engineering/foyer) +"avA" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_personal,/obj/item/device/flashlight,/obj/item/device/gps/engineering,/turf/simulated/floor/tiled,/area/engineering/locker_room) +"avB" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_personal,/obj/item/device/flashlight,/obj/item/device/gps/engineering,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"avC" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering) +"avD" = (/turf/simulated/wall/r_wall,/area/engineering/locker_room) +"avE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engineering) +"avF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avH" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"avI" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"avJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"avK" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 32},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"avL" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/brig) +"avM" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"avN" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"avO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"avP" = (/obj/machinery/computer/sentencing/courtroom{pixel_y = 28},/turf/simulated/floor/tiled,/area/security/brig) +"avQ" = (/obj/machinery/camera/network/security{c_tag = "Security - Processing"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"avR" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avS" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "engineering_dock_outer";locked = 1;name = "Engineering Dock Airlock";req_access = list(13)},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"avT" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"avU" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Monitoring"},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"avV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"avW" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer) +"avX" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"avY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) +"avZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig) +"awa" = (/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1475;listening = 1;name = "Station Intercom (Security)";pixel_x = 0;pixel_y = 22},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Entrance"},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/foyer) +"awb" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering) +"awc" = (/obj/machinery/hologram/holopad,/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Armoury Aft";dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"awd" = (/turf/simulated/floor/carpet,/area/lawoffice) +"awe" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/lawoffice) +"awf" = (/turf/simulated/floor/wood,/area/lawoffice) +"awg" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"awh" = (/turf/simulated/wall,/area/hallway/primary/starboard) +"awi" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/hand_labeler{pixel_x = 4;pixel_y = 2},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/brig) +"awj" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/asteroid,/area/bridge) +"awk" = (/turf/simulated/wall,/area/bridge) +"awl" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red{pixel_x = -3;pixel_y = -3},/obj/item/device/camera{pixel_x = 3;pixel_y = 5},/turf/simulated/floor/tiled,/area/security/brig) +"awm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"awn" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/brig) +"awo" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"awp" = (/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) +"awq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 7";dir = 1},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"awr" = (/turf/simulated/open,/area/engineering/engine_waste) +"aws" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"awt" = (/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"awu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"awv" = (/obj/structure/closet/lawcloset,/obj/item/weapon/storage/briefcase{pixel_x = 3;pixel_y = 2},/obj/item/weapon/storage/briefcase,/turf/simulated/floor/wood,/area/lawoffice) +"aww" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"awx" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]";name = "Armory Inventory"},/obj/item/device/taperecorder,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Port";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"awy" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/plating,/area/engineering/engine_room) +"awz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 1},/turf/simulated/floor/tiled,/area/bridge) +"awA" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"awB" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awC" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "bridge blast";name = "Bridge Lockdown";pixel_x = 0;pixel_y = 0;req_access = list(19)},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"awD" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awE" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/item/device/paicard,/obj/item/weapon/aicard,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Starboard";dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"awF" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/asteroid,/area/bridge) +"awG" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "EngineVent";name = "Reactor Vent";p_open = 0},/turf/simulated/floor/airless,/area/engineering/engine_waste) +"awH" = (/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room) +"awI" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1438;icon_state = "map_injector";id = "cooling_in";name = "Coolant Injector";pixel_y = 1;power_rating = 30000;use_power = 1;volume_rate = 700},/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room) +"awJ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"awK" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "engine_access_hatch";locked = 1;req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"awL" = (/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/engineering/engine_room) +"awM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"awN" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awO" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"awQ" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"awR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awV" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"awW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"awX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"awY" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"awZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"axa" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"axb" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"axc" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"axd" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"axe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"axf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"axg" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"axh" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"axi" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/item/device/pipe_painter,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"axj" = (/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig) +"axk" = (/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig) +"axl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig) +"axm" = (/obj/machinery/computer/atmos_alert,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"axn" = (/turf/simulated/wall,/area/security/prison) +"axo" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 5},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"axp" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"axq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"axr" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) +"axs" = (/turf/simulated/floor/tiled/ramp/bottom,/area/security/brig) +"axt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/brig) +"axu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Armory";req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"axv" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled,/area/security/brig) +"axw" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 9},/obj/item/weapon/pen{pixel_x = 3;pixel_y = 7},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"axx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"axy" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/wood,/area/lawoffice) +"axz" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{pixel_x = 28},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"axA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison) +"axB" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"axC" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit";name = "Brig Exit";req_access = list(2)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison) +"axD" = (/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"axE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/prison) +"axF" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/northright{id = "Cell 1";name = "Cell 1";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"axG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/banner,/turf/simulated/floor/tiled,/area/bridge) +"axH" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/northright{id = "Cell 2";name = "Cell 2";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"axI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge) +"axJ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"axK" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/windowtint{id = "IAA Cubicle 1";pixel_x = -24;pixel_y = -7},/turf/simulated/floor/carpet,/area/lawoffice) +"axL" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 1"},/turf/simulated/floor/carpet,/area/lawoffice) +"axM" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen{pixel_x = 2;pixel_y = 2},/obj/item/weapon/pen/blue{pixel_x = 1;pixel_y = 1},/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/lawoffice) +"axN" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/open,/area/engineering/engine_waste) +"axO" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 4;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 8;id = "iaa"},/turf/simulated/floor/plating,/area/lawoffice) +"axP" = (/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room) +"axQ" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red{desc = "A red folder. You can make out a small scribble in the top right corner. It reads Top Secret.";pixel_x = -3},/obj/machinery/button/windowtint{id = "iaa";pixel_x = 8;pixel_y = 8},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 4";dir = 8},/turf/simulated/floor/wood,/area/lawoffice) +"axR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"axS" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"axT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"axU" = (/obj/machinery/computer/security,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"axV" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/bridge) +"axW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/banner,/turf/simulated/floor/tiled,/area/bridge) +"axX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"axY" = (/obj/effect/floor_decal/corner/purple/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge) +"axZ" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"aya" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "EngineVent";name = "Reactor Vent";p_open = 0},/turf/simulated/floor/asteroid,/area/engineering/engine_room) +"ayb" = (/obj/machinery/air_sensor{frequency = 1438;id_tag = "engine_sensor";output = 63},/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room) +"ayc" = (/obj/machinery/mass_driver{icon_state = "mass_driver";dir = 8;id = "enginecore"},/obj/machinery/power/supermatter{layer = 4},/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room) +"ayd" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aye" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/orange{icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"ayf" = (/obj/machinery/power/emitter{anchored = 1;dir = 8;icon_state = "emitter";id = "EngineEmitter";state = 2},/obj/structure/cable/orange{icon_state = "0-4"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"ayg" = (/obj/structure/cable/orange{icon_state = "1-8"},/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room) +"ayh" = (/obj/structure/cable/orange{icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"ayi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Monitoring";dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayj" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"ayk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayl" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors.";id = "EngineBlast";name = "Engine Monitoring Room Blast Doors";pixel_x = 0;pixel_y = -3;req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port.";id = "SupermatterPort";name = "Reactor Blast Doors";pixel_x = -6;pixel_y = 7;req_access = list(10)},/obj/machinery/button/remote/emitter{desc = "A remote control-switch for the engine emitter.";id = "EngineEmitter";name = "Engine Emitter";pixel_x = 6;pixel_y = 7;req_access = list(10)},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aym" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayn" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayo" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"ayq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"ayr" = (/obj/machinery/door/airlock/glass_engineering{name = "Engine Monitoring Room";req_access = list(11)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ays" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) +"ayt" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayv" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled,/area/engineering/foyer) +"ayw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"ayx" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ayy" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayz" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"ayA" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayB" = (/turf/simulated/wall,/area/security/armoury) +"ayC" = (/obj/machinery/computer/prisoner,/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_y = 30},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ayD" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayE" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayF" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayG" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe{pixel_x = 8},/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe{pixel_x = -8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Corridor Camera 1";dir = 8},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ayH" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"ayI" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"ayJ" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"ayK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"ayL" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer) +"ayM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"ayN" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/brig) +"ayO" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{icon_state = "map";dir = 1},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/foyer) +"ayP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"ayQ" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"ayR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ayS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/camera/network/security{c_tag = "Security - Armoury Entrance"},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ayT" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/laserproof{pixel_x = -2;pixel_y = 2},/obj/item/clothing/suit/armor/laserproof{pixel_x = 2;pixel_y = -2},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastleft{name = "Ablative Armour Storage"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light/small/emergency{dir = 8},/obj/item/clothing/head/helmet/ablative,/obj/item/clothing/head/helmet/ablative,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ayU" = (/obj/machinery/flasher/portable,/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ayV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/camera/network/security{c_tag = "Security - Holding Cell";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"ayW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Processing";req_access = list(1)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"ayX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/security/prison) +"ayY" = (/obj/structure/bed,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/sign/nosmoking_1{pixel_x = 32},/turf/simulated/floor/tiled,/area/security/prison) +"ayZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aza" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled,/area/security/brig) +"azb" = (/turf/simulated/floor/plating,/area/security/brig) +"azc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/brig) +"azd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Processing";req_access = list(1)},/turf/simulated/floor/tiled,/area/security/brig) +"aze" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 1"},/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/lawoffice) +"azf" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"azg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/wood,/area/lawoffice) +"azh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/lawoffice) +"azi" = (/obj/structure/window/reinforced/polarized{id = "IAA's Office"},/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/wood,/area/lawoffice) +"azj" = (/obj/machinery/light{dir = 4;status = 2},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig) +"azk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"azl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/prison) +"azm" = (/turf/simulated/open,/area/turbolift/vault_station) +"azn" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/southright{name = "Brig N2O Access";req_access = list(3)},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig) +"azo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled,/area/security/prison) +"azp" = (/obj/machinery/flasher{id = "permentryflash";name = "Floor mounted flash";pixel_x = 0},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/security/prison) +"azq" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/security{c_tag = "Security - Cell 1";dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"azr" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge) +"azs" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/security{c_tag = "Security - Cell 2";dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"azt" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/plating,/area/security/brig) +"azu" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 1"},/obj/structure/filingcabinet/chestdrawer,/obj/machinery/light/small{dir = 8},/obj/machinery/requests_console{department = "Internal Affairs";departmentType = 5;pixel_x = -32},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 3";dir = 4},/turf/simulated/floor/carpet,/area/lawoffice) +"azv" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 1"},/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 1"},/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/carpet,/area/lawoffice) +"azw" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 8;id = "iaa"},/turf/simulated/floor/plating,/area/lawoffice) +"azx" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"azy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"azz" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"azA" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"azB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azD" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/bridge) +"azE" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/bridge) +"azF" = (/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"azG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azI" = (/obj/machinery/computer/robotics,/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"azJ" = (/obj/machinery/atmospherics/unary/vent_pump/engine{dir = 4;external_pressure_bound = 100;external_pressure_bound_default = 0;frequency = 1438;icon_state = "map_vent_in";id_tag = "cooling_out";initialize_directions = 1;pressure_checks = 1;pressure_checks_default = 1;pump_direction = 0;use_power = 1},/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room) +"azK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azL" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 10},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"azM" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "engine_access_hatch";locked = 1;req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"azN" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room) +"azO" = (/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Power";name_tag = "Engine Power"},/obj/structure/cable/orange,/turf/simulated/floor/plating,/area/engineering/engine_room) +"azP" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Output";name_tag = "Engine Output"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"azQ" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Corridor Camera 3";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"azT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) +"azU" = (/turf/simulated/floor/tiled,/area/engineering/foyer) +"azV" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/engineering) +"azW" = (/turf/simulated/wall,/area/maintenance/substation/engineering) +"azX" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/engineering) +"azY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"azZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAa" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAc" = (/turf/simulated/floor/asteroid,/area/syndicate_station/caverns) +"aAd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAe" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/brig) +"aAf" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/brig) +"aAg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig) +"aAh" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/security/brig) +"aAi" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/brig) +"aAj" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAl" = (/obj/item/weapon/shovel{pixel_x = 8},/obj/item/weapon/shovel{pixel_x = -8},/obj/item/weapon/shovel,/obj/structure/table/rack,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAm" = (/obj/machinery/computer/general_air_control{frequency = 1441;name = "Tank Monitor";sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/machinery/requests_console{department = "Atmospherics";departmentType = 4;name = "Atmos RC";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"aAn" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/brig) +"aAo" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"aAp" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/security/prison) +"aAq" = (/obj/machinery/computer/general_air_control{frequency = 1443;level = 3;name = "Distribution and Waste Monitor";sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Engine Waste")},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"aAr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aAs" = (/turf/simulated/floor/tiled,/area/security/prison) +"aAt" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aAu" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aAv" = (/obj/machinery/recharge_station,/turf/simulated/floor/greengrid,/area/security/brig) +"aAw" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/security/brig) +"aAx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"aAy" = (/obj/machinery/recharger/wallcharger{pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aAz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aAA" = (/obj/machinery/door/window/brigdoor/southright{dir = 4;icon_state = "rightsecure";name = "Distribution Post";req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aAB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/lawoffice) +"aAC" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/lawoffice) +"aAD" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/bulletproof{pixel_x = -2;pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2;pixel_y = -2},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastleft{name = "Bulletproof Armour Storage"},/obj/structure/window/reinforced{dir = 1},/obj/item/clothing/head/helmet/ballistic,/obj/item/clothing/head/helmet/ballistic,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aAE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aAF" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder) +"aAG" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder) +"aAH" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder) +"aAI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aAJ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig) +"aAK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aAL" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig) +"aAM" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/prison) +"aAN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison) +"aAO" = (/obj/structure/toilet{dir = 4;pixel_y = 5},/turf/simulated/floor/tiled,/area/security/prison) +"aAP" = (/obj/structure/closet/secure_closet/brig{id = "Cell 1";name = "Cell 1 Locker"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aAQ" = (/obj/structure/closet/secure_closet/brig{id = "Cell 2";name = "Cell 2 Locker"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aAR" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "IAA Cubical 2"},/obj/structure/filingcabinet/chestdrawer,/obj/machinery/light/small{dir = 8},/obj/machinery/requests_console{department = "Internal Affairs";departmentType = 5;pixel_x = -32},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 2";dir = 4},/turf/simulated/floor/carpet,/area/lawoffice) +"aAS" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "IAA Cubical 2"},/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 2"},/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/carpet,/area/lawoffice) +"aAT" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/engineering/engine_waste) +"aAU" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "IAA Cubical 2"},/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/lawoffice) +"aAV" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aAW" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_x = 3;pixel_y = 3},/obj/item/device/taperecorder,/turf/simulated/floor/wood,/area/lawoffice) +"aAX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aAY" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/computer/security/engineering,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aAZ" = (/obj/effect/floor_decal/corner/blue/full,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge) +"aBa" = (/obj/machinery/computer/prisoner,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aBb" = (/obj/machinery/recharger/wallcharger{pixel_x = 6;pixel_y = -32},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/bridge) +"aBc" = (/obj/structure/closet/radiation,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aBd" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge) +"aBe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge) +"aBf" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aBg" = (/obj/machinery/light_switch{pixel_y = -20},/obj/structure/sign/nosmoking_1{pixel_y = -36},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/bridge) +"aBh" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Bridge";departmentType = 5;name = "Bridge RC";pixel_y = -30},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aBi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) +"aBj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) +"aBk" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge) +"aBl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) +"aBm" = (/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aBn" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge) +"aBo" = (/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 9},/obj/item/modular_computer/console/preset/research,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aBp" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Engineering Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aBq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port.";id = "SupermatterPort";name = "Reactor Blast Doors";pixel_x = -25;pixel_y = -5;req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors.";id = "EngineBlast";name = "Engine Monitoring Room Blast Doors";pixel_x = -25;pixel_y = 5;req_access = list(10)},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aBr" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/maintenance/engineering) +"aBs" = (/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aBt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"aBu" = (/obj/item/device/radio/intercom{layer = 4;name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aBv" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aBw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"aBx" = (/obj/machinery/newscaster{layer = 3.3;pixel_x = 0;pixel_y = -27},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aBy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aBz" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"aBA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"aBB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"aBC" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/tiled,/area/security/brig) +"aBD" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage";req_one_access = list(11,24)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/storage) +"aBE" = (/turf/simulated/wall,/area/security/warden) +"aBF" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage) +"aBG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage) +"aBH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage) +"aBI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage) +"aBJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/security/warden) +"aBK" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aBL" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"aBM" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) +"aBN" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Monitoring Room";req_access = list(24)},/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"aBO" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Engineering"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aBP" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engineering Subgrid";name_tag = "Engineering Subgrid"},/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light/small{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engineering Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aBQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE";pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/engineering) +"aBR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/bed/chair/office/dark,/obj/machinery/recharger/wallcharger{pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aBS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/lawoffice) +"aBT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aBU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/steel_reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aBV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/emps{pixel_x = -2;pixel_y = 2},/obj/item/weapon/storage/box/flashbangs{pixel_x = 2;pixel_y = -2},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aBW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aBX" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aBY" = (/obj/machinery/door/airlock/highsecurity{name = "Vault Elevator"},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"aBZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"aCa" = (/turf/simulated/wall/r_wall,/area/teleporter) +"aCb" = (/obj/machinery/door/airlock/maintenance{req_access = list(20)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/teleporter) +"aCc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge) +"aCd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge) +"aCe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"aCf" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aCg" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/warden) +"aCh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Warden's Office";req_access = list(3)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aCi" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/warden) +"aCj" = (/obj/machinery/door/firedoor,/obj/structure/table/steel_reinforced,/obj/item/weapon/paper_bin{pixel_x = 5},/obj/item/weapon/pen,/obj/machinery/door/window/brigdoor/southright{name = "Warden's Desk";req_access = list(3)},/obj/machinery/door/window/brigdoor/northleft{name = "Warden's Desk"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/warden) +"aCk" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry";name = "Brig Entry";req_access = list(2)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison) +"aCl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/prison) +"aCm" = (/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/rods,/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/storage) +"aCn" = (/turf/simulated/floor/tiled,/area/engineering/storage) +"aCo" = (/obj/machinery/door/blast/regular{id = "Cell 1";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison) +"aCp" = (/obj/machinery/door/blast/regular{id = "Cell 2";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison) +"aCq" = (/obj/machinery/vending/engivend,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/storage) +"aCr" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aCs" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aCt" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/windowtint{id = "IAA Cubicle 2";pixel_x = -24;pixel_y = 7},/turf/simulated/floor/carpet,/area/lawoffice) +"aCu" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 2"},/turf/simulated/floor/carpet,/area/lawoffice) +"aCv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 4;id = "iaa"},/obj/structure/window/reinforced/polarized{id = "iaa"},/turf/simulated/floor/plating,/area/lawoffice) +"aCw" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{anchored = 0;department = "Internal Affairs"},/turf/simulated/floor/wood,/area/lawoffice) +"aCx" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aCy" = (/obj/machinery/papershredder,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCz" = (/obj/machinery/vending/snack,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCA" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/machinery/camera/network/civilian_west{c_tag = "Vault - Secure Lift";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder) +"aCB" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge) +"aCC" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aCD" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aCE" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aCF" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aCG" = (/obj/structure/cable/orange,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aCH" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aCI" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage) +"aCJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aCK" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/tiled,/area/engineering/storage) +"aCL" = (/obj/structure/table/standard,/obj/machinery/cell_charger{pixel_y = 4},/turf/simulated/floor/tiled,/area/engineering/storage) +"aCM" = (/obj/machinery/vending/tool,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/storage) +"aCN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCO" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Lobby Fore"},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"aCQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"aCR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"aCS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig) +"aCT" = (/obj/machinery/requests_console{announcementConsole = 0;department = "Engineering";departmentType = 4;name = "Engineering RC";pixel_x = 0;pixel_y = 28},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCU" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCV" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCW" = (/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aCX" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/machinery/computer/station_alert/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCY" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aCZ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aDa" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aDb" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aDc" = (/obj/machinery/computer/arcade,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aDd" = (/obj/machinery/door/airlock/engineering{name = "Engineering Substation";req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/substation/engineering) +"aDe" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aDf" = (/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aDg" = (/obj/machinery/door/airlock/engineering{name = "Engineering Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aDh" = (/obj/structure/toilet{pixel_y = 5},/turf/simulated/floor/tiled,/area/security/prison) +"aDi" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"aDj" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aDk" = (/obj/machinery/door/firedoor,/obj/structure/table/steel_reinforced,/obj/machinery/door/window/brigdoor/southright{name = "Armoury Distribution";req_access = list(2)},/obj/machinery/door/window/brigdoor/southright{dir = 1;icon_state = "rightsecure";name = "Armoury Distribution";req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aDl" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 2"},/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/carpet,/area/lawoffice) +"aDm" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 2"},/turf/simulated/floor/carpet,/area/lawoffice) +"aDn" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/lawoffice) +"aDo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/lawoffice) +"aDp" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_security{name = "Armory";req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aDq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/lawoffice) +"aDr" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/security/armoury) +"aDs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aDt" = (/obj/machinery/door/blast/regular{id = "armoury";name = "Emergency Access"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aDu" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Holding Cell";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig) +"aDv" = (/turf/simulated/floor/tiled,/area/teleporter) +"aDw" = (/obj/structure/table/standard,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/item/weapon/hand_tele,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/teleporter) +"aDx" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled,/area/teleporter) +"aDy" = (/obj/item/device/radio/beacon,/obj/machinery/camera/network/command{c_tag = "Bridge - Teleporter"},/turf/simulated/floor/tiled,/area/teleporter) +"aDz" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/teleporter) +"aDA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/clipboard,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]";name = "Armory Inventory"},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aDB" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/teleporter) +"aDC" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/grass,/area/bridge) +"aDD" = (/turf/simulated/floor/grass,/area/bridge) +"aDE" = (/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aDF" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/button/remote/airlock{id = "prisonentry";name = "Entry Doors";pixel_x = -28;pixel_y = 26;req_access = list(2)},/obj/machinery/button/flasher{id = "permentryflash";name = "entry flash";pixel_x = 28;pixel_y = 26;req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/button/remote/airlock{id = "prisonexit";name = "Entry Doors";pixel_x = -28;pixel_y = 36;req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aDG" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/security/prison) +"aDH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden) +"aDI" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/prison) +"aDJ" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge) +"aDK" = (/obj/item/device/radio/intercom{desc = "Talk... listen through this.";name = "Station Intercom (Brig Radio)";pixel_x = 0;pixel_y = 25;wires = 7},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aDL" = (/obj/machinery/computer/arcade,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aDM" = (/obj/structure/table/standard,/obj/machinery/librarycomp,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aDN" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aDO" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/prison) +"aDP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aDQ" = (/turf/simulated/wall/r_wall,/area/engineering/engine_airlock) +"aDR" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/prison) +"aDS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/prison) +"aDT" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aDU" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison) +"aDV" = (/obj/structure/closet/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock) +"aDW" = (/obj/structure/sink{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/security{c_tag = "Security - Cell 3";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/prison) +"aDX" = (/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/storage) +"aDY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/engineering/storage) +"aDZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aEa" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/lawoffice) +"aEb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{desc = "It opens and closes. Bring your relationship affairs here.";name = "Internal Affairs";req_access = list(38)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/lawoffice) +"aEc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aEd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEe" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aEf" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEg" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/teleporter) +"aEh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"aEi" = (/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva) +"aEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/bridge) +"aEk" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aEl" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva) +"aEm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"aEn" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"aEo" = (/obj/effect/floor_decal/corner/paleblue/full,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aEp" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Aft";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aEq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"aEr" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aEs" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aEt" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aEu" = (/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{id_tag = "engine_room_airlock";name = "Engine Room Airlock";pixel_x = -24;tag_airpump = "engine_airlock_pump";tag_chamber_sensor = "eng_al_c_snsr";tag_exterior_door = "engine_airlock_exterior";tag_exterior_sensor = "eng_al_ext_snsr";tag_interior_door = "engine_airlock_interior";tag_interior_sensor = "eng_al_int_snsr"},/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aEv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aEw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock) +"aEx" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aEy" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/security/warden) +"aEz" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage) +"aEA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aEB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aEC" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aED" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/storage) +"aEE" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEF" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEI" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEJ" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aEK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva) +"aEL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "E.V.A. Maintenance";req_access = list(12,18)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aEM" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Camera Corridor 5";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aEN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"aEO" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"aEP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/banner,/turf/simulated/floor/wood,/area/lawoffice) +"aEQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/papershredder,/turf/simulated/floor/wood,/area/lawoffice) +"aER" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/lawoffice) +"aES" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/brig) +"aET" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"aEU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"aEV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"aEW" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/teleporter) +"aEX" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/teleporter) +"aEY" = (/obj/machinery/shieldwallgen,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/teleporter) +"aEZ" = (/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"aFa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"aFb" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aFc" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/bridge) +"aFd" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aFe" = (/obj/machinery/button/remote/blast_door{id = "Cell 1";name = "Cell 1 Door";pixel_x = -38;pixel_y = 15;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 2";name = "Cell 2 Door";pixel_x = -38;pixel_y = 7;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 3";name = "Cell 3 Door";pixel_x = -38;pixel_y = -1;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 4";name = "Cell 4 Door";pixel_x = -28;pixel_y = 15;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 5";name = "Cell 5 Door";pixel_x = -28;pixel_y = 7;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Brig Lockdown";name = "Brig Lockdown";pixel_x = -28;pixel_y = -1;req_access = list(3)},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aFf" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aFg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/junction/yjunction{dir = 4},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden) +"aFh" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aFi" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison) +"aFj" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/security/prison) +"aFk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison) +"aFl" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/prison) +"aFm" = (/obj/machinery/door/blast/regular{dir = 1;id = "Cell 3";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison) +"aFn" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/eastright{id = "Cell 3";name = "Cell 3";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aFo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/security/prison) +"aFp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aFq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"aFr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/wood,/area/lawoffice) +"aFs" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/lawoffice) +"aFt" = (/obj/structure/table/woodentable,/obj/item/weapon/folder{pixel_x = 5;pixel_y = 5},/obj/item/weapon/folder/blue{pixel_y = 5},/obj/item/weapon/folder/red{pixel_x = -5;pixel_y = 5},/obj/item/weapon/folder/white{pixel_x = 5},/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/denied{pixel_x = -3;pixel_y = 4},/obj/item/weapon/stamp/internalaffairs,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 1";dir = 8},/turf/simulated/floor/wood,/area/lawoffice) +"aFu" = (/obj/machinery/atm{pixel_x = -32},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Internal Affairs Entrance";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aFv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/storage) +"aFw" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/teleporter) +"aFx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/teleporter) +"aFy" = (/obj/machinery/shieldwallgen,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/teleporter) +"aFz" = (/obj/structure/flora/ausbushes/ppflowers,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/grass,/area/bridge) +"aFA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"aFB" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/bridge) +"aFC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"aFD" = (/obj/structure/flora/ausbushes/ywflowers,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/grass,/area/bridge) +"aFE" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1;dir = 4;icon_state = "circ-off"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aFF" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aFG" = (/obj/machinery/atmospherics/valve/digital{dir = 1;icon_state = "map_valve0";name = "Emergency Cooling Valve 1";tag = "icon-map_valve0 (NORTH)"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aFH" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aFI" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379;icon_state = "door_closed";id_tag = "engine_airlock_interior";locked = 0;name = "Engine Airlock Interior";req_access = list(11)},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aFJ" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379;icon_state = "door_closed";id_tag = "engine_airlock_exterior";locked = 0;name = "Engine Airlock Exterior";req_access = list(11)},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aFK" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2;frequency = 1379;id = "tox_airlock_pump"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aFL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engine_airlock) +"aFM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock) +"aFN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aFO" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aFP" = (/obj/machinery/door/airlock/maintenance_hatch{icon_state = "door_closed";locked = 0;name = "Engine Access";req_one_access = list(11)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/tiled,/area/engineering/engine_airlock) +"aFQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aFR" = (/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aFS" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/machinery/camera/network/engineering{c_tag = "Engineering - EVA Storage";dir = 4},/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/storage) +"aFT" = (/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/security/brig) +"aFU" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aFV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage";req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/storage) +"aFW" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/storage) +"aFX" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aFY" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aFZ" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGa" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGb" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGc" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGd" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/effect/landmark/start{name = "Engineering Apprentice"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGe" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGf" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{dir = 2;icon_state = "pipe-j1s";name = "Engineering";sortType = "Engineering"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGg" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -2;pixel_y = 5},/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aGh" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGi" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Hardsuits";req_one_access = list(5)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGk" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGl" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGm" = (/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Hardsuits";req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGo" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGp" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/security,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/security,/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aGq" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/security/prison) +"aGr" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/security/prison) +"aGs" = (/obj/structure/table/standard,/obj/item/weapon/newspaper,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aGt" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aGu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aGv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aGw" = (/obj/structure/bed,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled,/area/security/prison) +"aGx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/brig) +"aGy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aGz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{name = "HoS Office";sortType = "HoS Office"},/turf/simulated/floor/tiled,/area/security/brig) +"aGA" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aGB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/brig) +"aGC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 4";dir = 1},/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/brig) +"aGD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aGE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aGF" = (/turf/simulated/wall/r_wall,/area/hallway/primary/starboard) +"aGG" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aGH" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter) +"aGI" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/teleporter) +"aGJ" = (/obj/machinery/teleport/hub,/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/teleporter) +"aGK" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/teleporter) +"aGL" = (/obj/machinery/shieldwallgen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/teleporter) +"aGM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/brig) +"aGN" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/bridge) +"aGO" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/grass,/area/bridge) +"aGP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig) +"aGQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aGR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"aGS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aGT" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge) +"aGU" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/newscaster{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aGV" = (/obj/structure/closet/secure_closet/warden,/obj/item/device/megaphone,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/device/radio,/obj/item/device/multitool,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aGW" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aGX" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor/southleft{name = "Brig Delivery Door";req_access = newlist()},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aGY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden) +"aGZ" = (/obj/machinery/flasher{id = "permflash";name = "Floor mounted flash";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aHa" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "d_n2_in";use_power = 1},/turf/simulated/floor/tiled,/area/security/prison) +"aHb" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3";name = "Cell 3 Locker"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/security/prison) +"aHc" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig) +"aHd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock) +"aHe" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aHf" = (/obj/structure/table/standard,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled,/area/engineering/storage) +"aHg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage) +"aHh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage) +"aHi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/engineering/storage) +"aHj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage) +"aHk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aHl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/lawoffice) +"aHm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{desc = "It opens and closes. Bring your relationship affairs here.";name = "Internal Affairs";req_access = list(38)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/lawoffice) +"aHn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/wood,/area/lawoffice) +"aHo" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/wood,/area/lawoffice) +"aHp" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHq" = (/obj/structure/table/gamblingtable,/obj/item/weapon/book/manual/supermatter_engine,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/newscaster{pixel_y = -27},/turf/simulated/floor/wood,/area/lawoffice) +"aHs" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/door/window/westleft{name = "Internal Affairs Desk";req_access = list(38)},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "iaa_desk";name = "IAA Privacy Shutters";opacity = 0},/turf/simulated/floor/wood,/area/lawoffice) +"aHt" = (/obj/machinery/light_switch{pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/teleporter) +"aHu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"aHv" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aHw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aHx" = (/obj/structure/table/reinforced,/obj/item/clothing/head/welding,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aHy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aHz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"aHA" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aHB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aHC" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Entrance";dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aHD" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hos) +"aHE" = (/obj/machinery/atmospherics/valve/digital{tag = "icon-map_valve0 (NORTH)";name = "Emergency Cooling Valve 2";icon_state = "map_valve0";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aHF" = (/obj/machinery/power/generator{anchored = 1},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aHG" = (/obj/machinery/power/generator{anchored = 1},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aHH" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aHI" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aHJ" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aHK" = (/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "eng_al_c_snsr";pixel_x = -25;pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Airlock";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aHL" = (/turf/simulated/wall/r_wall,/area/security/lobby) +"aHM" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_airlock) +"aHN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock) +"aHO" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage) +"aHP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage";req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage) +"aHQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor/northleft{name = "Security Office"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig) +"aHR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/storage) +"aHS" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHU" = (/obj/item/weapon/stool/padded,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHV" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aHX" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHY" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1;pixel_y = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aHZ" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/medical,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/medical,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aIa" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aIb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aIc" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/medical,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/medical,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aId" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aIe" = (/obj/structure/table/standard,/obj/item/toy/blink,/turf/simulated/floor/tiled,/area/security/prison) +"aIf" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/security,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/security,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aIg" = (/obj/structure/reagent_dispensers/water_cooler,/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/floor/tiled,/area/security/prison) +"aIh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 8;id = "HoS Windows"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) +"aIi" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aIj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 4;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) +"aIk" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aIl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) +"aIm" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 8;id = "HoS Windows"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) +"aIn" = (/obj/machinery/door/airlock/command{desc = "It opens and closes. It does not look very robust.";id_tag = "HoSdoor";name = "Head of Security";req_access = list(58)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/heads/hos) +"aIo" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 4;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) +"aIp" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) +"aIq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer";layer = 2.8;name = "Security Wing";req_access = list(63)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/lobby) +"aIr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer";layer = 2.8;name = "Security Wing";req_access = list(63)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/lobby) +"aIs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/lobby) +"aIt" = (/turf/simulated/wall/r_wall,/area/bridge/meeting_room) +"aIu" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/brig) +"aIv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) +"aIw" = (/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor/northright{name = "Security Office"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig) +"aIx" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) +"aIy" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) +"aIz" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aIA" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aIB" = (/obj/machinery/atmospherics/pipe/manifold/visible/green,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aIC" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aID" = (/obj/machinery/recharger/wallcharger{pixel_x = -32;pixel_y = -6},/obj/structure/reagent_dispensers/peppertank{pixel_x = -30;pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aIE" = (/obj/machinery/button/flasher{id = "permflash";name = "Brig flashes";pixel_x = 28;pixel_y = 28;req_access = list(2)},/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aIF" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/engine_monitoring) +"aIG" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aIH" = (/obj/machinery/door/airlock/glass_security{name = "Warden's Office";req_access = list(3)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/warden) +"aII" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled,/area/security/prison) +"aIJ" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/storage) +"aIK" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/security/prison) +"aIL" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/prison) +"aIM" = (/obj/item/device/radio/intercom/locked{pixel_x = -27},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 3";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aIN" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled,/area/engineering/storage) +"aIO" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aIP" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Teleport Access";req_access = list(17)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/teleporter) +"aIQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"aIR" = (/obj/structure/table/gamblingtable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aIS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"aIT" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aIU" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/bridge) +"aIV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"aIW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"aIX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aIY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"aIZ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aJa" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aJb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"aJc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"aJd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"aJe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"aJf" = (/obj/structure/bookcase/manuals,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/tiled,/area/security/lobby) +"aJg" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 10},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aJh" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1;dir = 8;icon_state = "circ-off"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aJi" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"aJj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = 0;pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_airlock) +"aJk" = (/obj/structure/banner,/turf/simulated/floor/tiled,/area/security/lobby) +"aJl" = (/obj/structure/table/standard,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3;pixel_y = 0},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/storage) +"aJm" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_2{pixel_x = 0;pixel_y = -30},/turf/simulated/floor/tiled,/area/engineering/storage) +"aJn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"aJo" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/machinery/door/window/southleft{dir = 1;name = "Engineering Hardsuits";req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage) +"aJp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Lobby Desk"},/turf/simulated/floor/tiled,/area/security/brig) +"aJq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"aJr" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southleft{dir = 1;name = "Engineering Hardsuits";req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage) +"aJs" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southleft{dir = 1;name = "Engineering Hardsuits";req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage) +"aJt" = (/obj/machinery/suit_cycler,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage) +"aJu" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aJv" = (/obj/machinery/newscaster{pixel_x = -27},/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aJw" = (/obj/item/weapon/stool/padded,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/obj/effect/landmark/start{name = "Chief Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aJx" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aJy" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/tiled,/area/security/prison) +"aJz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison) +"aJA" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/prison) +"aJB" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aJC" = (/obj/structure/table/standard,/obj/item/weapon/dice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aJD" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aJE" = (/obj/structure/bookcase/manuals/engineering,/obj/item/weapon/book/manual/atmospipes,/obj/item/weapon/book/manual/engineering_guide,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aJF" = (/obj/machinery/requests_console{department = "EVA";pixel_x = -32;pixel_y = 0},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2;pixel_y = -1},/obj/item/device/multitool,/obj/machinery/camera/network/security{c_tag = "EVA - Port Camera";dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aJG" = (/obj/structure/table/reinforced,/obj/machinery/camera/network/security{c_tag = "EVA - Starboard Camera";dir = 8},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aJH" = (/obj/machinery/suit_cycler/security,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aJI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/papershredder,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aJJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aJK" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJL" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJM" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJN" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJO" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJP" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJQ" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJR" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aJS" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aJT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/banner,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aJU" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby) +"aJV" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 5},/obj/item/weapon/pen,/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/tiled,/area/security/lobby) +"aJW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aJX" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aJY" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig) +"aJZ" = (/obj/machinery/computer/secure_data,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"aKa" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig) +"aKb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -25},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aKc" = (/obj/machinery/door/airlock/glass_security{name = "Warden's Office";req_access = list(3)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/brig) +"aKd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/westleft{name = "Brig Delivery Door";req_access = list(3)},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aKe" = (/turf/simulated/wall,/area/bridge/meeting_room) +"aKf" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aKg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/item/device/radio/intercom{pixel_y = -28},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aKh" = (/obj/machinery/photocopier,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/requests_console{department = "Warden's Desk";departmentType = 5;pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aKi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal/deliveryChute{desc = "A chute for big and small packages alike! You see something shiny inside. Maybe you should take a look?";dir = 8;name = "disposal inlet"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Warden's Office";dir = 1},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aKj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden) +"aKk" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison) +"aKl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/prison) +"aKm" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aKn" = (/obj/structure/toilet{pixel_x = 0;pixel_y = 5},/turf/simulated/floor/tiled,/area/security/prison) +"aKo" = (/obj/structure/sink{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/security{c_tag = "Security - Cell 4";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/prison) +"aKp" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aKq" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "";layer = 2.8;name = "Security Starboard Entrance";req_access = list(63)},/turf/simulated/floor/tiled,/area/security/brig) +"aKr" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aKs" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge) +"aKt" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aKu" = (/obj/machinery/door/airlock/glass_command{id_tag = "sbridgedoor";name = "Bridge";req_access = list(19)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"aKv" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge) +"aKw" = (/turf/simulated/wall/r_wall,/area/maintenance/research_port) +"aKx" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"aKy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge) +"aKz" = (/turf/simulated/floor/plating,/area/maintenance/research_port) +"aKA" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge) +"aKB" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge) +"aKC" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Corridor Camera 3"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge) +"aKD" = (/obj/structure/noticeboard{pixel_y = 32},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge) +"aKE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/bridge) +"aKF" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"aKG" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"aKH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aKI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aKJ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aKK" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aKL" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aKM" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aKN" = (/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aKO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aKP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aKQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aKR" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aKS" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aKT" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aKU" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aKV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aKW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aKX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aKY" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aKZ" = (/obj/machinery/newscaster{pixel_x = -27},/turf/simulated/floor/tiled,/area/security/lobby) +"aLa" = (/turf/simulated/floor/tiled,/area/security/lobby) +"aLb" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aLc" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aLd" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{icon_state = "map";dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aLe" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aLf" = (/obj/machinery/atmospherics/pipe/zpipe/up/supply,/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aLg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/brig) +"aLh" = (/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/cable{icon_state = "11-2"},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/research_port) +"aLi" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aLj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/prison) +"aLk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/prison) +"aLl" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aLm" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLo" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/landmark/start{name = "Engineering Apprentice"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLq" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLs" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLt" = (/obj/structure/bookcase/manuals/engineering,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aLv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLx" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLy" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aLz" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aLA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aLB" = (/obj/structure/table/reinforced,/obj/structure/extinguisher_cabinet{pixel_x = 25;pixel_y = 0},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aLC" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering) +"aLD" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aLE" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/window/eastleft{name = "Security Office Windoor";req_access = list(63)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig) +"aLF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"aLG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/bridge) +"aLH" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the brig foyer.";id = "BrigFoyer";name = "Brig Foyer Doors";pixel_x = -28;pixel_y = 7},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aLI" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig) +"aLJ" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aLK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/security/prison) +"aLL" = (/obj/machinery/door/blast/regular{dir = 1;id = "Cell 4";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison) +"aLM" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/eastright{id = "Cell 4";name = "Cell 4";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aLN" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/brig) +"aLP" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLQ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLR" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine,/obj/machinery/light_switch{pixel_x = -22},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aLS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLT" = (/obj/structure/bed/chair/office/dark,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aLU" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aLV" = (/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aLW" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aLX" = (/turf/simulated/wall/r_wall,/area/bridge/ailobby) +"aLY" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aLZ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aMa" = (/obj/machinery/atmospherics/pipe/manifold/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aMb" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aMc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/junction/yjunction{icon_state = "pipe-y";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMe" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMf" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"aMg" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMh" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/research_port) +"aMi" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/chief) +"aMj" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMn" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMo" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aMp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "HoP Office";sortType = "HoP Office"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aMq" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge) +"aMr" = (/obj/machinery/computer/guestpass{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aMs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aMt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aMu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aMv" = (/obj/machinery/light{dir = 4},/obj/machinery/computer/guestpass{pixel_x = 32},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aMw" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aMx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aMy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aMz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/bridge) +"aMA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aMB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aMC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/bridge) +"aMD" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aME" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aMF" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"aMG" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aMH" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aMI" = (/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aMJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aMK" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aML" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine radiator viewport shutters.";id = "EngineRadiatorViewport";name = "Engine Radiator Viewport Shutters";pixel_x = 0;pixel_y = -25;req_access = list(10)},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aMM" = (/obj/machinery/atmospherics/binary/pump/high_power{icon_state = "map_off";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) +"aMN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aMO" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aMP" = (/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 25},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aMQ" = (/obj/machinery/power/apc/high{dir = 1;name = "north bump";pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aMR" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig) +"aMS" = (/obj/structure/table/rack,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aMT" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aMU" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/papershredder,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aMV" = (/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aMW" = (/obj/structure/urinal{pixel_y = 32},/obj/item/toy/figure/warden,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aMX" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aMY" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/obj/structure/window/reinforced/polarized{dir = 8;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aMZ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_personal,/obj/item/device/flashlight,/obj/item/device/gps/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aNa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/security/prison) +"aNb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/prison) +"aNc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/security/prison) +"aNd" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aNe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aNf" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hardsuits";req_one_access = list(11,24)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aNg" = (/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3},/obj/structure/table/reinforced,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aNh" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/obj/item/device/suit_cooling_unit,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aNi" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/obj/item/device/suit_cooling_unit,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aNj" = (/obj/machinery/computer/secure_data,/obj/structure/sign/goldenplaque{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Head of Security's Office";dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aNk" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/blue{pixel_x = -5},/obj/item/weapon/pen/red,/obj/item/weapon/stamp/hos{pixel_x = -5;pixel_y = 7},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aNl" = (/obj/structure/bed/chair/comfy/red{dir = 4},/obj/machinery/button/remote/blast_door{id = "Security Lockdown";name = "Security Lockdown";pixel_x = 38;pixel_y = 38;req_access = list(58)},/obj/machinery/button/remote/airlock{id = "HoSdoor";name = "Office Door";pixel_x = 27;pixel_y = 38},/obj/machinery/button/windowtint{id = "HoS Windows";pixel_x = 26;pixel_y = 28;req_access = list(58)},/obj/machinery/button/remote/blast_door{id = "armoury";name = "Armoury Shutters";pixel_x = 38;pixel_y = 28;req_access = list(58)},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aNm" = (/obj/structure/table/woodentable,/obj/item/device/megaphone,/obj/item/device/radio,/obj/item/device/taperecorder,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aNn" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNp" = (/obj/structure/bed/chair{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby) +"aNq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby) +"aNr" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/lobby) +"aNs" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNt" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aNu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aNv" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/window/eastright{name = "Security Office Windoor";req_access = list(63)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig) +"aNw" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/airlock{id = "visitdoor";name = "Visitation Access";pixel_x = -28;pixel_y = -7},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aNx" = (/obj/structure/filingcabinet,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aNy" = (/obj/machinery/door/airlock{desc = "It opens and closes. A repulsive smell eminates from the door.";name = "Brig Toilet"},/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aNz" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/item/weapon/soap/nanotrasen,/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aNA" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/security/prison) +"aNB" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/security/prison) +"aNC" = (/obj/machinery/flasher{id = "permflash";name = "Floor mounted flash";pixel_x = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aND" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4";name = "Cell 4 Locker"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/security/prison) +"aNE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/brig) +"aNF" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aNG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNH" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "";layer = 2.8;name = "Security Starboard Entrance";req_access = list(63)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig) +"aNI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNJ" = (/obj/structure/toilet{dir = 4},/obj/structure/window/reinforced/tinted,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aNK" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aNL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNM" = (/obj/item/device/radio/intercom{pixel_y = -27},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNO" = (/obj/structure/sign/directions/medical{dir = 8;icon_state = "direction_med";pixel_y = -24},/obj/structure/sign/directions/science{dir = 8;icon_state = "direction_sci";pixel_x = 0;pixel_y = -30},/obj/structure/sign/directions/engineering{dir = 8;icon_state = "direction_eng";pixel_x = 0;pixel_y = -38},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNP" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aNT" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge) +"aNU" = (/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aNV" = (/obj/machinery/door/airlock/glass_command{id_tag = "sbridgedoor";name = "Bridge";req_access = list(19)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aNW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aNX" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aNY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"aNZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge) +"aOa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge) +"aOb" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aOd" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/turf/simulated/floor/tiled,/area/bridge) +"aOe" = (/obj/machinery/door/airlock/command{name = "Head of Staff Preparation";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aOf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"aOh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aOi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aOj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aOk" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aOl" = (/obj/machinery/keycard_auth{pixel_x = -28},/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aOm" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aOn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"aOo" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aOp" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/cups,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aOq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby) +"aOr" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/structure/curtain/open/shower,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aOs" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "EngineRadiatorViewport";name = "Engine Radiator Viewport Shutter";opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aOt" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "EngineRadiatorViewport";name = "Engine Radiator Viewport Shutter";opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/plating,/area/engineering/engine_room) +"aOu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aOv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aOw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/tiled,/area/security/brig) +"aOx" = (/obj/machinery/photocopier,/obj/machinery/recharger/wallcharger{pixel_y = -26},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"aOy" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/machinery/recharger/wallcharger{pixel_y = -26},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"aOz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aOA" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"aOB" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aOC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aOD" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Chief Engineer's Desk";departmentType = 6;name = "Chief Engineer RC";pixel_x = -34;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aOE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison) +"aOF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aOG" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/tiled,/area/security/prison) +"aOH" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/security/prison) +"aOI" = (/obj/machinery/newscaster{pixel_x = 27},/turf/simulated/floor/tiled,/area/security/prison) +"aOJ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 8;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aOK" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOM" = (/turf/simulated/wall,/area/security/detectives_office) +"aON" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Lobby Aft";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOO" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Engineering Break Room";sortType = "Engineering Break Room"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOP" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOQ" = (/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = 27},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aOR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aOS" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -30},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1;pixel_y = -1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aOT" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aOU" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop) +"aOV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "E.V.A.";req_one_access = list(18)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aOW" = (/obj/structure/table/woodentable,/obj/machinery/recharger,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aOX" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby) +"aOY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby) +"aOZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aPa" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain) +"aPb" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aPc" = (/obj/machinery/computer/station_alert,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/security/brig) +"aPd" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_y = -32},/obj/effect/floor_decal/corner/blue/full,/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/tiled,/area/security/brig) +"aPe" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 3;pixel_y = 6},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/security/brig) +"aPf" = (/obj/structure/toilet{desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. It has stains on the seat. Ew.";dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aPg" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aPh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aPi" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aPj" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aPk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aPl" = (/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aPm" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aPn" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Communal Bathroom";dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aPo" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/security/prison) +"aPp" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aPq" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aPr" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/tiled,/area/security/prison) +"aPs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aPt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig) +"aPu" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aPv" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aPw" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "detdoor";name = "Detective";req_access = list(4)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office) +"aPx" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office) +"aPy" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office) +"aPz" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office) +"aPA" = (/turf/simulated/wall,/area/engineering/foyer) +"aPB" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aPC" = (/obj/machinery/atm{pixel_x = -32},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aPD" = (/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aPE" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/command{name = "Head of Personnel";req_access = list(57)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aPF" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aPG" = (/obj/machinery/suit_cycler/medical,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aPH" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aPI" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aPJ" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{id_tag = "captaindoor";name = "Captain's Office";req_access = list(20)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aPK" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "cap"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aPL" = (/obj/item/device/radio/intercom{pixel_y = -28},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aPM" = (/obj/machinery/newscaster{pixel_y = -30},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aPN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aPO" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"aPP" = (/obj/structure/extinguisher_cabinet{pixel_x = 30},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"aPQ" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Security"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aPR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) +"aPS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aPT" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/security/lobby) +"aPU" = (/turf/simulated/wall/r_wall,/area/security/prison) +"aPV" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_port) +"aPW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aPX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aPY" = (/obj/machinery/door/airlock{name = "Brig Showers"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aPZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled/white,/area/security/prison) +"aQa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aQb" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1},/turf/simulated/floor/tiled,/area/security/prison) +"aQc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/simulated/floor/tiled,/area/security/prison) +"aQd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aQe" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/seed_storage,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aQf" = (/obj/machinery/button/remote/driver{id = "enginecore";name = "Emergency Core Eject";pixel_x = -20;pixel_y = 0},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"aQg" = (/obj/structure/table/standard,/obj/item/weapon/stamp/ce,/obj/item/clothing/glasses/welding/superior,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/item/clothing/glasses/meson,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aQh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 8;id = null},/obj/structure/window/reinforced/polarized,/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aQi" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Chief Engineer's Office";dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aQj" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQk" = (/obj/structure/coatrack,/turf/simulated/floor/wood,/area/security/detectives_office) +"aQl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQm" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{sortType = "CE Office";name = "CE Office"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQn" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQo" = (/obj/machinery/papershredder,/turf/simulated/floor/lino,/area/security/detectives_office) +"aQp" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/lino,/area/security/detectives_office) +"aQq" = (/obj/machinery/computer/security,/turf/simulated/floor/lino,/area/security/detectives_office) +"aQr" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aQs" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aQt" = (/turf/simulated/wall,/area/maintenance/maintcentral) +"aQu" = (/obj/structure/table/rack,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQv" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQw" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aQx" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQy" = (/obj/machinery/button/remote/blast_door{id = "Singuloth";name = "Engineering delivery Control";pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQz" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aQA" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = -7},/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aQB" = (/obj/machinery/disposal,/obj/machinery/keycard_auth{pixel_x = 24},/obj/machinery/computer/guestpass{pixel_y = 32},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aQC" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aQD" = (/obj/structure/table/woodentable,/obj/item/weapon/pinpointer,/obj/item/weapon/disk/nuclear,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aQE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aQF" = (/obj/structure/closet/secure_closet/hos,/obj/item/device/multitool,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aQG" = (/obj/machinery/photocopier,/obj/machinery/requests_console{announcementConsole = 1;department = "Head of Security's Desk";departmentType = 5;name = "Head of Security RC";pixel_x = 0;pixel_y = -30},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aQH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aQI" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/device/flashlight/lamp/green{pixel_x = -6;pixel_y = 10},/obj/item/weapon/storage/secure/safe{pixel_x = 5;pixel_y = -30},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"aQJ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby) +"aQK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aQL" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aQM" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/prison) +"aQN" = (/obj/item/toy/prize/deathripley{desc = "This is Johnny 5. Is he alive?";name = "Johnny 5"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison) +"aQO" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/prison) +"aQP" = (/obj/structure/sink{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/security{c_tag = "Security - Cell 5";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/prison) +"aQQ" = (/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aQR" = (/obj/machinery/lapvend,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aQS" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aQT" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office) +"aQU" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aQV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/woodentable,/obj/item/weapon/folder/red{pixel_x = 3;pixel_y = 2},/obj/item/weapon/folder/red,/obj/item/device/taperecorder,/turf/simulated/floor/lino,/area/security/detectives_office) +"aQW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office) +"aQX" = (/obj/structure/table/woodentable,/obj/item/device/camera_film,/obj/item/device/camera{name = "detectives camera";desc = "A one use - polaroid camera. 30 photos left.";pixel_x = 0;pixel_y = 0;pictures_left = 30},/turf/simulated/floor/lino,/area/security/detectives_office) +"aQY" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aQZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aRa" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure";dir = 4;icon_state = "rightsecure";name = "Head of Personnel's Desk";req_access = list(57)},/obj/machinery/door/window/northleft{dir = 8;icon_state = "left";name = "Reception Window"},/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "hop_office_desk";name = "HoP Office Privacy Shutters";opacity = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aRb" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "hop_office_desk";name = "Desk Privacy Shutter";pixel_x = 32;pixel_y = 36},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aRc" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/requests_console{announcementConsole = 1;department = "Head of Personnel's Desk";departmentType = 5;name = "Head of Personnel RC";pixel_x = 0;pixel_y = 30},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aRd" = (/obj/machinery/button/windowtint{id = "hop";pixel_x = 5;pixel_y = 24},/obj/machinery/light_switch{pixel_x = -5;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aRe" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/camera/network/command{c_tag = "Bridge - Captain's Office"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aRf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aRg" = (/obj/machinery/photocopier/faxmachine{department = "Captain's Office"},/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aRh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aRi" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/light_switch{pixel_y = 24},/obj/item/toy/figure/captain,/obj/structure/flora/pottedplant/random,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aRj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aRk" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Corridor Camera 2";dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"aRl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"aRm" = (/obj/machinery/conveyor{backwards = 1;id = "Engie Delivery"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aRn" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aRo" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aRp" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Conference Room";dir = 1},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aRq" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aRr" = (/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/tiled,/area/security/lobby) +"aRs" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Bathroom";dir = 1},/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aRt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby) +"aRu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/security/lobby) +"aRv" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aRw" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby) +"aRx" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 9},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aRy" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/security/prison) +"aRz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/security/prison) +"aRA" = (/obj/structure/window/reinforced/tinted/frosted,/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled/white,/area/security/prison) +"aRB" = (/obj/structure/window/reinforced/tinted/frosted,/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/item/toy/figure/hos,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled/white,/area/security/prison) +"aRC" = (/obj/machinery/keycard_auth{pixel_x = -24;pixel_y = 0},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for engine core.";id = "EngineVent";name = "Engine Ventillatory Control";pixel_x = -24;pixel_y = 10;req_access = list(10)},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the engine core airlock hatch bolts.";id = "engine_access_hatch";name = "Engine Hatch Bolt Control";pixel_x = -24;pixel_y = -10;req_access = list(10);specialfunctions = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aRD" = (/obj/structure/table/standard,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/off,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aRE" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/button/windowtint{pixel_x = 26;pixel_y = -20;range = 9},/obj/machinery/button/remote/airlock{id = "CEdoor";name = "Office Door Control";pixel_x = 36;pixel_y = -20;req_access = list(56)},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aRF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aRG" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aRH" = (/turf/simulated/floor/wood,/area/security/detectives_office) +"aRI" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/command{id_tag = "CEdoor";name = "Chief Engineer";req_access = list(56)},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aRJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/woodentable,/obj/item/weapon/hand_labeler,/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/lino,/area/security/detectives_office) +"aRK" = (/turf/simulated/floor/lino,/area/security/detectives_office) +"aRL" = (/turf/simulated/floor/carpet,/area/security/detectives_office) +"aRM" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/security/detectives_office) +"aRN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aRO" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aRP" = (/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aRQ" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aRR" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aRS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aRT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aRU" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aRV" = (/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aRW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aRX" = (/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aRY" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aRZ" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aSa" = (/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aSb" = (/obj/machinery/computer/security/engineering{name = "Drone Monitoring Cameras"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSc" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/machinery/computer/station_alert/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSd" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSe" = (/obj/machinery/conveyor_switch/oneway{id = "Engie Delivery";name = "Engineering Conveyor"},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSf" = (/obj/machinery/door/airlock{name = "Private Restroom"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby) +"aSg" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aSh" = (/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aSi" = (/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aSj" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aSk" = (/obj/machinery/suit_cycler/engineering,/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aSl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "E.V.A. Cycler Access";req_one_access = list(18)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aSm" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aSn" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/head/helmet/space/skrell/black,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/black,/obj/item/clothing/head/helmet/space/skrell/white,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/white,/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aSo" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aSq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "visit_blast";name = "Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/lobby) +"aSr" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8;name = "Visitation Window";req_access = list(2)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aSs" = (/obj/machinery/door/blast/regular{dir = 1;id = "Cell 5";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison) +"aSt" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/eastright{id = "Cell 5";name = "Cell 5";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) +"aSu" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/security/brig) +"aSv" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 3";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aSw" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office) +"aSx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office) +"aSy" = (/obj/machinery/suit_cycler/mining,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aSz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aSA" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/machinery/button/windowtint{id = "Detective";pixel_x = -28;pixel_y = 8},/turf/simulated/floor/carpet,/area/security/detectives_office) +"aSB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aSC" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/loading,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aSD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aSE" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aSF" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 1;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop) +"aSG" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aSH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{base_state = "rightsecure";dir = 8;icon_state = "rightsecure";req_access = list(57)},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aSI" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aSJ" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aSK" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aSL" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge) +"aSM" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/gps/engineering,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aSN" = (/obj/machinery/light,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief) +"aSO" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 8;id = null},/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aSP" = (/obj/structure/table/rack,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/item/weapon/rig/ce/equipped,/obj/item/clothing/mask/breath,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief) +"aSQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aST" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aSU" = (/obj/structure/closet/crate,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aSV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aSW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aSX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aSY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/engineering/foyer) +"aSZ" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/security/prison) +"aTa" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/plating,/area/engineering/foyer) +"aTb" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled,/area/security/prison) +"aTc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engineering/foyer) +"aTd" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/window/brigdoor/northleft{name = "Engineering Desk";req_access = list(32)},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aTe" = (/obj/machinery/conveyor{backwards = 1;id = "Engie Delivery"},/obj/structure/plasticflaps,/obj/machinery/door/blast/shutters{id = "Singuloth";name = "Engineering delivery"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aTf" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aTg" = (/obj/structure/dispenser/oxygen,/obj/machinery/camera/network/security{c_tag = "EVA - Aft Camera";dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aTh" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/rig/unathi,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aTi" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/lino,/area/security/detectives_office) +"aTj" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aTk" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/security/detectives_office) +"aTl" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aTm" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aTn" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aTo" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aTp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aTq" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aTr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aTs" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aTt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aTu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aTv" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering) +"aTw" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/security/lobby) +"aTx" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/captain,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aTy" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/item/weapon/hand_tele,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aTz" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aTA" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aTB" = (/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aTC" = (/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Lobby";dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby) +"aTD" = (/obj/machinery/alarm{dir = 1;pixel_y = -25},/turf/simulated/floor/tiled,/area/security/lobby) +"aTE" = (/obj/machinery/door/airlock{id_tag = "visitdoor";name = "Visitation Area";req_access = list(63)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/lobby) +"aTF" = (/obj/machinery/button/remote/blast_door{id = "visit_blast";name = "Privacy Shutters";pixel_x = 8;pixel_y = -24},/obj/machinery/light/small{dir = 4},/obj/machinery/camera/network/security{c_tag = "Security - Visitor's Visitation";dir = 8},/turf/simulated/floor/tiled,/area/security/lobby) +"aTG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Prisoner's Visitation";dir = 4},/turf/simulated/floor/tiled,/area/security/prison) +"aTH" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/security/prison) +"aTI" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/airlock{name = "Visitation Area"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison) +"aTJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/security/prison) +"aTK" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Communal Aft";dir = 1},/turf/simulated/floor/tiled,/area/security/prison) +"aTL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aTM" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aTN" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aTO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aTP" = (/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aTQ" = (/obj/structure/table/standard,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/head/greenbandana,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison) +"aTR" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aTS" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aTT" = (/obj/structure/closet/crate/trashcart,/obj/item/toy/figure/secofficer{pixel_x = -3;pixel_y = -1},/obj/item/weapon/storage/bag/trash,/obj/item/weapon/storage/bag/trash{pixel_x = -4;pixel_y = -2},/obj/item/weapon/storage/bag/trash{pixel_x = -9;pixel_y = 2},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/security/prison) +"aTU" = (/obj/structure/closet/secure_closet/brig{id = "Cell 5";name = "Cell 5 Locker"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/security/prison) +"aTV" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig) +"aTW" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/security/detectives_office) +"aTX" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/foyer) +"aTY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office) +"aTZ" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/turf/simulated/floor/carpet,/area/security/detectives_office) +"aUa" = (/obj/machinery/camera/network/security{c_tag = "Security - Firing Range Starboard";dir = 8},/turf/simulated/floor/carpet,/area/security/detectives_office) +"aUb" = (/obj/item/device/radio/intercom{pixel_x = -27},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aUc" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/engineering/foyer) +"aUd" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop) +"aUe" = (/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/obj/structure/table/reinforced,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aUf" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/megaphone,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aUg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aUh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/sign/securearea,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aUi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aUj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/sign/securearea,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aUk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aUl" = (/turf/simulated/wall,/area/hallway/primary/port) +"aUm" = (/turf/simulated/wall,/area/hallway/primary/central_one) +"aUn" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aUo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aUp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/lobby) +"aUq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge) +"aUr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aUs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"aUt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/bridge) +"aUu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/filingcabinet,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/lino,/area/security/detectives_office) +"aUv" = (/obj/structure/noticeboard{pixel_x = 32},/turf/simulated/floor/lino,/area/security/detectives_office) +"aUw" = (/obj/machinery/door/airlock/glass_command{name = "Level B Lift"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aUx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aUy" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aUz" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aUA" = (/obj/structure/closet/secure_closet/hop,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aUB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"aUC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aUD" = (/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station";req_access = list(16)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aUE" = (/obj/structure/table/woodentable,/obj/item/device/eftpos{eftpos_name = "Captain EFTPOS scanner"},/obj/item/weapon/material/ashtray/glass,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aUF" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 8;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aUG" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aUH" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aUI" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green,/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aUJ" = (/obj/machinery/door/airlock/glass_command{name = "Level B Lift"},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aUK" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"aUL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aUM" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aUN" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/wall/r_wall,/area/engineering/foyer) +"aUO" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aUP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aUQ" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aUR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aUS" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/wall/r_wall,/area/engineering/foyer) +"aUT" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aUU" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aUV" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aUW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "E.V.A.";req_one_access = list(18)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) +"aUX" = (/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aUY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aUZ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aVa" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aVb" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aVc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/central_one) +"aVd" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aVe" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aVf" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVg" = (/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{desc = "It opens and closes. Hazardous lifeforms ahead. Caution advised!";name = "Security Lobby"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/lobby) +"aVi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/double/map/left{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/double/map/right{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVk" = (/obj/machinery/newscaster{pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{desc = "It opens and closes. Hazardous lifeforms ahead. Caution advised!";name = "Security Lobby"},/turf/simulated/floor/tiled,/area/security/lobby) +"aVm" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVn" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVo" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "";layer = 2.8;name = "Security Aft Entrance";req_access = list(63)},/turf/simulated/floor/tiled,/area/security/brig) +"aVp" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aVq" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aVr" = (/obj/item/device/radio/intercom{pixel_y = 27},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aVs" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aVt" = (/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aVu" = (/obj/effect/floor_decal/corner/blue{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aVv" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aVw" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/wood,/area/security/detectives_office) +"aVx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office) +"aVy" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aVz" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Captain's Desk";departmentType = 5;name = "Captain RC";pixel_x = -30;pixel_y = 0},/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aVA" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/med_data,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/lino,/area/security/detectives_office) +"aVB" = (/obj/machinery/button/windowtint{id = "cap";pixel_x = 24;pixel_y = 0},/obj/effect/landmark/start{name = "Captain"},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aVC" = (/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "captaindoor";name = "Office Door Control";pixel_x = 15;pixel_y = 30;req_access = list(20)},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the starboard bridge doors.";id = "sbridgedoor";name = "Bridge Door Control";pixel_x = 15;pixel_y = 39;req_access = list(20)},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aVD" = (/obj/structure/closet/secure_closet/detective,/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/obj/item/weapon/book/manual/security_space_law,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/lino,/area/security/detectives_office) +"aVE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light,/turf/simulated/floor/lino,/area/security/detectives_office) +"aVF" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aVG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aVH" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aVI" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aVJ" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"aVK" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"aVL" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aVM" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aVN" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/obj/item/toy/figure/corgi,/obj/item/device/megaphone,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aVO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aVP" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aVQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/civilian_west{c_tag = "Port Corridor - Engineering Entrance"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aVR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aVS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aVT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aVU" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aVV" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aVW" = (/turf/simulated/wall,/area/crew_quarters/heads/cryo) +"aVX" = (/obj/structure/bed/chair{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aVY" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aVZ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aWa" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aWb" = (/obj/machinery/cryopod/robot,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aWc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aWd" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aWe" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aWf" = (/obj/structure/sign/directions/security{dir = 1;icon_state = "direction_sec";pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aWg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWj" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aWk" = (/obj/structure/table/woodentable,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/machinery/light,/turf/simulated/floor/wood,/area/security/detectives_office) +"aWl" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office) +"aWm" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/security/detectives_office) +"aWn" = (/obj/machinery/photocopier,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/requests_console{department = "Detective's Desk";departmentType = 5;pixel_y = -32},/turf/simulated/floor/lino,/area/security/detectives_office) +"aWo" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/lino,/area/security/detectives_office) +"aWp" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aWq" = (/obj/structure/sign/nosmoking_1{pixel_y = -32},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/camera/network/civilian_west{c_tag = "Bridge - Head of Personnel Processing";dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aWr" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aWs" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop) +"aWt" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aWu" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Head of Personnel Desk";dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aWv" = (/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Captain's Intercom";pixel_x = -27;pixel_y = -3},/obj/machinery/computer/communications,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aWw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aWx" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigar,/obj/item/weapon/flame/lighter/zippo,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aWy" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aWz" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"aWA" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/camera/network/command{c_tag = "Bridge - AI Core Lift";dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aWB" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/camera/network/command{c_tag = "Bridge - AI Core Lift";dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby) +"aWC" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aWD" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aWE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/engineering/foyer) +"aWF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWH" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWK" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aWL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aWM" = (/turf/simulated/wall,/area/maintenance/substation/command) +"aWN" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aWO" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/command) +"aWP" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Port Corridor - Camera 2";dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aWQ" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/foyer) +"aWR" = (/obj/machinery/vending/cart,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aWS" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aWT" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aWU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aWV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aWW" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aWX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aWY" = (/obj/machinery/suit_cycler/captain,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aWZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXa" = (/obj/machinery/door/airlock/glass,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXb" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXc" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXd" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXe" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXf" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"aXg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/ailobby) +"aXh" = (/obj/machinery/door/airlock/external,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/bridge/ailobby) +"aXi" = (/turf/simulated/wall,/area/bridge/ailobby) +"aXj" = (/obj/machinery/door/airlock/maintenance{req_access = list(16)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/ailobby) +"aXk" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXl" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXm" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aXo" = (/obj/machinery/door/airlock/glass,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXp" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXs" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXt" = (/obj/machinery/door/airlock/maintenance{name = "Detective Maintenance";req_access = list(4)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office) +"aXu" = (/obj/machinery/door/airlock/engineering{name = "Command Substation";req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/command) +"aXv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXw" = (/obj/structure/window/reinforced/polarized{id = "hop"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/crew_quarters/heads/hop) +"aXx" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{id_tag = "hopdoor";name = "Head of Personnel";req_access = list(57)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aXy" = (/obj/machinery/newscaster/security_unit{pixel_x = -32},/obj/item/weapon/card/id/captains_spare,/obj/item/weapon/storage/secure/safe{pixel_x = 5;pixel_y = -35},/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aXz" = (/obj/machinery/keycard_auth{pixel_x = 0;pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aXA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aXB" = (/obj/machinery/door/window{base_state = "right";dir = 4;icon_state = "right";name = "Captain's Desk Door";req_access = list(20)},/obj/machinery/status_display{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"aXC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXD" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aXE" = (/obj/machinery/door/airlock/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXF" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aXH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"aXI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"aXJ" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"aXK" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo) +"aXL" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo) +"aXM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"aXN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"aXO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aXP" = (/obj/machinery/newscaster{layer = 3.3;pixel_x = 0;pixel_y = -27},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aXQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aXR" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aXS" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXT" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aXU" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXV" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXW" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXX" = (/obj/machinery/camera/network/civilian_west{c_tag = "Port Corridor - Camera 1";dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/port) +"aXY" = (/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aXZ" = (/obj/structure/sign/directions/engineering{dir = 8;icon_state = "direction_eng";pixel_x = -32;pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aYa" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aYb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aYc" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aYd" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Security Entrance";dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aYe" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aYf" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYg" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYh" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYi" = (/turf/simulated/open,/area/turbolift/ai_station) +"aYj" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/shuttle/lifts/placeholder) +"aYk" = (/turf/simulated/wall/r_wall,/area/maintenance/maintcentral) +"aYl" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYp" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYq" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aYr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aYs" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aYt" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aYu" = (/obj/machinery/atm{pixel_y = -32},/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aYv" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aYw" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aYx" = (/turf/simulated/wall/r_wall,/area/assembly/robotics) +"aYy" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aYz" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central_one) +"aYA" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aYB" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aYC" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aYD" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Command Subgrid";name_tag = "Command Subgrid"},/obj/structure/sign/electricshock{pixel_x = 32},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"aYE" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/command) +"aYF" = (/obj/machinery/door/window/brigdoor{base_state = "rightsecure";dir = 4;icon_state = "rightsecure";name = "Head of Personnel's Desk";req_access = list(57)},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aYG" = (/turf/simulated/wall,/area/storage/emergency) +"aYH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aYI" = (/turf/simulated/wall,/area/medical/icu) +"aYJ" = (/turf/simulated/wall,/area/medical/emt) +"aYK" = (/obj/machinery/photocopier,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aYL" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters";req_access = list(20)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aYM" = (/obj/structure/window/reinforced,/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo) +"aYN" = (/obj/structure/window/reinforced,/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo) +"aYO" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"aYP" = (/turf/simulated/wall,/area/medical/exam_room) +"aYQ" = (/turf/simulated/wall,/area/medical/temp_morgue) +"aYR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"aYS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"aYT" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/foyer) +"aYU" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"aYV" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/foyer) +"aYW" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"aYX" = (/obj/structure/table/woodentable,/obj/machinery/recharger,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"aYY" = (/obj/machinery/computer/ordercomp,/obj/machinery/light_switch{pixel_x = 32},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"aYZ" = (/obj/structure/displaycase,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aZa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aZb" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/foyer) +"aZc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aZd" = (/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/crew_quarters/captain) +"aZe" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/tiled,/area/bridge) +"aZf" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer) +"aZg" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/item/device/radio/intercom{pixel_y = -32},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aZh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer) +"aZi" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/port) +"aZj" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aZk" = (/obj/structure/closet/secure_closet/personal/cabinet,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"aZl" = (/obj/structure/bed/chair{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"aZm" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aZn" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"aZo" = (/turf/simulated/wall,/area/storage/tech) +"aZp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aZq" = (/turf/simulated/wall,/area/maintenance/research_port) +"aZr" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aZs" = (/turf/simulated/wall,/area/assembly/robotics) +"aZt" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"aZu" = (/obj/machinery/camera/network/research{c_tag = "Research - Robotics Morgue"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"aZv" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"aZw" = (/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"aZx" = (/obj/machinery/vending/coffee,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aZy" = (/obj/machinery/vending/cigarette,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aZz" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aZA" = (/obj/machinery/door/airlock{name = "Starboard Emergency Storage";req_one_access = list(12,47)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/emergency) +"aZB" = (/obj/machinery/door/blast/shutters{id = "emtshutter";name = "EMT Garage Door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/emt) +"aZC" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{id = "emtshutter";name = "EMT Garage Door"},/turf/simulated/floor/plating,/area/medical/emt) +"aZD" = (/turf/simulated/floor/tiled/dark,/area/turbolift/main_station) +"aZE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"aZF" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"aZG" = (/obj/machinery/door/blast/shutters{density = 0;dir = 1;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/medical{name = "EMT Hallway Access";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/emt) +"aZH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"aZI" = (/obj/machinery/door/blast/shutters{density = 0;dir = 1;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay3) +"aZJ" = (/obj/machinery/vending/snack,/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"aZK" = (/obj/machinery/door/blast/shutters{density = 0;dir = 1;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/obj/machinery/door/airlock/multi_tile/glass{id_tag = "CONSdoor";name = "Consultation Wing";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay3) +"aZL" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/storage/emergency) +"aZM" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aZN" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Command"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"aZO" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Bridge Substation";dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"aZP" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"aZQ" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/icu) +"aZR" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/curtain/black{pixel_x = 32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 1},/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/space/void/captain,/obj/item/clothing/head/helmet/space/void/captain,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"aZS" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/icu) +"aZT" = (/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"aZU" = (/turf/simulated/floor/plating,/area/medical/emt) +"aZV" = (/obj/machinery/door/airlock/command{name = "Cryogenic Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo) +"aZW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"aZX" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"aZY" = (/obj/machinery/light_switch{pixel_x = -24;pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"aZZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"baa" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{pixel_x = 25;pixel_y = 25},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"bab" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Tech Storage";req_access = list(23)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech) +"bac" = (/obj/structure/closet/secure_closet/medical1,/obj/item/device/radio/intercom{pixel_y = 22},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bad" = (/obj/structure/bed/chair/wheelchair,/obj/machinery/firealarm{pixel_y = 27},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bae" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) +"baf" = (/obj/machinery/door/airlock/research{desc = "It opens and closes. Leads to the Robotics Morgue";name = "Robotics Morgue";req_access = list(29)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"bag" = (/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bah" = (/obj/machinery/button/windowtint{id = "CybGlass";pixel_x = 0;pixel_y = 26},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bai" = (/obj/structure/table/standard,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/item/weapon/cautery,/obj/item/weapon/circular_saw,/obj/item/weapon/retractor,/obj/item/weapon/scalpel,/obj/machinery/camera/network/research{c_tag = "Research - Toxins Test Chamber Starboard";dir = 8;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/obj/item/weapon/surgicaldrill,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"baj" = (/obj/machinery/optable{desc = "Used for advanced medical procedures, such as removing brains for cyborgification. Also used to repair unlawed synthetics.";name = "Robotics Operating Table"},/obj/item/device/radio/intercom{pixel_y = 27},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bak" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bal" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Command Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bam" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"ban" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bao" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/hop,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bap" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"baq" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/item/device/radio/intercom{pixel_x = 28;pixel_y = 0},/turf/simulated/floor/plating,/area/storage/emergency) +"bar" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/storage/emergency) +"bas" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bat" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/structure/curtain/black{pixel_x = 32},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bau" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bav" = (/obj/structure/flora/ausbushes/ppflowers,/mob/living/simple_animal/corgi/fox/Chauncey,/turf/simulated/floor/grass,/area/crew_quarters/captain) +"baw" = (/obj/structure/table/woodentable,/obj/item/weapon/cigbutt/cigarbutt,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/tiled,/area/bridge) +"bax" = (/obj/machinery/bodyscanner{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu) +"bay" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"baz" = (/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/button/remote/blast_door{id = "ICUshutters";name = "ICU Shutters Control";pixel_x = 0;pixel_y = 36;req_access = list(5)},/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu) +"baA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/shuttle/lifts/placeholder) +"baB" = (/obj/structure/bed/chair{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"baC" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"baD" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/icu) +"baE" = (/obj/effect/decal/cleanable/blood/oil,/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Morgue";dir = 4;icon_state = "camera"},/turf/simulated/floor/plating,/area/medical/emt) +"baF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"baG" = (/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/glass_medical{name = "EMT Garage Access";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"baH" = (/obj/machinery/vending/assist,/turf/simulated/floor/plating,/area/storage/tech) +"baI" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/emt) +"baJ" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3) +"baK" = (/obj/machinery/button/remote/airlock{id = "FOREdoor";name = "MedBay Fore Entrance Control";pixel_x = -25;pixel_y = 24;req_access = list(40)},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"baL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/storage/tech) +"baM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/storage/tech) +"baN" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/obj/structure/window/reinforced/polarized{id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room) +"baO" = (/obj/item/device/radio/intercom{pixel_y = -27},/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"baP" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"baQ" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"baR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"baS" = (/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"baT" = (/obj/structure/morgue{icon_state = "morgue1";dir = 2},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"baU" = (/obj/structure/morgue{icon_state = "morgue1";dir = 2},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"baV" = (/obj/machinery/door/airlock/engineering{name = "Command Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/command) +"baW" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"baX" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"baY" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark,/area/turbolift/main_station) +"baZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bba" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"bbb" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bbc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/item/device/radio/intercom{pixel_y = -27},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"bbd" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency) +"bbe" = (/obj/machinery/space_heater,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency) +"bbf" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bbg" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "hopdoor";name = "Office Door Control";pixel_x = -26;pixel_y = 17;req_access = list(57)},/obj/effect/landmark/start{name = "Head of Personnel"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bbh" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"bbi" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bbj" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/tiled,/area/medical/icu) +"bbk" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/newscaster/security_unit{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"bbl" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/medical/emt) +"bbm" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/medical/emt) +"bbn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = 24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"bbo" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/camera/network/command{c_tag = "AI Core - Lift";dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"bbp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech) +"bbq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech) +"bbr" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech) +"bbs" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/storage/tech) +"bbt" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/storage/tech) +"bbu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/storage/tech) +"bbv" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/device/analyzer/plant_analyzer,/obj/item/device/healthanalyzer,/obj/item/device/analyzer,/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/storage/tech) +"bbw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bbx" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"bby" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bbz" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bbA" = (/obj/structure/table/standard,/obj/item/device/mmi,/obj/item/device/mmi,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bbB" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"bbC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bbD" = (/obj/structure/table/woodentable,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bbE" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bbF" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bbG" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 1";dir = 1},/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"bbH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bbI" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency) +"bbJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bbK" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/crew_quarters/captain) +"bbL" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/tiled,/area/bridge) +"bbM" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/button/remote/blast_door{id = "CHE2shutters";name = "ICU Shutters";pixel_x = -38;pixel_y = 0;req_access = list(5)},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu) +"bbN" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu) +"bbO" = (/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge) +"bbP" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu) +"bbQ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"bbR" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/medical/icu) +"bbS" = (/obj/structure/bed/chair{dir = 4},/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"bbT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"bbU" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder) +"bbV" = (/obj/machinery/button/remote/blast_door{id = "emtshutter";name = "Garage Shutters Control";pixel_x = -28;pixel_y = 7;req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bbW" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/emt) +"bbX" = (/obj/machinery/camera/network/engineering{c_tag = "Engineering - Secure Technical Storage"},/turf/simulated/floor/tiled,/area/storage/tech) +"bbY" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bbZ" = (/turf/simulated/floor/plating,/area/storage/tech) +"bca" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/storage/tech) +"bcb" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/sign/ex,/turf/simulated/floor/tiled,/area/medical/medbay3) +"bcc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bcd" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bce" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Examination Room";req_access = list(5)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bcf" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bcg" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bch" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bci" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bcj" = (/obj/machinery/alarm/cold{dir = 8;icon_state = "alarm0";pixel_x = 25;pixel_y = 0;tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bck" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bcl" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Head of Personnel's Office";dir = 1},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bcm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bcn" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bco" = (/obj/machinery/button/windowtint{id = "hop";pixel_y = -24;range = 9},/obj/machinery/requests_console{announcementConsole = 1;department = "Head of Personnel's Desk";departmentType = 5;name = "Head of Personnel RC";pixel_x = 30;pixel_y = -30},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "hop_office_desk";name = "Desk Privacy Shutter";pixel_x = 0;pixel_y = -36},/obj/machinery/account_database,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bcp" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bcq" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/turbolift/main_station) +"bcr" = (/obj/machinery/computer/security/mining,/obj/machinery/atm{pixel_x = 32},/obj/item/weapon/storage/secure/safe{pixel_x = 5;pixel_y = -28},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) +"bcs" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/camera/network/command{c_tag = "AI Core - Beta Core 2";dir = 1},/obj/machinery/atm{pixel_y = -32},/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bct" = (/turf/simulated/wall/r_wall,/area/medical/chemistry) +"bcu" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/structure/closet/secure_closet/captains,/obj/structure/curtain/black{pixel_x = 32},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bcv" = (/obj/machinery/light_switch{pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/light,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"bcw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"bcx" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"bcy" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"bcz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/storage/tech) +"bcA" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bcB" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1;pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2;pixel_y = -2},/turf/simulated/floor/tiled,/area/storage/tech) +"bcC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech) +"bcD" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3;pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3;pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/tech) +"bcE" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/secure_data{pixel_x = -2;pixel_y = 2},/obj/item/weapon/circuitboard/security{pixel_x = 1;pixel_y = -1},/obj/item/weapon/circuitboard/skills{pixel_x = 4;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bcF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech) +"bcG" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"bcH" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"bcI" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1;pixel_y = -1},/obj/item/device/multitool,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/storage/tech) +"bcJ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bcK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bcL" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bcM" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bcN" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bcO" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/random/junk,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bcP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bcQ" = (/obj/machinery/door/airlock/maintenance{req_access = list(57)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/heads/hop) +"bcR" = (/obj/machinery/door/airlock/maintenance{req_access = list(20)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bcS" = (/obj/structure/closet/secure_closet/medical2{req_access = list(29)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bcT" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"bcU" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bcV" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bcW" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bcX" = (/obj/structure/sign/directions/security{dir = 1;icon_state = "direction_sec";pixel_y = 32},/turf/simulated/wall,/area/storage/emergency) +"bcY" = (/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker";pixel_x = -32;pixel_y = 0},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/bed/roller,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/icu) +"bcZ" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bda" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bdb" = (/obj/machinery/iv_drip,/obj/structure/window/reinforced{dir = 1},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bdc" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_x = -32;pixel_y = 0},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bdd" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bde" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bdf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "Medical - Examination Office";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bdg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bdh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 1;id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room) +"bdi" = (/obj/structure/table/woodentable,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 1;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Examination Room Emergency Phone";pixel_x = 5;pixel_y = -4},/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"bdj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Temporary Morgue";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bdk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bdl" = (/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Morgue Maintenance";req_access = list(6);req_one_access = newlist()},/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled,/area/medical/temp_morgue) +"bdm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bdn" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bdo" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bdp" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bdq" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bdr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge) +"bds" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/turf/simulated/floor/tiled,/area/bridge) +"bdt" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"bdu" = (/obj/machinery/disposal,/obj/machinery/camera/network/command{c_tag = "Bridge - Command Dormitories";dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo) +"bdv" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/storage/tech) +"bdw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tech) +"bdx" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/crew{pixel_x = -1;pixel_y = 1},/obj/item/weapon/circuitboard/communications{pixel_x = 5;pixel_y = -5},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled,/area/storage/tech) +"bdy" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Tech Storage";req_access = list(19,23)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tech) +"bdz" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bdA" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/powermonitor{pixel_x = -2;pixel_y = 2},/obj/item/weapon/circuitboard/security/engineering,/obj/item/weapon/circuitboard/atmos_alert{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"bdB" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1;pixel_y = -1},/obj/item/clothing/gloves/yellow,/obj/item/device/t_scanner,/obj/item/clothing/glasses/meson,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech) +"bdC" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bdD" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bdE" = (/obj/machinery/conveyor{backwards = 4;desc = "A conveyor belt. Used to ferry synthetic bodies to the surgery lab.";dir = 8;id = "RobotSurg"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/assembly/robotics) +"bdF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/conveyor{backwards = 5;dir = 10;icon_state = "conveyor0";id = "RobotSurg"},/turf/simulated/floor/plating,/area/assembly/robotics) +"bdG" = (/turf/simulated/floor/tiled/white,/area/medical/icu) +"bdH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/icu) +"bdI" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/tiled/white,/area/medical/icu) +"bdJ" = (/obj/machinery/conveyor{backwards = 4;desc = "A conveyor belt. Used to ferry synthetic bodies to the surgery lab.";dir = 8;id = "RobotSurg"},/turf/simulated/floor/plating,/area/assembly/robotics) +"bdK" = (/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/obj/machinery/conveyor{backwards = 4;desc = "A conveyor belt. Used to ferry synthetic bodies to the surgery lab.";dir = 8;id = "RobotSurg"},/turf/simulated/floor/plating,/area/assembly/robotics) +"bdL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bdM" = (/obj/machinery/computer/crew,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bdN" = (/obj/machinery/conveyor{backwards = 10;dir = 5;id = "RobotSurg"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bdO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bdP" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bdQ" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/structure/window/reinforced/polarized{id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"bdR" = (/obj/structure/extinguisher_cabinet{pixel_x = 32},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 6";dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bdS" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 7";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bdT" = (/obj/item/device/radio/intercom{pixel_x = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bdU" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"bdV" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bdW" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bdX" = (/obj/structure/table/rack,/obj/item/clothing/accessory/stethoscope,/obj/item/device/flashlight/pen,/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"bdY" = (/obj/structure/table/standard,/obj/item/device/mass_spectrometer/adv,/obj/item/device/radio/intercom{pixel_y = 26},/obj/machinery/camera/network/medbay{c_tag = "Medical - Chemistry North"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bdZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/temp_morgue) +"bea" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"beb" = (/obj/structure/table/standard,/obj/item/device/mass_spectrometer/adv,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bec" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry) +"bed" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bee" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bef" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beh" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/vending/wallmed1{pixel_y = 32},/obj/machinery/camera/network/medbay{c_tag = "Medical - Main Storage"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bei" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bej" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bek" = (/obj/machinery/door/airlock/maintenance{req_access = list(20)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bel" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/adv,/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bem" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/heads/cryo) +"ben" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beo" = (/obj/structure/closet,/obj/item/weapon/bikehorn,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bep" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/fire,/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = 30},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"beq" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/o2,/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"ber" = (/turf/simulated/floor/tiled,/area/storage/tech) +"bes" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/storage/tech) +"bet" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Intensive Care Unit";dir = 4;icon_state = "camera"},/obj/machinery/sleeper{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/icu) +"beu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/icu) +"bev" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bew" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bex" = (/obj/machinery/conveyor{backwards = 1;id = "RobotSurg"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"bey" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/emt) +"bez" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"beA" = (/obj/item/weapon/stool/padded,/obj/machinery/camera/network/medbay{c_tag = "Medical - EMT Quarters";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"beB" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/emt) +"beC" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3) +"beD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"beE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room) +"beF" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"beG" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/machinery/button/windowtint{id = "ExamR";pixel_x = -14;pixel_y = 28;req_access = list(5)},/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"beH" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -1;pixel_y = 7},/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"beI" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"beJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Autopsy Laboratory";req_access = list(6,5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"beK" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"beM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"beN" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"beO" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beP" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beQ" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beR" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/icu) +"beS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/icu) +"beT" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge) +"beU" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"beV" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2;pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1;pixel_y = -1},/turf/simulated/floor/tiled,/area/storage/tech) +"beW" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"beX" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/cloning{pixel_x = 0},/obj/item/weapon/circuitboard/clonescanner,/obj/item/weapon/circuitboard/clonepod,/obj/item/weapon/circuitboard/scan_consolenew,/obj/item/weapon/circuitboard/med_data{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"beY" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/unary_atmos/heater,/obj/item/weapon/circuitboard/unary_atmos/cooler{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) +"beZ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bfa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bfb" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/research{desc = "It opens and closes. ";name = "Cyborgification Bay";req_access = list(29)},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bfc" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CybGlass"},/obj/structure/window/reinforced/polarized{id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"bfd" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"bfe" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bff" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bfg" = (/obj/machinery/chem_master,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bfh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "CHEshutters";name = "Chemistry Privacy Shutters";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/chemistry) +"bfi" = (/obj/machinery/chemical_dispenser/full,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bfj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/temp_morgue) +"bfk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bfl" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bfm" = (/obj/structure/table/standard,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bfn" = (/turf/simulated/wall,/area/medical/genetics_cloning) +"bfo" = (/obj/machinery/chemical_dispenser/full,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bfp" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bfq" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bfr" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry) +"bfs" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bft" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/emergency{dir = 1},/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bfu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bfv" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bfw" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bfx" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bfy" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bfz" = (/obj/item/weapon/aicard,/obj/item/weapon/aiModule/reset,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech) +"bfA" = (/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/wirecutters,/obj/structure/table/steel,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech) +"bfB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Medical Lockers";req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bfC" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/icu) +"bfD" = (/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech) +"bfE" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bfF" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bfG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "EMT Quarters";req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/emt) +"bfH" = (/turf/simulated/floor/asteroid,/area/maintenance/research_port) +"bfI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bfJ" = (/obj/machinery/conveyor{blood_color = 1;id = "RobotSurg"},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bfK" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bfL" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bfM" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bfN" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bfO" = (/obj/machinery/vending/robotics{products = list(/obj/item/clothing/suit/storage/toggle/labcoat = 4, /obj/item/clothing/under/rank/roboticist = 4, /obj/item/stack/cable_coil = 4, /obj/item/weapon/cell/high = 12, /obj/item/device/assembly/prox_sensor = 8, /obj/item/device/assembly/signaler = 3, /obj/item/device/healthanalyzer = 8, /obj/item/weapon/scalpel = 2, /obj/item/weapon/circular_saw = 2, /obj/item/weapon/tank/anesthetic = 2, /obj/item/clothing/mask/breath/medical = 5, /obj/item/weapon/screwdriver = 5, /obj/item/weapon/crowbar = 5)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bfP" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"bfQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "EMT Quarters";req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bfR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bfS" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bfT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"bfU" = (/obj/item/device/radio/intercom{pixel_y = 27},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bfV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bfW" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room) +"bfX" = (/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"bfY" = (/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bfZ" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_y = -32},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"bga" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records.";name = "Medical Records"},/turf/simulated/floor/carpet/blue,/area/medical/exam_room) +"bgb" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bgc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bgd" = (/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge) +"bge" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bgf" = (/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/turf/simulated/floor/tiled,/area/bridge) +"bgg" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bgh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech) +"bgi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech) +"bgj" = (/obj/item/stack/cable_coil{pixel_x = -3;pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech) +"bgk" = (/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/obj/structure/table/steel,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Technical Storage";dir = 1},/turf/simulated/floor/plating,/area/storage/tech) +"bgl" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plating,/area/storage/tech) +"bgm" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio{pixel_x = -5},/obj/item/device/radio/intercom{pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bgn" = (/obj/item/device/flashlight{pixel_x = 1;pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1;pixel_y = 5},/obj/item/device/flash,/obj/item/device/flash,/obj/machinery/ai_status_display{pixel_x = 0;pixel_y = -32},/obj/structure/table/steel,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech) +"bgo" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bgp" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bgq" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgr" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "RobotSurg"},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgs" = (/obj/structure/table/rack{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{desc = "A blue toolbox containing mechanic-related tools."},/obj/item/weapon/storage/toolbox/mechanical{desc = "A blue toolbox containing mechanic-related tools."},/obj/machinery/requests_console{department = "Robotics";departmentType = 2;name = "Robotics RC";pixel_y = 30},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/belt,/obj/item/weapon/storage/toolbox/electrical,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgt" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/camera/network/research{c_tag = "Research - Robotics Manufacturing"},/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgu" = (/obj/structure/window/basic{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgv" = (/obj/structure/table/standard,/obj/item/weapon/folder,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bgw" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bgx" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bgy" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "CHEshutters";name = "Chemistry Privacy Shutters";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/chemistry) +"bgz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bgA" = (/obj/structure/table/standard,/obj/item/clothing/glasses/science,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bgB" = (/turf/simulated/wall,/area/maintenance/medbay) +"bgC" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bgD" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry) +"bgE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bgF" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge) +"bgG" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bgH" = (/obj/structure/table/standard,/obj/item/device/mass_spectrometer,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bgI" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge) +"bgJ" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bgK" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bgL" = (/turf/simulated/wall/r_wall,/area/storage/tech) +"bgM" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/icu) +"bgN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/icu) +"bgO" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgP" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bgQ" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bgR" = (/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgS" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bgT" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/emt) +"bgU" = (/obj/item/roller,/obj/item/roller,/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bgV" = (/obj/effect/floor_decal/corner/orange{dir = 10},/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"bgW" = (/obj/structure/table/standard,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = 5},/obj/item/device/radio/intercom{frequency = 1487;name = "MedBay Emergency Line Intercom";pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bgX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/emt) +"bgY" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bgZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bha" = (/obj/turbolift_map_holder/aurora/civilian,/turf/simulated/floor/tiled/dark,/area/turbolift/main_station) +"bhb" = (/obj/structure/window/reinforced,/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bhc" = (/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bhd" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bhe" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bhf" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Consultation Wing Hallway";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bhg" = (/obj/item/device/radio/intercom{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"bhh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bhi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bhj" = (/obj/structure/table/standard,/obj/item/device/camera{name = "Autopsy Camera";pixel_x = -2;pixel_y = 7},/obj/item/device/mass_spectrometer,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bhk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bhl" = (/obj/machinery/optable,/obj/machinery/camera/network/medbay{c_tag = "Medical - Autopsy Laboratory";dir = 9;icon_state = "camera"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bhm" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bhn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bho" = (/obj/machinery/clonepod,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bhp" = (/obj/machinery/computer/cloning,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bhq" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bhr" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bhs" = (/obj/machinery/door/airlock/glass_command{name = "Command Maintenance";req_access = list(19)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bht" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge) +"bhu" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/crowbar/red,/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bhv" = (/turf/simulated/wall,/area/medical/medbay3) +"bhw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/bridge) +"bhx" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bhy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bhz" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bhA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) +"bhB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/wood,/area/medical/psych) +"bhC" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bhD" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bhE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/temp_morgue) +"bhF" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bhG" = (/obj/item/device/radio/intercom{pixel_y = -26},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bhH" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bhI" = (/obj/effect/floor_decal/corner/orange{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/dark,/area/assembly/robotics) +"bhJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bhK" = (/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bhL" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bhM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bhN" = (/obj/machinery/door/window/eastright{req_access = list(29)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bhO" = (/obj/structure/table/reinforced,/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Robotics Desk";req_access = list(29)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bhP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bhQ" = (/turf/simulated/wall,/area/bridge/minibar) +"bhR" = (/turf/simulated/wall/r_wall,/area/bridge/minibar) +"bhS" = (/obj/machinery/smartfridge/secure/medbay{name = "Dangerous Materials Storage";req_access = list(33);req_one_access = null},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bhT" = (/obj/structure/closet/secure_closet/chemical,/obj/item/weapon/storage/box/pillbottles,/obj/item/weapon/storage/box/pillbottles,/obj/item/device/radio/headset/headset_med,/obj/item/device/radio/headset/headset_med,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bhU" = (/obj/structure/closet/wardrobe/chemistry_white,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bhV" = (/obj/machinery/smartfridge/secure/medbay{pixel_y = -32},/obj/structure/table/reinforced,/obj/machinery/door/window{base_state = "left";dir = 8;icon_state = "left";name = "Chemistry Desk";req_access = list(33)},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE3shutters";name = "Chemistry Desk Shutter";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bhW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bhX" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_y = -32},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bhY" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bhZ" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bia" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/gloves,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bib" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bic" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bid" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/sign/nosmoking_1{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bie" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bif" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"big" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/central_one) +"bih" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/icu) +"bii" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bij" = (/turf/simulated/wall,/area/medical/medbay) +"bik" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bil" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/medical/medbay) +"bim" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay) +"bin" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/icu) +"bio" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/emt) +"bip" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/sign/p,/turf/simulated/floor/tiled,/area/medical/medbay3) +"biq" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bir" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) +"bis" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Mental Heath";req_access = list(64)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) +"bit" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3) +"biu" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3) +"biv" = (/obj/structure/sink{pixel_y = 18},/obj/structure/mirror{pixel_y = 32},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3) +"biw" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker";req_access = list(64)},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/obj/machinery/requests_console{department = "Psychiatrist's Desk";departmentType = 1;pixel_x = 0;pixel_y = 28},/turf/simulated/floor/wood,/area/medical/psych) +"bix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue) +"biy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Autopsy Laboratory";req_access = list(66)},/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"biz" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/bed/roller,/obj/machinery/camera/network/medbay{c_tag = "Medical - Staff Area Hallway";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"biA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/medical/psych) +"biB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/medical/psych) +"biC" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/wood,/area/medical/psych) +"biD" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Level A Lift"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/bridge) +"biE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"biF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"biG" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"biH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"biI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"biJ" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"biK" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/medbay) +"biL" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"biM" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"biN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"biO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"biP" = (/obj/item/device/radio/intercom{pixel_x = -27},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics) +"biQ" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;sortType = "Robotics";name = "Robotics"},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/assembly/robotics) +"biR" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/assembly/robotics) +"biS" = (/obj/machinery/light_switch{pixel_y = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"biT" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/assembly/robotics) +"biU" = (/obj/structure/window/basic{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"biV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"biW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"biX" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"biY" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_port) +"biZ" = (/turf/simulated/wall,/area/maintenance/substation/research) +"bja" = (/obj/structure/table/standard,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/item/weapon/screwdriver{pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";name = "Chemistry Cleaner";pixel_x = -2;pixel_y = -2},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bjb" = (/obj/structure/table/standard,/obj/item/stack/material/plasteel{amount = 20},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bjc" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/ripley_build_and_repair,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/reagent_dispensers/acid{pixel_y = 32},/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bjd" = (/obj/machinery/computer/rdconsole/robotics,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bje" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/assembly/robotics) +"bjf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Main Storage";req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bjg" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "Intensive Care Unit";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/icu) +"bjh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bji" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjj" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/icu) +"bjk" = (/obj/structure/disposalpipe/junction/yjunction,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjl" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/icu) +"bjp" = (/obj/structure/window/basic{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjq" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/icu) +"bjr" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/emt) +"bjs" = (/obj/machinery/door/airlock/glass_medical{name = "EMT Quarters";req_access = list(5)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/medical/emt) +"bjt" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bju" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bjv" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bjw" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/turf/simulated/floor/wood,/area/medical/psych) +"bjx" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych) +"bjy" = (/obj/machinery/door/airlock/medical{name = "Temporary Morgue";req_one_access = newlist()},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue) +"bjz" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bjA" = (/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Cloning Maintenance";req_access = list(66)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) +"bjB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"bjC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"bjD" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Corridor Camera 1"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge) +"bjE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/medical/chemistry) +"bjF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bjG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"bjH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"bjI" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bjJ" = (/obj/machinery/vending/medical{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bjK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge/minibar) +"bjL" = (/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bjM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/minibar) +"bjN" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_y = 30},/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway Central-West"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bjO" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50;pixel_x = 5;pixel_y = 5},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 20},/obj/item/stack/material/glass{amount = 50},/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bjP" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjQ" = (/turf/simulated/floor/tiled/freezer,/area/medical/medbay3) +"bjR" = (/obj/machinery/door/airlock{name = "Public Bathrooms"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/medical/medbay3) +"bjS" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjV" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/carpet,/area/medical/psych) +"bjW" = (/obj/machinery/door/blast/shutters{density = 1;dir = 4;icon_state = "shutter1";id = "MechBayShutter";name = "Mech Bay Shutters";opacity = 1},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bjX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/medical/psych) +"bjY" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bjZ" = (/turf/simulated/wall,/area/medical/medbay2) +"bka" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bkb" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bkc" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bkd" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/landmark{name = "Observer-Start"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bke" = (/obj/machinery/door/firedoor,/obj/structure/sign/directions/evac{dir = 8;icon_state = "direction_evac";pixel_y = 32},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bkf" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bkg" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bkh" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bki" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bkj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bkk" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bkl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bkm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bkn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bko" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bkp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bkq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bkr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bks" = (/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bkt" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/bronze,/turf/simulated/floor/carpet,/area/bridge/minibar) +"bku" = (/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bkv" = (/obj/machinery/vending/dinnerware,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bkw" = (/obj/structure/bed/chair/comfy/teal{dir = 8;icon_state = "comfychair_preview"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bkx" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/nosmoking_1{pixel_x = 32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bky" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bkz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bkA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych) +"bkB" = (/obj/structure/bed/chair/office/light,/obj/machinery/button/windowtint{id = "Phy";pixel_x = -14;pixel_y = -28;req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/carpet,/area/medical/psych) +"bkC" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/medical/psych) +"bkD" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/sink{pixel_y = 28},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bkE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/sign/m,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bkF" = (/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Cloning Wing"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bkG" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bkH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Cloning Laboratory";req_access = list(66)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bkI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bkJ" = (/obj/structure/closet,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bkK" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bkL" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_y = -26},/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bkM" = (/obj/structure/closet/wardrobe/white,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bkN" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bkO" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bkP" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bkQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge) +"bkR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge) +"bkS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge) +"bkT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bkU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bkV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bkW" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/bridge/minibar) +"bkX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge/minibar) +"bkY" = (/obj/machinery/atm{pixel_y = -32},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Surface Lift";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bkZ" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bla" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"blb" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"blc" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bld" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"ble" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"blf" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"blg" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"blh" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/sensor{name = "Powernet Sensor - Research Subgrid";name_tag = "Research Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bli" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"blj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"blk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/turf/simulated/floor/plating,/area/assembly/robotics) +"bll" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"blm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bln" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"blo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"blp" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics) +"blq" = (/obj/machinery/door/window{dir = 4;name = "Components Manufacture";req_access = list(29)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"blr" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3) +"bls" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"blt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"blu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"blv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/assembly/robotics) +"blw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics) +"blx" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/medical/psych) +"bly" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics) +"blz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"blA" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;id_tag = "RobMechBay";req_access = list(5)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"blB" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/shutters{density = 1;dir = 4;icon_state = "shutter1";id = "MechBayShutter";name = "Mech Bay Shutters";opacity = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"blC" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"blD" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_y = 6},/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"blE" = (/turf/simulated/wall/r_wall,/area/medical/genetics_cloning) +"blF" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/cmo) +"blG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"blH" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "CHE3shutters";name = "Desk Shutter Control";pixel_x = 6;pixel_y = 6;req_access = list(33)},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/button/remote/blast_door{id = "CHE2shutters";name = "Chemistry Interior Shutters";pixel_x = -6;pixel_y = 6;req_access = list(33)},/obj/machinery/button/remote/blast_door{id = "CHEshutters";name = "Hallway Shutters Control";pixel_x = 0;pixel_y = -6;req_access = list(33)},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"blI" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/medbay{c_tag = "Medical - Chemistry South";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"blJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "Emergency Shower";req_access = newlist()},/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/freezer,/area/medical/chemistry) +"blK" = (/obj/machinery/door/airlock/glass_medical{name = "Chemistry Laboratory";req_access = list(33)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"blL" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"blM" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blO" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blQ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blR" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blS" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blU" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blV" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"blW" = (/obj/item/toy/figure/roboticist,/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"blX" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"blY" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3) +"blZ" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bma" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmb" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmc" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bmd" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -1;pixel_y = 7},/turf/simulated/floor/carpet,/area/medical/psych) +"bme" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych) +"bmf" = (/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmh" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/camera/network/medbay{c_tag = "Medical - Phychiatrist Office";dir = 1;icon_state = "camera"},/turf/simulated/floor/carpet,/area/medical/psych) +"bmi" = (/turf/simulated/wall,/area/chapel/office) +"bmj" = (/turf/simulated/wall/r_wall,/area/medical/reception) +"bmk" = (/obj/structure/bed/psych,/obj/item/weapon/bedsheet/brown,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/carpet,/area/medical/psych) +"bml" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bmm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bmn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bmo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/bridge) +"bmp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/bridge) +"bmq" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge) +"bmr" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bms" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bmt" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bmu" = (/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bmv" = (/obj/machinery/door/airlock/glass_command{name = "Break Room"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge) +"bmw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bmx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bmy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"bmz" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/minibar) +"bmA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bmB" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/red/diagonal,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge/minibar) +"bmC" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/rag,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/minibar) +"bmD" = (/turf/simulated/wall,/area/medical/psych) +"bmE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge/minibar) +"bmF" = (/obj/machinery/chemical_dispenser/bar_alc/full,/obj/structure/table/woodentable,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/red/diagonal,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge/minibar) +"bmG" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Research"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bmH" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay2) +"bmI" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/camera/network/research{c_tag = "Research - Research Substation";dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bmJ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay2) +"bmK" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2) +"bmL" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay2) +"bmM" = (/obj/machinery/mecha_part_fabricator,/obj/machinery/camera/network/research{c_tag = "Research - Robotics Fabrication";dir = 4;network = list("Research","Toxins Test Area")},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bmN" = (/obj/structure/bed/chair/office/dark,/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bmO" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;desc = "A conveyor control switch. It appears to only go in one direction. Controls the components conveyor belt.";id = "Robocompo";name = "components conveyor switch"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bmP" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmR" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmS" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/camera/network/research{c_tag = "Research - Toxins Test Chamber Port";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmT" = (/obj/machinery/button/remote/blast_door{desc = "It controls the Mech Bay's shutters.";id = "MechBayShutter";name = "Mech Bay shutters";pixel_x = 28},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bmU" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/chemistry,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) +"bmV" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/medical/reception) +"bmW" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE3shutters";name = "Chemistry Desk Shutter";opacity = 0},/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "Chemistry Desk";req_access = list(33)},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bmX" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet,/area/bridge/minibar) +"bmY" = (/obj/machinery/vending/boozeomat,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bmZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/medical/reception) +"bna" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/obj/structure/sign/nosmoking_2,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/medical/reception) +"bnb" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bnc" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway West";dir = 4;icon_state = "camera"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bnd" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Research (Sub-level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bne" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bnf" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bng" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bnh" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bni" = (/obj/structure/table/standard,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnj" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay3) +"bnl" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnm" = (/obj/machinery/cryopod/robot,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/closet/wardrobe/robotics_black,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bno" = (/obj/structure/closet/firecloset,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/multi_tile/glass{id_tag = "FOREdoor";name = "MedBay Fore Entrance";req_access = newlist()},/turf/simulated/floor/tiled,/area/medical/medbay3) +"bnq" = (/obj/structure/crematorium,/turf/simulated/floor/tiled/dark,/area/chapel/office) +"bnr" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/obj/structure/window/reinforced/polarized{id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych) +"bns" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/wood,/area/chapel/office) +"bnt" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/chapel/office) +"bnu" = (/obj/machinery/camera/network/civilian_west{c_tag = "Church - Office"},/turf/simulated/floor/carpet,/area/chapel/office) +"bnv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych) +"bnw" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych) +"bnx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Cloning Wing";req_one_access = list(6,5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bny" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bnz" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bnA" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bnB" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/newscaster{pixel_x = 0;pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bnC" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{id_tag = "CMOdoor";name = "CMO's Office";req_access = list(40)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bnD" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bnE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bnF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/mob/living/simple_animal/cat/fluff/Runtime{name = "Bones"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bnG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge) +"bnH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge) +"bnI" = (/turf/simulated/wall,/area/medical/gen_treatment) +"bnJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge/minibar) +"bnK" = (/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bnL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bnM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bnN" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/research) +"bnO" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bnP" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnQ" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnR" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnS" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{empty = 1;name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1;name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) +"bnT" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 5";dir = 1},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bnU" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bnV" = (/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/machinery/button/crematorium{pixel_x = -32;pixel_y = 25},/turf/simulated/floor/tiled/dark,/area/chapel/office) +"bnW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bnX" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bnY" = (/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bnZ" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Chaplain"},/obj/machinery/button/windowtint{id = "chapel";pixel_y = 28},/turf/simulated/floor/carpet,/area/chapel/office) +"boa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bob" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -2;pixel_y = 5},/obj/item/weapon/storage/fancy/crayons,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/carpet,/area/chapel/office) +"boc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2) +"bod" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boe" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bof" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_y = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bog" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) +"boh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) +"boi" = (/obj/machinery/disposal,/obj/machinery/camera/network/medbay{c_tag = "Medical - MedBay Reception North"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) +"boj" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bok" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bol" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bom" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bon" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge) +"boo" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bop" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) +"boq" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{frequency = 1487;name = "MedBay Emergency Line Intercom";pixel_y = 22},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bor" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bos" = (/obj/machinery/smartfridge/drinks,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bot" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge/minibar) +"bou" = (/turf/simulated/wall/r_wall,/area/server) +"bov" = (/obj/structure/sign/poster,/turf/simulated/wall,/area/assembly/robotics) +"bow" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"box" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics) +"boy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics) +"boz" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"boA" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0;req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment) +"boB" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "General Treatment Room";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment) +"boC" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0;req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment) +"boD" = (/turf/simulated/floor/wood,/area/chapel/office) +"boE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/chapel/office) +"boF" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp{pixel_y = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/chapel/office) +"boG" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/chapel/office) +"boH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"boI" = (/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"boJ" = (/obj/structure/noticeboard{pixel_x = 0;pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"boK" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) +"boL" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) +"boN" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) +"boO" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boP" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boQ" = (/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"boS" = (/obj/machinery/button/remote/airlock{id = "CONSdoor";name = "Consultation Wing Entrance Control";pixel_x = 0;pixel_y = 24;req_access = newlist()},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boT" = (/obj/structure/bed/chair/comfy/teal{dir = 8;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boU" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boV" = (/obj/machinery/papershredder,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boW" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boX" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"boY" = (/obj/structure/bed/chair,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"boZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) +"bpa" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bpb" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bpc" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"bpd" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/carpet,/area/bridge/minibar) +"bpe" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar) +"bpf" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/machinery/camera/network/command{c_tag = "Bridge - Command Lounge";dir = 1},/turf/simulated/floor/carpet,/area/bridge/minibar) +"bpg" = (/obj/machinery/door/airlock/glass_research{name = "Robotics Lab";req_access = list(29)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bph" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bpi" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/chapel/office) +"bpj" = (/obj/machinery/door/window/westleft{dir = 4;name = "Crematorium'";req_access = list(22)},/turf/simulated/floor/tiled/dark,/area/chapel/office) +"bpk" = (/obj/structure/table/woodentable,/obj/item/weapon/nullrod,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/carpet,/area/chapel/office) +"bpl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/sign/redcross,/turf/simulated/floor/plating,/area/medical/reception) +"bpm" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bpn" = (/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/reception) +"bpo" = (/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bpp" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bpq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/gen_treatment) +"bpr" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bps" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bpt" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_y = 6},/obj/item/weapon/pen,/obj/item/weapon/stamp/cmo,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"bpu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bpv" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bpw" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "General Treatment Room";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment) +"bpx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/minibar) +"bpy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/minibar) +"bpz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bpA" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bpB" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bpC" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bpD" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpH" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpI" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpJ" = (/turf/simulated/floor/tiled/white,/area/rnd/research) +"bpK" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpL" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpM" = (/obj/machinery/door/airlock/glass_medical{id_tag = "BRIEFdoor";name = "Briefing Room";req_access = list(5)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpN" = (/obj/machinery/atm{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bpO" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpQ" = (/turf/simulated/wall/r_wall,/area/rnd/research) +"bpR" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/structure/sink{pixel_y = 16},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bpS" = (/obj/machinery/camera/network/research{c_tag = "Research - Entrance"},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bpT" = (/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bpU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpV" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark,/area/chapel/office) +"bpW" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/chapel/office) +"bpY" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bpZ" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"bqa" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) +"bqb" = (/obj/structure/table/glass,/obj/item/weapon/paper{desc = "A few notes scratched out by the last CMO before they departed the station.";info = "\[i]\[center]To the incoming CMO of Exodus:\[/i]\[/center]\[br]\[br]I wish you and your crew well. Do take note:\[br]\[br]\[br]The Medical Emergency Red Phone system has proven itself well. Take care to keep the phones in their designated places as they have been optimised for broadcast. The two handheld green radios (I have left one in this office, and one near the Emergency Entrance) are free to be used. The system has proven effective at alerting Medbay of important details, especially during power outages.\[br]\[br]I think I may have left the toilet cubicle doors shut. It might be a good idea to open them so the staff and patients know they are not engaged.\[br]\[br]The new syringe gun has been stored in secondary storage. I tend to prefer it stored in my office, but 'guidelines' are 'guidelines'.\[br]\[br]Also in secondary storage is the grenade equipment crate. I've just realised I've left it open - you may wish to shut it.\[br]\[br]There were a few problems with their installation, but the Medbay Quarantine shutters should now be working again - they lock down the Emergency and Main entrances to prevent travel in and out. Pray you shan't have to use them.\[br]\[br]The new version of the Medical Diagnostics Manual arrived. I distributed them to the shelf in the staff break room, and one on the table in the corner of this room.\[br]\[br]The exam/triage room has the walking canes in it. I'm not sure why we'd need them - but there you have it.\[br]\[br]Emergency Cryo bags are beside the emergency entrance, along with a kit.\[br]\[br]Spare paper cups for the reception are on the left side of the reception desk.\[br]\[br]I've fed Runtime. She should be fine.\[br]\[br]\[br]\[center]That should be all. Good luck!\[/center]";name = "Outgoing CMO's Notes"},/obj/item/weapon/clipboard,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"bqc" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bqd" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bqe" = (/turf/simulated/floor/tiled/white,/area/medical/reception) +"bqf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bqg" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/glass_command{name = "Level A Lift"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/bridge) +"bqh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bqi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bqj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"bqk" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bql" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bqm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;icon_state = "map_vent_out";use_power = 1},/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"bqn" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"bqo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/server) +"bqp" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"bqq" = (/obj/machinery/power/apc/high{dir = 1;name = "north bump";pixel_y = 24},/obj/machinery/camera/network/research{c_tag = "Research - Server Room"},/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/portables_connector,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/server) +"bqr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/dark,/area/server) +"bqs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bqt" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer_1";power_setting = 20;set_temperature = 80;use_power = 1},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/server) +"bqu" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bqv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bqw" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bqx" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/medical/medbay) +"bqy" = (/obj/machinery/vending/coffee,/obj/machinery/light,/turf/simulated/floor/tiled,/area/medical/medbay) +"bqz" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bqA" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bqB" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bqC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bqD" = (/obj/structure/sign/directions/science{dir = 8;icon_state = "direction_sci";pixel_x = -32;pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bqE" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bqF" = (/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/simulated/floor/tiled/dark,/area/chapel/office) +"bqG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/chapel/office) +"bqH" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bqI" = (/obj/machinery/vending/medical{density = 0;pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bqJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/chapel/office) +"bqK" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/wood,/area/chapel/office) +"bqL" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bqM" = (/obj/structure/bed/chair{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/chapel/office) +"bqN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay2) +"bqO" = (/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bqP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bqQ" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bqR" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;id_tag = "MAINdoor";name = "MedBay Main Entrance";req_access = list(5)},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/reception) +"bqS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bqT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Medbay";sortType = "Medbay"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bqU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bqV" = (/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment) +"bqW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/sortjunction{dir = 8;icon_state = "pipe-j1s";name = "Chemistry";sortType = "Chemistry"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bqX" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bqY" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bqZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bra" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"brb" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"brc" = (/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"brd" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bre" = (/obj/machinery/newscaster{pixel_x = -30},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"brf" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"brg" = (/obj/machinery/disposal,/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/medical/medbay) +"brh" = (/obj/item/roller,/obj/item/roller,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway Central-East";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bri" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brj" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brk" = (/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction{dir = 1;name = "CE Office";sortType = "CE Office"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brm" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/structure/bed/roller,/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway East";dir = 1;icon_state = "camera"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brn" = (/obj/machinery/iv_drip,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bro" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brp" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brr" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brs" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/item/modular_computer/console/preset/medical,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"brt" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) +"bru" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/chapel/office) +"brv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/chapel/office) +"brw" = (/obj/structure/table/glass,/obj/item/device/megaphone,/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = 5},/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"brx" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/machinery/button/windowtint{id = "CMO";pixel_x = -14;pixel_y = 28;req_access = list(40)},/obj/machinery/button/remote/airlock{id = "CMOdoor";name = "Office Door Control";pixel_x = -14;pixel_y = 36;req_access = list(40)},/obj/machinery/button/remote/airlock{id = "BRIEFdoor";name = "Briefing Room Door Control";pixel_x = 14;pixel_y = 36;req_access = list(40)},/obj/machinery/button/remote/blast_door{id = "LCKDshutters";name = "MedBay Lockdown Control";pixel_x = 14;pixel_y = 28;req_access = list(40)},/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"bry" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Chief Medica Officer's Desk";departmentType = 5;name = "Chief Medical Officer RC";pixel_x = 30;pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medical - Morgue";dir = 8;icon_state = "camera"},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"brz" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled,/area/bridge) +"brA" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge) +"brB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/reception) +"brC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception) +"brD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port) +"brE" = (/obj/machinery/alarm/server{dir = 4;pixel_x = -22;pixel_y = 0},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"brF" = (/obj/machinery/door/firedoor{dir = 8;name = "Firelock West"},/obj/machinery/door/window/westleft{dir = 8;name = "Server Room";opacity = 1;req_access = list(30)},/obj/machinery/door/window/eastleft{name = "Server Room"},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/server) +"brG" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/server) +"brH" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/machinery/meter,/turf/simulated/floor/tiled/dark,/area/server) +"brI" = (/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"brJ" = (/obj/machinery/door/airlock/command{name = "Server Room";req_access = list(30)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/server) +"brK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/server) +"brL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"brM" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research) +"brN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"brO" = (/turf/simulated/wall,/area/medical/surgery) +"brP" = (/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"brR" = (/turf/simulated/wall/r_wall,/area/medical/medbay2) +"brS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"brT" = (/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) +"brV" = (/obj/effect/landmark/start{name = "Nursing Intern"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"brW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"brX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"brY" = (/obj/structure/table/glass,/obj/machinery/computer/skills,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/toy/figure/cmo,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"brZ" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsa" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsb" = (/obj/machinery/door/airlock/research{name = "Research Division Access";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"bsd" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor";name = "Research Division Access";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bse" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge) +"bsf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge) +"bsg" = (/obj/machinery/door/airlock/glass{name = "Chapel Office";req_access = list(22)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/chapel/office) +"bsh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bsi" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Chapel";sortType = "Chapel"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bsj" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bsk" = (/obj/machinery/computer/rdservercontrol,/turf/simulated/floor/tiled/dark,/area/server) +"bsl" = (/obj/machinery/computer/message_monitor,/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/server) +"bsm" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;name = "Medical Bay";req_access = newlist()},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bsn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bso" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) +"bsq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bsr" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller,/obj/machinery/button/remote/airlock{id = "MAINdoor";name = "MedBay Main Entrance Control";pixel_x = 5;pixel_y = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bss" = (/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bst" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "General Treatment Room";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment) +"bsu" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsv" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsw" = (/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsx" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bsy" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bsz" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bsA" = (/obj/structure/bed/roller,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"bsB" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bsC" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/surgerywing) +"bsD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) +"bsE" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bsF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/nosmoking_1{pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bsG" = (/obj/structure/noticeboard{pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bsH" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Nursing Intern"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bsI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bsJ" = (/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bsK" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bsL" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bsM" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment,/obj/machinery/papershredder,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo) +"bsN" = (/turf/simulated/wall,/area/medical/reception) +"bsO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/medbay) +"bsP" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bsQ" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"bsR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/bridge) +"bsS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"bsT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;external_pressure_bound = 0;external_pressure_bound_default = 0;icon_state = "map_vent_in";initialize_directions = 1;internal_pressure_bound = 4000;internal_pressure_bound_default = 4000;use_power = 1;pressure_checks = 2;pressure_checks_default = 2;pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"bsU" = (/obj/machinery/r_n_d/server/core,/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server) +"bsV" = (/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bsW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/server) +"bsX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled/dark,/area/server) +"bsY" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bsZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bta" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research) +"btb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/camera/network/research{c_tag = "Research - Corridor Camera 3";dir = 1},/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/rnd/research) +"btc" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/surgery) +"btd" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Operating Theatre One"},/obj/item/device/radio/intercom{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bte" = (/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"btf" = (/turf/simulated/floor/tiled/white,/area/medical/surgery) +"btg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bth" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bti" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Research Entrance";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/structure/sign/science{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"btj" = (/turf/simulated/open,/area/turbolift/medical_station) +"btk" = (/obj/machinery/newscaster{pixel_x = -30},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"btl" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"btm" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main) +"btn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/chapel/main) +"bto" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"btp" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"btq" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"btr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/chapel/main) +"bts" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge) +"btt" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"btu" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"btv" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main) +"btw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge) +"btx" = (/turf/simulated/wall/r_wall,/area/rnd/rdoffice) +"bty" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Medical Entrance";dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"btz" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/reception) +"btA" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora) +"btB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Office";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"btC" = (/turf/simulated/wall/r_wall,/area/rnd/lab) +"btD" = (/obj/machinery/vending/medical{density = 0;pixel_y = -32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"btE" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/machinery/button/remote/blast_door{id = "GTRshutters";name = "General Treatment Shutters Control";pixel_x = -26;pixel_y = 0;req_access = list(5)},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"btF" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"btG" = (/obj/effect/floor_decal/chapel,/obj/structure/banner,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"btH" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/camera/network/medbay{c_tag = "Medical - General Treatment Room";dir = 1;icon_state = "camera"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"btI" = (/obj/structure/table/marble,/turf/simulated/floor/carpet,/area/chapel/main) +"btJ" = (/obj/item/device/radio/intercom{pixel_y = -26},/obj/effect/floor_decal/corner/lime/full{dir = 4},/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment) +"btK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"btL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"btM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery) +"btN" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/tiled/white,/area/medical/reception) +"btO" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception) +"btP" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"btQ" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"btR" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back.";name = "Surgery Cleaner"},/obj/machinery/button/holosign{id = "OR1";pixel_x = -4;pixel_y = 26},/obj/machinery/light_switch{pixel_x = 4;pixel_y = 26},/obj/effect/floor_decal/corner/grey/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"btS" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"btT" = (/obj/structure/sink/kitchen{dir = 8;icon_state = "sink_alt";name = "Surgical sink";pixel_x = 20},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"btU" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/medical/medbay2) +"btV" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2) +"btW" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"btX" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"btY" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"btZ" = (/obj/machinery/keycard_auth{pixel_x = 24},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bua" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bub" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"buc" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"bud" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bue" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"buf" = (/obj/machinery/computer/operating,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bug" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge) +"buh" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/purple{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bui" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) +"buj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2) +"buk" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research";req_access = list(55)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora) +"bul" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"bum" = (/obj/machinery/door/airlock/research{name = "Research and Development";req_access = list(7)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bun" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"buo" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bup" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main) +"buq" = (/obj/structure/table/marble,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/chapel/main) +"bur" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bus" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/structure/banner,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"but" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge) +"buu" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main) +"buv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) +"buw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"bux" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/item/roller,/obj/item/roller,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/reception) +"buy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/bridge) +"buz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"buA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"buB" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/tiled/white,/area/medical/reception) +"buC" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/maintenance/research_port) +"buD" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/reception) +"buE" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"buF" = (/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "Medical Desk";req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception) +"buG" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"buH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"buI" = (/obj/machinery/photocopier,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"buJ" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/maintenance{name = "Cryogenics Control Room";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/gen_treatment) +"buK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"buL" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"buM" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre One";req_access = list(45)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/holosign/surgery{id = "OR1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgery) +"buN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"buO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"buP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"buQ" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"buR" = (/obj/structure/table/standard,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 7;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Surgery Emergency Phone";pixel_x = 5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"buS" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway South";dir = 4;icon_state = "camera"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2) +"buT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2) +"buU" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"buV" = (/obj/structure/bed/chair{dir = 1},/obj/structure/sign/nosmoking_1{pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor/tiled/white,/area/medical/medbay2) +"buW" = (/obj/machinery/disposal,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"buX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) +"buY" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"buZ" = (/obj/structure/sink{pixel_y = 28},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bva" = (/obj/structure/table/glass,/obj/machinery/photocopier/faxmachine{department = "Chief Medical Officer's Office"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bvb" = (/obj/structure/closet/secure_closet/CMO,/obj/item/clothing/mask/gas,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/glasses/hud/health,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bvc" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge) +"bvd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge) +"bve" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bvf" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"bvg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bvh" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvi" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bvj" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bvm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bvn" = (/obj/machinery/keycard_auth{pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvo" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bvp" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/reception) +"bvq" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvr" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvt" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/medical/gen_treatment) +"bvu" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/medical/gen_treatment) +"bvv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bvw" = (/turf/simulated/wall,/area/medical/surgerywing) +"bvx" = (/obj/structure/table/rack,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bvy" = (/obj/machinery/door/airlock/command{id_tag = "researchdoor";name = "Research Director";req_access = list(30)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bvz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/sortjunction{name = "RD Office";sortType = "RD Office"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bvA" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bvB" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) +"bvC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bvD" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bvE" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bvF" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/medical/medbay2) +"bvG" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bvH" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/medical/medbay2) +"bvI" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bvJ" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bvK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bvL" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bvM" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bvN" = (/obj/structure/table/reinforced,/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Research Desk";req_access = list(7)},/obj/machinery/door/firedoor,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/rnd/lab) +"bvO" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/item/device/radio/intercom{pixel_x = 0;pixel_y = 27},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bvP" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bvQ" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 4"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bvR" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bvS" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bvT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bvU" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bvV" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bvW" = (/obj/machinery/door/window{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bvX" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bvY" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/papershredder,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bvZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bwa" = (/obj/structure/table/standard,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bwb" = (/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bwc" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bwd" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bwe" = (/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bwf" = (/obj/structure/table/standard,/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Medical Desk";req_access = list(5)},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 1;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Reception Emergency Phone";pixel_x = -5;pixel_y = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bwg" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bwh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bwi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bwj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bwk" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/papershredder,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bwl" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bwm" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/medical/gen_treatment) +"bwn" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bwo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bwp" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bwq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/lab) +"bwr" = (/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bws" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing) +"bwt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing) +"bwu" = (/turf/simulated/floor/carpet,/area/chapel/main) +"bwv" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bww" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/vending/wallmed2{pixel_x = 28},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bwx" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/medbay2) +"bwy" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Lift Lobby";dir = 4},/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/bridge) +"bwz" = (/obj/structure/window/reinforced{dir = 8},/obj/item/modular_computer/console/preset/medical,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bwA" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{pixel_x = -25;pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge) +"bwB" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge) +"bwC" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled,/area/bridge) +"bwD" = (/obj/machinery/light,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge) +"bwE" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "robotics_solar_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bwF" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "toxinsrec_airlock";name = "exterior access button";pixel_x = 25;pixel_y = 25;req_one_access = list(13,65)},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bwG" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "robotics_solar_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bwH" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump";tag_exterior_door = "robotics_solar_outer";frequency = 1379;id_tag = "robotics_solar_airlock";tag_interior_door = "robotics_solar_inner";layer = 3.3;pixel_x = 0;pixel_y = -25;req_access = list(13);tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "robotics_solar_sensor";layer = 3.3;pixel_x = 12;pixel_y = -25},/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bwI" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/medical/gen_treatment) +"bwJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bwK" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bwL" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "robotics_solar_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bwM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bwN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/wall,/area/medical/surgerywing) +"bwO" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3;pixel_y = -2},/obj/item/weapon/paper/monitorkey,/obj/item/device/megaphone,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bwP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice) +"bwQ" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bwR" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) +"bwS" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bwT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bwU" = (/obj/item/toy/figure/scientist,/obj/machinery/autolathe,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bwV" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/stock_parts/matter_bin,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bwW" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bwX" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Lift Lobby";dir = 4},/obj/structure/flora/pottedplant/random,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/bridge) +"bwY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge) +"bwZ" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bxa" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/bridge) +"bxb" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/bridge) +"bxc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bxd" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bxe" = (/obj/structure/table/standard,/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bxf" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bxg" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bxh" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bxi" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bxj" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;name = "Medical Bay";req_access = newlist()},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bxk" = (/obj/item/modular_computer/console/preset/research,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bxl" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bxm" = (/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bxn" = (/obj/machinery/vending/hydronutrients{categories = 3},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bxo" = (/obj/machinery/biogenerator,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bxp" = (/obj/structure/table/standard,/obj/machinery/button/remote/airlock{id = "MAINdoor";name = "Main Entrance Control";pixel_x = 0;pixel_y = 6;req_access = list(5)},/obj/machinery/button/remote/blast_door{id = "MAINshutters";name = "Main Entrance Lockdown Switch";pixel_x = 0;pixel_y = -3;req_access = list(5)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bxq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Office";req_access = list(5)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bxr" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bxs" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bxt" = (/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bxu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bxv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/lab) +"bxw" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bxx" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/camera/network/medbay{c_tag = "Medical - Cryogenics Maintenance";dir = 1;icon_state = "camera"},/turf/simulated/floor/plating,/area/medical/gen_treatment) +"bxy" = (/obj/machinery/atmospherics/unary/freezer{dir = 1;icon_state = "freezer"},/turf/simulated/floor/plating,/area/medical/gen_treatment) +"bxz" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bxA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) +"bxB" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bxC" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bxD" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bxE" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bxF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery) +"bxG" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bxH" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bxI" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2) +"bxJ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bxK" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bxL" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bxM" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bxN" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bxO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing) +"bxP" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bxQ" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/bridge) +"bxR" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/grey/full,/turf/simulated/floor/tiled/white,/area/medical/surgery) +"bxS" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bxT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bxU" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bxV" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "rdmdoor";name = "Meeting Room Door Control";pixel_x = 34;pixel_y = 30;req_access = list(57)},/obj/machinery/button/windowtint{id = "RDTint";pixel_x = 26;pixel_y = 30;range = 10},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bxW" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice) +"bxX" = (/turf/simulated/floor/plating,/area/maintenance/medbay) +"bxY" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bxZ" = (/obj/machinery/light/small/emergency,/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bya" = (/turf/simulated/floor/plating,/area/bridge) +"byb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge) +"byc" = (/obj/structure/closet/crate/hydroponics/prespawned,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"byd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bye" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"byf" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"byg" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/item/stack/material/glass{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/glass{amount = 50;pixel_x = 0;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"byh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"byi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main) +"byj" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"byk" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"byl" = (/obj/structure/lamarr,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bym" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"byn" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"byo" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"byp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"byq" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"byr" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main) +"bys" = (/obj/machinery/seed_storage/xenobotany,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"byt" = (/obj/machinery/seed_extractor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"byu" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"byv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/sign/redcross,/turf/simulated/floor/plating,/area/medical/reception) +"byw" = (/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Medical Desk";req_access = list(5)},/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 1;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Reception Emergency Phone";pixel_x = -5;pixel_y = -5},/turf/simulated/floor/tiled/white,/area/medical/reception) +"byx" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception) +"byy" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"byz" = (/turf/simulated/wall,/area/chapel/main) +"byA" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"byB" = (/obj/effect/floor_decal/chapel,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"byC" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/computer/guestpass{pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"byD" = (/obj/machinery/door/airlock{autoclose = 0;icon_state = "door_open";name = "Changing Room"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"byE" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"byF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery) +"byG" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"byH" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = -26},/turf/simulated/floor/tiled/white,/area/medical/reception) +"byI" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled/white,/area/medical/reception) +"byJ" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/machinery/button/remote/blast_door{id = "OR1shutters";name = "Shutters Control";pixel_y = -26;req_access = list(5)},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"byK" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/reception) +"byL" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/tiled/white,/area/medical/reception) +"byM" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"byN" = (/obj/structure/table/standard,/obj/item/weapon/retractor,/obj/effect/floor_decal/corner/grey/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"byO" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/FixOVein,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"byP" = (/obj/machinery/door/airlock/medical{name = "Cold Storage";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/plasticflaps/airtight,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay2) +"byQ" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/bridge) +"byR" = (/obj/structure/curtain/medical,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"byS" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/item/device/radio/intercom{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"byT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"byU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/bridge) +"byV" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge) +"byW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"byX" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) +"byY" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port) +"byZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bza" = (/obj/structure/bed/chair/comfy/black{dir = 4},/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/machinery/camera/network/research{c_tag = "Research - Research Director's Office";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bzb" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bzc" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bzd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2) +"bze" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2) +"bzf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2) +"bzg" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bzh" = (/turf/simulated/floor/tiled,/area/turbolift/command_sub) +"bzi" = (/obj/machinery/computer/robotics,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bzj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bzk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bzl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bzm" = (/obj/machinery/camera/network/research{c_tag = "Research - Corridor Camera 2";dir = 8;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bzn" = (/obj/structure/table/standard,/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bzo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bzp" = (/obj/machinery/smartfridge,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bzq" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bzr" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bzs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bzt" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bzu" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bzv" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bzw" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/manipulator,/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bzx" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/scanning_module,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bzy" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bzz" = (/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bzA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bzB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bzC" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bzD" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bzE" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/machinery/camera/network/medbay{c_tag = "Medical - MedBay Reception South";dir = 1;icon_state = "camera"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bzF" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_y = -26},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bzG" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -1;pixel_y = 7},/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bzH" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bzI" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/structure/noticeboard{pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"bzJ" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing) +"bzP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing) +"bzQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzR" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzS" = (/obj/machinery/door/airlock/glass_medical{name = "Surgery Observation";req_access = newlist()},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/surgerywing) +"bzT" = (/obj/structure/computerframe,/turf/simulated/floor/tiled,/area/medical/surgery2) +"bzU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzV" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bzW" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bzX" = (/turf/simulated/wall,/area/medical/surgery2) +"bzY" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bzZ" = (/obj/structure/closet/crate/freezer{name = "O- Blood Packs"},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bAa" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/alarm/cold{dir = 8;icon_state = "alarm0";pixel_x = 25;pixel_y = 0;tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bAb" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bAc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bAd" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bAe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bAf" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bAg" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bAh" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bAi" = (/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bAj" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bAk" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/obj/effect/floor_decal/corner/grey,/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bAl" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bAm" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bAn" = (/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice) +"bAo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bAp" = (/obj/structure/closet/secure_closet/RD,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bAq" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bAr" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/atm{pixel_y = -32},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bAs" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bAt" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bAu" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bAv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bAw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bAx" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bAy" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bAz" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/floor/tiled/dark,/area/rnd/lab) +"bAA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/chapel,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/civilian_west{c_tag = "Chapel - Altar";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bAB" = (/obj/machinery/r_n_d/protolathe,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/dark,/area/rnd/lab) +"bAC" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/chapel/main) +"bAD" = (/obj/machinery/door/morgue{dir = 2;name = "Confession Booth (Chaplain)";req_access = list(22)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bAE" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bAF" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bAG" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medical Office Maintenance";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay) +"bAH" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bAI" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bAJ" = (/obj/structure/closet/emcloset,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bAK" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_y = 27},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bAL" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bAM" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bAN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bAO" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bAP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bAQ" = (/obj/machinery/iv_drip,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/simulated/floor/plating,/area/medical/surgery2) +"bAR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{dir = 8;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery2) +"bAS" = (/obj/machinery/button/remote/blast_door{id = "OR2shutters";name = "Shutters Control";pixel_y = 26;req_access = list(5)},/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bAT" = (/obj/structure/closet/crate/freezer{name = "Various Blood Packs"},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bAU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bAV" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bAW" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2) +"bAX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plating,/area/medical/surgery2) +"bAY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2) +"bAZ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bBa" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bBb" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bBc" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintance";req_access = list(12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps/airtight,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2) +"bBd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bBe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bBf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bBg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bBh" = (/turf/simulated/wall,/area/crew_quarters/sleep/research) +"bBi" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bBj" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bBk" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bBl" = (/obj/structure/table/rack,/obj/machinery/light_switch{pixel_y = -23},/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/cartridge/signal/science{pixel_x = -4;pixel_y = 2},/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/rig/hazmat/equipped,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bBm" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = 0;pixel_y = -30},/obj/item/weapon/circuitboard/teleporter,/obj/item/weapon/circuitboard/aicore{pixel_x = -2;pixel_y = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bBn" = (/obj/machinery/computer/area_atmos,/obj/machinery/requests_console{name = "Research Director RC";pixel_x = -2;pixel_y = -30;department = "Research Director's Desk";departmentType = 5;announcementConsole = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bBo" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/window/reinforced/polarized{id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice) +"bBp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bBq" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bBr" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/camera/network/research{c_tag = "Research - Xenobotany";dir = 8;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bBs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/lab) +"bBt" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bBu" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bBv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bBw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/rnd/lab) +"bBx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bBy" = (/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bBz" = (/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 1;frequency = 1480;name = "Confessional Intercom";pixel_x = 25},/obj/structure/bed/chair,/obj/structure/window/reinforced/tinted,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bBA" = (/obj/structure/sign/nosmoking_1{pixel_x = 0;pixel_y = -32},/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBB" = (/obj/machinery/bodyscanner{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBC" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBD" = (/obj/machinery/computer/med_data,/obj/machinery/camera/network/medbay{c_tag = "Medical - Patient Ward";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBE" = (/obj/machinery/door/airlock/glass_medical{id_tag = "Pre-op";name = "Pre/Post Operatory Room"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBF" = (/obj/machinery/button/remote/airlock{id = "Pre-op";name = "Remote Door Control";pixel_y = -26},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBG" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery2) +"bBI" = (/obj/structure/closet/crate/freezer{name = "Fridge"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bBJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bBK" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bBL" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bBM" = (/obj/structure/sign/nosmoking_1{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bBN" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/closet/crate/freezer{name = "Fridge"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2) +"bBO" = (/obj/machinery/door/airlock/command{id_tag = "rdmdoor";name = "Research Director's Meeting Room";req_access = list(30)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bBP" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/window/reinforced/polarized{id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice) +"bBQ" = (/obj/item/weapon/bonesetter,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2) +"bBR" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/medical/surgery2) +"bBS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bBT" = (/obj/machinery/vending/wallmed2{pixel_x = 28},/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bBU" = (/turf/simulated/wall,/area/maintenance/substation/medical) +"bBV" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/obj/structure/window/reinforced/polarized{id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice) +"bBW" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bBX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bBY" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bBZ" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCa" = (/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCb" = (/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCc" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bCd" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) +"bCe" = (/obj/structure/sink{pixel_y = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCf" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCg" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCh" = (/obj/machinery/light,/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bCi" = (/obj/machinery/atmospherics/unary/heater{dir = 2;icon_state = "heater"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bCj" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bCk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/rnd/lab) +"bCl" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bCm" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bCn" = (/obj/machinery/camera/network/research{c_tag = "Research - Research & Development";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/computer/rdconsole,/turf/simulated/floor/tiled/dark,/area/rnd/lab) +"bCo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bCp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/r_n_d/circuit_imprinter,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/lab) +"bCq" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bCr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bCs" = (/turf/simulated/wall,/area/rnd/lab) +"bCt" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light/small,/obj/item/device/radio/intercom{broadcasting = 1;frequency = 1480;name = "Confessional Intercom";pixel_x = 25},/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bCu" = (/obj/machinery/door/morgue{dir = 2;name = "Confession Booth"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/chapel/main) +"bCv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bCw" = (/obj/machinery/door/airlock/glass{name = "Chapel"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/chapel/main) +"bCx" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bCy" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bCz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bCA" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bCB" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bCC" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/central_one) +"bCD" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bCE" = (/obj/item/device/radio/intercom{pixel_x = -28},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bCF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/shutters{dir = 1;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing) +"bCG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{dir = 1;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing) +"bCH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bCI" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/plasticflaps/airtight,/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bCJ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bCK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bCL" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/camera/network/research{c_tag = "Medical - Break Room"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCM" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCN" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bCO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bCP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2) +"bCQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/surgery2) +"bCR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bCS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bCT" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Medical Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bCU" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/item/device/radio/intercom{pixel_x = -27},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bCV" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bCW" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/lab) +"bCX" = (/obj/machinery/vending/cigarette,/obj/structure/sign/nosmoking_1{pixel_x = -32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCY" = (/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bCZ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/lab) +"bDa" = (/obj/machinery/door/airlock/research{name = "Materials";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab) +"bDb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/lab) +"bDc" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/research) +"bDf" = (/obj/machinery/door/airlock/glass{name = "Chapel"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/chapel/main) +"bDg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/research) +"bDh" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main) +"bDi" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDk" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bDl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDm" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDn" = (/turf/simulated/wall/r_wall,/area/outpost/research/chemistry) +"bDo" = (/obj/item/device/radio/intercom{pixel_y = -27},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDp" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 3";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bDs" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bDt" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bDu" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bDv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDw" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDx" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bDy" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bDz" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bDA" = (/turf/simulated/wall,/area/library) +"bDB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library) +"bDC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library) +"bDD" = (/obj/machinery/door/airlock/medical{icon_state = "door_locked";locked = 1;name = "Operating Theatre Two";req_access = list(45)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/tape/engineering{icon_state = "engineering_v"},/obj/machinery/holosign/surgery{id = "OR2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bDE" = (/obj/machinery/door/airlock/glass{name = "Library"},/obj/machinery/door/firedoor,/turf/simulated/floor/carpet,/area/library) +"bDF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back.";name = "Surgery Cleaner"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bDG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2) +"bDH" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bDI" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = -3;pixel_y = 3},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/medical/surgery2) +"bDJ" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2) +"bDK" = (/obj/structure/table/rack,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bDL" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Medbay Subgrid";name_tag = "Medbay Subgrid"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bDM" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Medical"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bDN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bDO" = (/obj/effect/decal/cleanable/dirt,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bDP" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDQ" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDR" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/landmark/start{name = "Lab Assistant"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDS" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/landmark/start{name = "Lab Assistant"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDT" = (/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bDU" = (/obj/machinery/papershredder,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDV" = (/obj/machinery/door/airlock/glass_research{name = "Genetics Laboratory"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bDW" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDX" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bDY" = (/obj/item/device/radio/intercom{pixel_x = 27},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bDZ" = (/obj/machinery/atmospherics/binary/pump,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bEa" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bEb" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bEc" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bEd" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/vials,/obj/item/weapon/reagent_containers/dropper,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEe" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEg" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEh" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEi" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_x = 27},/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEl" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bEm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bEn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bEo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bEp" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 2";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bEq" = (/obj/machinery/door/airlock/glass{name = "Library"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/library) +"bEr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Library Maintenance";req_access = list(12)},/turf/simulated/floor/plating,/area/library) +"bEs" = (/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bEt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{dir = 8;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery2) +"bEu" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/library) +"bEv" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/library) +"bEw" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/library) +"bEx" = (/obj/structure/table/standard,/obj/machinery/button/holosign{id = "OR2";pixel_x = -4;pixel_y = -26},/obj/machinery/light_switch{pixel_x = 4;pixel_y = -26},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2) +"bEy" = (/turf/simulated/floor/carpet,/area/library) +"bEz" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bEA" = (/turf/simulated/floor/wood,/area/library) +"bEB" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bEC" = (/obj/machinery/libraryscanner,/turf/simulated/floor/wood,/area/library) +"bED" = (/obj/machinery/librarycomp{pixel_y = 0},/turf/simulated/floor/wood,/area/library) +"bEE" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Operating Theatre Two";dir = 1;icon_state = "camera"},/obj/item/device/radio/intercom{pixel_y = -26},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"bEF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled/dark,/area/library) +"bEG" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor/tiled/dark,/area/library) +"bEH" = (/obj/structure/sink/kitchen{dir = 8;icon_state = "sink_alt";name = "Surgical sink";pixel_x = 20},/obj/effect/decal/cleanable/dirt,/obj/item/device/assembly/mousetrap,/obj/effect/decal/remains/mouse,/turf/simulated/floor/plating,/area/medical/surgery2) +"bEI" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bEJ" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/sign/electricshock{pixel_x = 32},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bEK" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/light/small,/obj/machinery/camera/network/medbay{c_tag = "Medical - Medical Substation";dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bEL" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bEM" = (/obj/machinery/light/small/emergency{dir = 8},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bEN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bEO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bEP" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bEQ" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve,/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bER" = (/obj/machinery/camera/network/research{c_tag = "Research - Corridor Camera 1"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bES" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora) +"bET" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora) +"bEU" = (/obj/machinery/door/window,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora) +"bEV" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bEW" = (/obj/machinery/chemical_dispenser,/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEX" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEY" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bEZ" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bFa" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFb" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFd" = (/obj/machinery/botany/editor,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bFe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/library) +"bFj" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 0;pixel_y = 32},/turf/simulated/floor/wood,/area/library) +"bFk" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/library) +"bFl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bFm" = (/obj/machinery/light/small{dir = 8},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/library) +"bFn" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance";req_access = list(5)},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgerywing) +"bFo" = (/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/medical) +"bFp" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bFq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bFr" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Librarian"},/turf/simulated/floor/wood,/area/library) +"bFs" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bFt" = (/obj/machinery/vending/coffee,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFu" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFv" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/library) +"bFw" = (/obj/structure/bed/chair{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFx" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve,/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFy" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/floor_decal/corner/mauve,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Research";sortType = "Research"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bFC" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bFD" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFF" = (/obj/machinery/door/airlock/research{name = "Conference Room";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/research) +"bFG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction/yjunction{icon_state = "pipe-y";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/rnd/research) +"bFH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora) +"bFI" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora) +"bFJ" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora) +"bFK" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bFL" = (/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/research) +"bFM" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/research) +"bFN" = (/turf/simulated/wall/r_wall,/area/rnd/misc_lab) +"bFO" = (/turf/simulated/wall,/area/outpost/research/chemistry) +"bFP" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "xenobot_inj";pixel_y = 1;use_power = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora) +"bFQ" = (/obj/machinery/botany/extractor,/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"bFR" = (/turf/simulated/wall,/area/crew_quarters/sleep/main) +"bFS" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/camera/network/research{c_tag = "Research - Chemistry Laboratory";dir = 1;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bFT" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bFU" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/library) +"bFV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/library) +"bFW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bFX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bFY" = (/turf/simulated/floor/tiled/dark,/area/library) +"bFZ" = (/obj/structure/cult/tome,/obj/item/clothing/under/suit_jacket/red,/turf/simulated/floor/tiled/dark,/area/library) +"bGa" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bGb" = (/obj/structure/table/standard,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bGc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bGd" = (/obj/machinery/light/small/emergency,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGe" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/wood,/area/library) +"bGf" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/library) +"bGg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/research) +"bGh" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/research) +"bGi" = (/turf/simulated/wall/r_wall,/area/medical/genetics) +"bGj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/genetics) +"bGk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/library) +"bGl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/genetics) +"bGm" = (/obj/structure/table/woodentable,/obj/machinery/door/window/westright{dir = 8;icon_state = "right";name = "Library Desk Door"},/turf/simulated/floor/wood,/area/library) +"bGn" = (/obj/machinery/door/morgue{dir = 2;name = "Private Study";req_access = list(37)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/library) +"bGo" = (/obj/machinery/atmospherics/unary/freezer,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bGp" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/library) +"bGq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bGr" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/library) +"bGs" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/camera,/obj/item/device/eftpos{eftpos_name = "Library EFTPOS scanner"},/obj/machinery/camera/network/civilian_west{c_tag = "Library - Backroom";dir = 8},/turf/simulated/floor/tiled/dark,/area/library) +"bGt" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/junction/yjunction{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGu" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGv" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGw" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGx" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGy" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bGz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main) +"bGA" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bGB" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bGC" = (/turf/simulated/wall,/area/hallway/primary/aft) +"bGD" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/library) +"bGE" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bGF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/library) +"bGG" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bGH" = (/obj/structure/table/woodentable,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/structure/window/reinforced,/turf/simulated/floor/wood,/area/library) +"bGI" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bGJ" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGK" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bGL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGM" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"bGN" = (/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room";req_one_access = list(7,29)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry) +"bGO" = (/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGP" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGQ" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/central_one) +"bGR" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"bGS" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1;pixel_y = 5},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/wood,/area/library) +"bGT" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/blue{pixel_x = 5;pixel_y = 5},/obj/structure/window/reinforced{dir = 8},/obj/machinery/recharger,/turf/simulated/floor/wood,/area/library) +"bGU" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Library - Fore Camera";dir = 8},/turf/simulated/floor/wood,/area/library) +"bGV" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen/invisible,/turf/simulated/floor/tiled/dark,/area/library) +"bGW" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGX" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Maintance";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bGZ" = (/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bHa" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bHb" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bHc" = (/obj/machinery/door/airlock/maintenance{name = "Research Division Maintenance";req_access = list(47);req_one_access = newlist()},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/sleep/research) +"bHd" = (/obj/machinery/door/airlock/glass_research{name = "Genetics Lab";req_access = list(9)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bHe" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bHf" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bHg" = (/obj/machinery/atmospherics/unary/heater,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bHh" = (/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHi" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHj" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main) +"bHl" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bHm" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bHn" = (/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/library) +"bHp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/library) +"bHq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/wood,/area/library) +"bHr" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/research{c_tag = "Research - Miscellaneous Lab"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library) +"bHt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHu" = (/obj/machinery/librarypubliccomp,/turf/simulated/floor/wood,/area/library) +"bHv" = (/obj/structure/closet/bombcloset,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHw" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHx" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHy" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHz" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHA" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bHB" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHC" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHD" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHE" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHF" = (/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bHG" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1;pixel_y = 5},/turf/simulated/floor/wood,/area/library) +"bHH" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1;pixel_y = 5},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/library) +"bHI" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bHJ" = (/obj/machinery/door/window/westright{name = "Library Desk Door";icon_state = "right";dir = 2},/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/wood,/area/library) +"bHK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bHL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bHM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bHN" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop{pixel_x = 3;pixel_y = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHO" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bHP" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bHQ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bHR" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bHS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHU" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bHV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bHW" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bHX" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bHY" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/disks,/obj/item/device/flashlight/pen,/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bHZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bIa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bIb" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/disks,/obj/item/device/flashlight/pen,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bIc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bId" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/wood,/area/library) +"bIe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/wood,/area/library) +"bIf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/library) +"bIg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/library) +"bIh" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/library) +"bIi" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bIj" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bIk" = (/obj/structure/curtain/medical,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bIl" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bIm" = (/obj/structure/curtain/medical,/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bIn" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIo" = (/obj/structure/girder,/obj/item/stack/material/steel,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIp" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair/wheelchair,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIr" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIs" = (/obj/structure/window/reinforced{dir = 1},/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIt" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bIu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bIv" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bIw" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bIx" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bIy" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bIz" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bIA" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/library) +"bIB" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bIC" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/library) +"bID" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bIE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bIF" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIG" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bII" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/bed/chair/wheelchair,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bIL" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bIM" = (/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main) +"bIN" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/camera/network/research{c_tag = "Research - Genetics Laboratory";dir = 8;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bIO" = (/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bIP" = (/obj/machinery/camera/network/research{c_tag = "Research - Miscellaneous Gas Controller";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bIQ" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/wood,/area/library) +"bIR" = (/obj/structure/table/woodentable,/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/library) +"bIS" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library) +"bIT" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor/wood,/area/library) +"bIU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library) +"bIV" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bIW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library) +"bIX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/iv_drip,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bIY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bIZ" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJa" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bJb" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/iv_drip,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bJc" = (/obj/item/stack/material/steel,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJd" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJe" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJf" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJg" = (/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher{pixel_x = 8},/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJh" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJi" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJj" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJk" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bJl" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bJm" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main) +"bJn" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bJo" = (/obj/machinery/door/airlock{id_tag = "Dormitory 2";name = "Dorm"},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bJp" = (/obj/structure/sign/directions/engineering{dir = 1;icon_state = "direction_eng";pixel_x = 32;pixel_y = 14},/obj/structure/sign/directions/medical{dir = 1;icon_state = "direction_med";pixel_x = 32;pixel_y = 6},/obj/structure/sign/directions/science{dir = 1;icon_state = "direction_sci";pixel_x = 32;pixel_y = -2},/obj/structure/sign/directions/security{dir = 1;icon_state = "direction_sec";pixel_x = 32;pixel_y = -12},/obj/structure/sign/directions/evac{dir = 8;icon_state = "direction_evac";pixel_x = 32;pixel_y = 24},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bJq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bJr" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJs" = (/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJt" = (/turf/simulated/wall,/area/rnd/misc_lab) +"bJu" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall/r_wall,/area/rnd/misc_lab) +"bJv" = (/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bJw" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bJx" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bJy" = (/obj/machinery/newscaster{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bJz" = (/obj/structure/table/woodentable,/obj/item/weapon/deck/tarot,/turf/simulated/floor/wood,/area/library) +"bJA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library) +"bJB" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bJC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library) +"bJD" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bJE" = (/obj/machinery/computer/scan_consolenew,/obj/item/device/radio/intercom{pixel_x = -27},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bJF" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/medbay) +"bJG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bJH" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bJI" = (/obj/machinery/computer/scan_consolenew,/obj/item/device/radio/intercom{pixel_x = 27},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bJJ" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bJK" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bJL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/neaera,/turf/simulated/floor/plating,/area/medical/genetics) +"bJM" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bJN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bJO" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/button/remote/blast_door{desc = "It controls Misc. Science's vacuum inlet.";id = "MiscPump";name = "Misc. Science Vacuum Pump";pixel_y = -28},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bJP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/westleft{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/monkey,/turf/simulated/floor/plating,/area/medical/genetics) +"bJQ" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJR" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJT" = (/obj/item/toy/figure,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bJU" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJV" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJW" = (/obj/structure/closet/bombcloset,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bJX" = (/obj/machinery/hologram/holopad,/obj/machinery/light/small,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bJY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bJZ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/camera/network/civilian_west{c_tag = "Dormitories - Main Level";dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bKa" = (/obj/item/device/radio/intercom{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bKb" = (/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/library) +"bKc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bKd" = (/obj/machinery/light_switch{pixel_x = 22;pixel_y = 10},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bKe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bKf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bKg" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bKh" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bKi" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bKj" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bKk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/farwa,/turf/simulated/floor/plating,/area/medical/genetics) +"bKl" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bKm" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 10},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bKn" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bKo" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bKp" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bKq" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bKr" = (/turf/simulated/wall,/area/storage/emergency3) +"bKs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bKt" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bKu" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library) +"bKv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library) +"bKw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/library) +"bKx" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bKy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library) +"bKz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library) +"bKA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bKB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bKC" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bKD" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bKE" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bKF" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bKG" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northright{req_one_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/stok,/turf/simulated/floor/plating,/area/medical/genetics) +"bKH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Autopsy Room";req_access = list(47)},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bKI" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northleft{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/monkey,/turf/simulated/floor/plating,/area/medical/genetics) +"bKJ" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bKK" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bKL" = (/obj/machinery/door/window/southright{heat_proof = 1;name = "Test Chamber";req_one_access = list(7,29)},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bKM" = (/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bKN" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bKO" = (/obj/machinery/light/small/emergency,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bKP" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/storage/emergency3) +"bKQ" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency3) +"bKR" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency3) +"bKS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/library) +"bKT" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bKU" = (/obj/machinery/lapvend,/turf/simulated/floor/wood,/area/library) +"bKV" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/library) +"bKW" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "civilian_eva_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bKX" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/library) +"bKY" = (/obj/machinery/papershredder,/turf/simulated/floor/carpet,/area/library) +"bKZ" = (/obj/machinery/bookbinder{pixel_y = 0},/turf/simulated/floor/wood,/area/library) +"bLa" = (/obj/machinery/photocopier,/obj/machinery/light,/turf/simulated/floor/wood,/area/library) +"bLb" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bLc" = (/turf/simulated/wall,/area/maintenance/library) +"bLd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bLe" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bLf" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bLg" = (/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bLh" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLi" = (/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/standard,/obj/machinery/camera/network/research{c_tag = "Research - Autopsy"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bLj" = (/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bLk" = (/obj/item/stack/material/steel{amount = -5;description_info = "A non-stack of non-metal. You're not sure how it exists or why it's stable.";name = "Non-sheet of non-steel";origin_tech = "materials=-1"},/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bLl" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLm" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main) +"bLn" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Aft Corridor - Camera 3";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bLo" = (/obj/random/toolbox,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLp" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "civilian_eva_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/medbay) +"bLq" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bLr" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bLs" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLt" = (/obj/item/weapon/wrench,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLu" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLv" = (/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 8},/obj/structure/cable/green{icon_state = "12-0"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bLw" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLx" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bLy" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/maintenance/research_port) +"bLz" = (/obj/machinery/atmospherics/unary/vent_pump/siphon{dir = 1},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bLA" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bLB" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bLC" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency3) +"bLD" = (/obj/machinery/space_heater,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency3) +"bLE" = (/obj/machinery/door/window/southright{dir = 1;heat_proof = 1;name = "Test Chamber";req_one_access = list(7,29)},/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bLF" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bLG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bLH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bLI" = (/turf/simulated/wall,/area/crew_quarters/kitchen) +"bLJ" = (/turf/simulated/floor/plating,/area/maintenance/library) +"bLK" = (/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/carpet,/area/library) +"bLL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"bLM" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "civilian_eva_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "civilian_eva_pump";tag_chamber_sensor = "civilian_eva_sensor";tag_exterior_door = "civilian_eva_outer";tag_interior_door = "civilian_eva_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "civilian_eva_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "civilian_eva_pump"},/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bLN" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLO" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLP" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light,/obj/machinery/requests_console{department = "Genetics Lab";departmentType = 2;name = "Requests Console";pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics) +"bLR" = (/obj/item/stack/tile/floor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bLT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bLU" = (/obj/structure/barricade,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLV" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLW" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/retractor,/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab) +"bLX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bLY" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/closet/chefcloset,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bLZ" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bMa" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMb" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/fryer,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMc" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/mixer/candy,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bMe" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/packageWrap,/obj/item/device/radio/intercom{frequency = 1449;pixel_x = 0;pixel_y = -27},/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Library - Port Camera";dir = 1},/turf/simulated/floor/wood,/area/library) +"bMf" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/plasticflaps/airtight,/obj/machinery/door/airlock/freezer_maint{req_access = list(28)},/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bMg" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/machinery/camera/network/civilian_west{c_tag = "Library - Starboard Camera";dir = 1},/turf/simulated/floor/wood,/area/library) +"bMh" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "civilian_eva_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/turf/simulated/floor/plating,/area/maintenance/medbay) +"bMi" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/library) +"bMj" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bMk" = (/obj/random/junk,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bMl" = (/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bMm" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMn" = (/obj/machinery/door/airlock/maintenance{name = "Miscellaneous Reseach Maintenance";req_one_access = list(7,29)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bMo" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMp" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/plating,/area/storage/emergency3) +"bMq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/storage/emergency3) +"bMr" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bMs" = (/obj/machinery/door/airlock{name = "Central Emergency Storage";req_one_access = list(12,47)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/emergency3) +"bMt" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bMv" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Library Maintenance";req_access = list(12)},/turf/simulated/floor/plating,/area/library) +"bMw" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "civilian_eva_airlock";name = "exterior access button";pixel_x = 27;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bMx" = (/obj/structure/table/standard,/obj/item/clothing/ears/earmuffs{pixel_x = 4;pixel_y = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bMy" = (/obj/structure/table/standard,/obj/item/clothing/glasses/sunglasses{pixel_x = 4;pixel_y = 4},/obj/item/clothing/glasses/sunglasses{pixel_x = -2;pixel_y = -2},/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMz" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMA" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library) +"bMB" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/library) +"bMC" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bMD" = (/obj/structure/table/steel_reinforced,/obj/item/stack/tile/floor,/obj/random/toolbox,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bME" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMF" = (/obj/structure/table/steel_reinforced,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMH" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMI" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bMK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bML" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/aft) +"bMM" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency3) +"bMN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bMO" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/landmark/start{name = "Chef"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMP" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bMQ" = (/obj/structure/table/marble,/obj/item/weapon/material/kitchen/rollingpin,/obj/item/weapon/material/kitchen/utensil/knife,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bMS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMT" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bMU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"bMV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/sortjunction/flipped{dir = 4;name = "Library";sortType = "Library"},/turf/simulated/floor/plating,/area/maintenance/library) +"bMW" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bMX" = (/obj/machinery/camera/network/research{c_tag = "Research - Miscellaneous Testing Chamber";dir = 1;network = list("Research","Toxins Test Area")},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/rnd/misc_lab) +"bMY" = (/obj/structure/barricade,/turf/simulated/floor/plating,/area/maintenance/library) +"bMZ" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bNa" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library) +"bNb" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bNc" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bNd" = (/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bNe" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bNf" = (/obj/structure/table/rack,/obj/random/loot,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/research_port) +"bNg" = (/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/maintenance/research_port) +"bNh" = (/turf/simulated/wall,/area/maintenance/cargo) +"bNi" = (/obj/structure/noticeboard{pixel_y = 32},/obj/structure/table/marble,/obj/machinery/microwave{desc = "Vaguely smells of burnt casserole.";pixel_y = 5},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNj" = (/turf/simulated/wall,/area/hydroponics) +"bNk" = (/obj/machinery/requests_console{department = "Kitchen";pixel_x = 0;pixel_y = 28},/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/mixer/cereal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNl" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2";freq = 1400;location = "Kitchen"},/obj/machinery/door/firedoor{dir = 2},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/crew_quarters/kitchen) +"bNm" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1;name = "Kitchen";sortType = "Kitchen"},/turf/simulated/floor/plating,/area/maintenance/library) +"bNn" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bNq" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bNr" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bNs" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab) +"bNt" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/research_port) +"bNu" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bNv" = (/obj/item/weapon/paper,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bNw" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bNx" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bNy" = (/obj/machinery/smartfridge{density = 0;pixel_x = -32},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNz" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics) +"bNA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics) +"bNB" = (/obj/machinery/door/window/southleft{base_state = "left";dir = 2;icon_state = "left";name = "Kitchen Delivery";req_access = list(28)},/turf/simulated/floor/tiled/dark,/area/crew_quarters/kitchen) +"bNC" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bND" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bNE" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/alarm/freezer{dir = 8;icon_state = "alarm0";pixel_x = 28;tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bNF" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bNG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bNH" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bNI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bNJ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bNK" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bNL" = (/obj/structure/table/marble,/obj/item/clothing/gloves/latex,/obj/item/glass_jar,/obj/item/device/eftpos{eftpos_name = "Kitchen EFTPOS scanner"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNM" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "kitchen";layer = 3.3;name = "Kitchen Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/kitchen) +"bNN" = (/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bNO" = (/obj/structure/table/marble,/obj/item/weapon/pen,/obj/item/weapon/packageWrap,/obj/item/weapon/paper_bin{pixel_x = -2;pixel_y = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bNQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bNR" = (/obj/machinery/door/airlock/freezer{name = "Kitchen cold room";req_access = list(28)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled,/area/crew_quarters/kitchen) +"bNS" = (/turf/simulated/floor/wood,/area/maintenance/library) +"bNT" = (/obj/random/junk,/turf/simulated/floor/carpet,/area/maintenance/library) +"bNU" = (/turf/simulated/floor/carpet,/area/maintenance/library) +"bNV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bNW" = (/obj/item/weapon/bedsheet/clown,/obj/structure/bed,/turf/simulated/floor/wood,/area/maintenance/library) +"bNX" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bNY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bNZ" = (/obj/structure/target_stake,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bOa" = (/obj/structure/target_stake,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bOb" = (/turf/simulated/floor/tiled,/area/maintenance/research_port) +"bOc" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bOd" = (/obj/item/weapon/stool,/obj/item/weapon/paper,/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bOe" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bOf" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bOg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bOh" = (/obj/machinery/light/small{dir = 4},/obj/machinery/icecream_vat,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bOi" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hydroponics) +"bOj" = (/turf/simulated/floor/tiled,/area/hydroponics) +"bOk" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bOl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bOm" = (/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance";req_access = list(35)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bOn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green,/turf/simulated/floor/tiled,/area/hydroponics) +"bOo" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/hydroponics) +"bOp" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bOq" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bOr" = (/obj/structure/extinguisher_cabinet{pixel_x = 32},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/sink/kitchen{dir = 8;icon_state = "sink_alt";pixel_x = 20},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bOs" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/reagentgrinder{pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bOt" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bOu" = (/obj/structure/closet/secure_closet/freezer/kitchen,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bOv" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/library) +"bOw" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/wood,/area/maintenance/library) +"bOx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/civilian_west{c_tag = "Kitchen - Cold Storage";dir = 4},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bOy" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/maintenance/research_port) +"bOz" = (/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bOA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bOB" = (/obj/machinery/gibber,/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bOC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hydroponics) +"bOD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hydroponics) +"bOE" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2";freq = 1400;location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/hydroponics) +"bOF" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;name = "Hydroponics";sortType = "Hydroponics"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bOG" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/dark,/area/hydroponics) +"bOH" = (/obj/machinery/seed_extractor,/obj/machinery/light,/turf/simulated/floor/tiled,/area/hydroponics) +"bOI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bOJ" = (/obj/machinery/door/window/eastright{dir = 4;icon_state = "right";name = "Hydroponics Delivery";req_access = list(35)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/hydroponics) +"bOK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) +"bOL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hydroponics) +"bOM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bON" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bOO" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Supplies";req_access = list(35,28)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics) +"bOP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics) +"bOQ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/library) +"bOR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics) +"bOS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) +"bOT" = (/obj/effect/landmark/costume/pirate,/turf/simulated/floor/wood,/area/maintenance/library) +"bOU" = (/obj/random/junk,/turf/simulated/floor/wood,/area/maintenance/library) +"bOV" = (/obj/item/weapon/bedsheet/mime,/obj/structure/bed,/turf/simulated/floor/wood,/area/maintenance/library) +"bOW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bOX" = (/obj/machinery/door/airlock/glass{name = "Hydroponics";req_access = list(35)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hydroponics) +"bOY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bOZ" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled,/area/hydroponics) +"bPa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) +"bPb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hydroponics) +"bPc" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -4;pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bPd" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo";pixel_x = -5},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Kitchen - Food Preparation";dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bPe" = (/obj/structure/kitchenspike,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bPf" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bPg" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen) +"bPh" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library) +"bPi" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/library) +"bPj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bPk" = (/obj/item/clothing/mask/gas/clown_hat,/obj/item/clothing/shoes/clown_shoes,/obj/item/clothing/under/rank/clown,/obj/item/weapon/storage/backpack/clown,/obj/item/toy/figure/clown,/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/turf/simulated/floor/wood,/area/maintenance/library) +"bPl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bPm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bPn" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bPo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bPp" = (/obj/structure/window/reinforced/polarized{id = "theatre"},/turf/simulated/floor/wood,/area/maintenance/library) +"bPq" = (/obj/structure/window/reinforced/polarized{id = "theatre"},/turf/simulated/floor/plating,/area/maintenance/library) +"bPr" = (/obj/effect/landmark/costume/gladiator,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library) +"bPs" = (/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library) +"bPt" = (/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/research_port) +"bPu" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bPv" = (/obj/structure/closet/secure_closet/hydroponics,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) +"bPw" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bPx" = (/obj/machinery/vending/hydroseeds,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) +"bPy" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics) +"bPz" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics) +"bPA" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bPB" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/hydroponics) +"bPC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/grass,/area/hydroponics) +"bPD" = (/obj/machinery/door/airlock/glass{name = "Hydroponics";req_access = list(35)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hydroponics) +"bPE" = (/turf/simulated/wall,/area/crew_quarters/bar) +"bPF" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bPG" = (/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bPH" = (/obj/structure/table/marble,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bPI" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/effect/landmark/costume/imperium_monk,/turf/simulated/floor/wood,/area/maintenance/library) +"bPJ" = (/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bPK" = (/obj/structure/device/piano,/turf/simulated/floor/wood,/area/maintenance/library) +"bPL" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/maintenance/library) +"bPM" = (/obj/effect/landmark/costume/chicken,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library) +"bPN" = (/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bPO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/remains/xeno,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bPP" = (/obj/structure/table/standard,/obj/machinery/button/remote/airlock{id = "maint_dungeon";pixel_x = 4;pixel_y = 8},/obj/machinery/button/windowtint{id = "maint_cell";pixel_x = -4;pixel_y = 8},/obj/machinery/light_switch{pixel_x = -4},/obj/item/weapon/paper,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port) +"bPQ" = (/obj/structure/flora/ausbushes/brflowers,/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics) +"bPR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/grass,/area/hydroponics) +"bPS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics) +"bPT" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics) +"bPU" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/material/hatchet,/obj/item/weapon/material/minihoe,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Hydroponics - Produce Storage";dir = 4},/obj/machinery/smartfridge{density = 0;pixel_x = -32},/turf/simulated/floor/tiled,/area/hydroponics) +"bPV" = (/obj/machinery/vending/hydronutrients,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) +"bPW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) +"bPX" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bPY" = (/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Aft Corridor - Camera 2";dir = 1},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bPZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bQa" = (/obj/machinery/button/remote/blast_door{id = "kitchen";name = "Kitchen Shutters Control";pixel_x = -24;pixel_y = -1;req_access = list(28)},/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/disposal{name = "disposal unit"},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bQb" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bQc" = (/obj/structure/table/marble,/obj/item/clothing/head/cakehat,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bQd" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bQe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bQf" = (/obj/machinery/button/windowtint{id = "theatre";pixel_y = -26},/turf/simulated/floor/plating,/area/maintenance/library) +"bQg" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/item/toy/figure/mime,/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/turf/simulated/floor/wood,/area/maintenance/library) +"bQh" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet,/area/maintenance/library) +"bQi" = (/obj/effect/landmark/costume/commie,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library) +"bQj" = (/obj/structure/toilet{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bQk" = (/obj/machinery/door/airlock/research{icon_state = "door_locked";id_tag = "maint_dungeon";locked = 1;name = "Isolation Cell"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bQl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/grass,/area/hydroponics) +"bQm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics) +"bQn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hydroponics) +"bQo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hydroponics) +"bQp" = (/obj/machinery/biogenerator,/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/hydroponics) +"bQq" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/landmark/start{name = "Gardener"},/turf/simulated/floor/tiled,/area/hydroponics) +"bQr" = (/obj/machinery/seed_extractor,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics) +"bQs" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 8;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 4;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 1;id = "maint_cell"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bQt" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 8;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 4;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 1;id = "maint_cell"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bQu" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bQv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics) +"bQw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bQx" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bQy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics) +"bQz" = (/obj/effect/landmark/costume/plaguedoctor,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library) +"bQA" = (/obj/effect/landmark/costume/elpresidente,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library) +"bQB" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/research_port) +"bQC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics) +"bQD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/grass,/area/hydroponics) +"bQE" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics) +"bQF" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Supplies";req_access = list(35)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics) +"bQG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hydroponics) +"bQH" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hydroponics) +"bQI" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/landmark/start{name = "Gardener"},/turf/simulated/floor/tiled,/area/hydroponics) +"bQJ" = (/obj/machinery/vending/hydroseeds,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) +"bQK" = (/obj/machinery/door/airlock/glass{name = "Diner"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/bar) +"bQL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_west{c_tag = "Hydroponics - Greenhouse";dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) +"bQM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bQN" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hydroponics) +"bQO" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hydroponics) +"bQP" = (/obj/machinery/door/airlock/glass{name = "Kitchen";req_access = list(28)},/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bQQ" = (/obj/machinery/door/airlock/glass{name = "Kitchen";req_access = list(28)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bQR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/grass,/area/hydroponics) +"bQS" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bQT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hydroponics) +"bQU" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green,/turf/simulated/floor/tiled,/area/hydroponics) +"bQV" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Pasture";req_access = list(35,28)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hydroponics) +"bQW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bQX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bQY" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bQZ" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bRa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRb" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bRc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/hydroponics) +"bRd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics) +"bRf" = (/turf/simulated/wall,/area/quartermaster/office) +"bRg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics) +"bRh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics) +"bRi" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/hydroponics) +"bRj" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) +"bRk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics) +"bRl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bRm" = (/obj/structure/table/marble,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bRn" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/pottedplant/random,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRo" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRp" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRq" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/wood,/area/maintenance/library) +"bRr" = (/obj/structure/bed,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port) +"bRs" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bRt" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) +"bRu" = (/obj/item/weapon/stool/padded,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Kitchen Counter";dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRw" = (/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Dance Floor";dir = 8},/obj/machinery/floor_light/dance/alternate,/turf/simulated/floor/light,/area/crew_quarters/bar) +"bRx" = (/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station) +"bRy" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bRz" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Pasture";req_access = list(35)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hydroponics) +"bRA" = (/obj/machinery/autolathe,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bRB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bRC" = (/obj/machinery/newscaster{pixel_x = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bRD" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRE" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bRF" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/hydroponics) +"bRG" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/crew_quarters/bar) +"bRH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/library) +"bRI" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bRJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bRK" = (/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bRL" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bRM" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bRN" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bRO" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bRP" = (/obj/machinery/camera/network/civilian_west{c_tag = "Hydroponics - Animal Pen";dir = 1},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/grass,/area/hydroponics) +"bRQ" = (/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bRR" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hydroponics) +"bRS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bRT" = (/turf/simulated/floor/tiled,/area/quartermaster/office) +"bRU" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Main Lobby"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bRV" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bRW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bRX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/crew_quarters/bar) +"bRY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/glass{name = "Diner"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/bar) +"bRZ" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/bar_alc/full,/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSc" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSe" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSf" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bSg" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/quartermaster/office) +"bSh" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/hydroponics) +"bSi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSj" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics) +"bSl" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics) +"bSo" = (/obj/machinery/camera/network/civilian_west{c_tag = "Aft Corridor - Camera 1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bSp" = (/obj/machinery/atm{pixel_x = 32},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bSq" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSr" = (/obj/machinery/button/windowtint{id = "finedining";name = "Observation Deck Window Tint";pixel_x = -4;pixel_y = 26},/obj/machinery/button/remote/blast_door{id = "bar";name = "Bar Shutters";pixel_y = 36},/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Counter"},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSu" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSv" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSx" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bSy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"bSA" = (/obj/item/weapon/bananapeel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSD" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Bar";sortType = "Bar"},/turf/simulated/floor/plating,/area/maintenance/library) +"bSE" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bSF" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/library) +"bSG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bSH" = (/obj/machinery/door/window/eastright,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bSI" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSJ" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/office) +"bSL" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSM" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSN" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2";freq = 1400;location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/dark,/area/crew_quarters/bar) +"bSO" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance";req_access = list(25)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/bar) +"bSP" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library) +"bSQ" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSR" = (/obj/machinery/light_switch{pixel_x = 0;pixel_y = 27},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSS" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = 8},/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = -8},/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = -4},/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = 4},/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bST" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSV" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bSW" = (/obj/machinery/computer/ordercomp,/obj/machinery/atm{pixel_y = 32},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bSX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/plating,/area/quartermaster/office) +"bSY" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bSZ" = (/mob/living/carbon/human/monkey/punpun,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTa" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTb" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTc" = (/turf/simulated/wall,/area/maintenance/substation/civilian_west) +"bTd" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTg" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTh" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/office) +"bTj" = (/obj/machinery/smartfridge/drinks,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTk" = (/obj/machinery/door/window/southleft{base_state = "left";dir = 2;icon_state = "left";name = "Bar Delivery";req_access = list(25)},/turf/simulated/floor/tiled/dark,/area/crew_quarters/bar) +"bTl" = (/obj/structure/closet/gmcloset{icon_closed = "black";icon_state = "black";name = "formal wardrobe"},/obj/item/device/eftpos{eftpos_name = "Bar EFTPOS scanner"},/obj/item/glass_jar,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTm" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = -8},/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = 8},/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = -4},/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = 4},/obj/item/weapon/material/kitchen/utensil/knife/plastic,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTn" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/paper{info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest.";name = "Shotgun permit"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTo" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTp" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTq" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTr" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/lighter/zippo,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTs" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk";req_access = list(50)},/obj/structure/noticeboard{pixel_y = 27},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTt" = (/obj/structure/curtain/black{pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTu" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTv" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bTw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/plating,/area/quartermaster/office) +"bTx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian West Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bTz" = (/obj/turbolift_map_holder/aurora/cargo,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station) +"bTA" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bTB" = (/obj/structure/window/reinforced,/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bTC" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTD" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2";dir = 2},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTF" = (/obj/machinery/door/airlock{name = "Bar Backroom";req_access = list(25)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/bar) +"bTG" = (/obj/structure/table/woodentable,/obj/machinery/reagentgrinder,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/packageWrap,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Backroom";dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTH" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTI" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTJ" = (/obj/structure/window/reinforced/polarized{id = "dancedance"},/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = -8},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 8},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = -4},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 4},/obj/item/weapon/material/kitchen/utensil/spoon,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"bTL" = (/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4;pixel_y = -2},/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTM" = (/obj/structure/table/reinforced,/obj/item/weapon/flame/lighter/zippo,/obj/structure/window/reinforced/polarized{id = "finedining"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bTR" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTS" = (/obj/machinery/papershredder,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/office) +"bTU" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bTV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bTW" = (/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bTX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bTY" = (/obj/structure/reagent_dispensers/beerkeg,/obj/machinery/requests_console{announcementConsole = 0;department = "Bar";departmentType = 2;name = "Bar RC";pixel_x = 30;pixel_y = 0},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bTZ" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'";icon_state = "monkey_painting";name = "Mr. Deempisi portrait";pixel_x = -28;pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUa" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bUb" = (/obj/structure/bed/chair/comfy/black,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUc" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUd" = (/obj/machinery/vending/cigarette,/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Smoking Lounge"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUe" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUg" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bUh" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUi" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUj" = (/obj/structure/sign/poster{pixel_x = 0;pixel_y = 0},/turf/simulated/wall,/area/crew_quarters/bar) +"bUk" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 8},/obj/structure/curtain/black{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUl" = (/turf/simulated/wall,/area/janitor) +"bUm" = (/obj/item/weapon/bedsheet/brown,/obj/structure/bed,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUn" = (/obj/machinery/door/airlock/engineering{name = "Civilian West Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bUo" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bUp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bUr" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUs" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"bUt" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library) +"bUu" = (/turf/simulated/wall,/area/quartermaster/storage) +"bUv" = (/obj/item/weapon/folder/yellow,/obj/item/device/eftpos{eftpos_name = "Cargo Bay EFTPOS scanner"},/obj/structure/table/standard{name = "plastic table frame"},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Main Desk";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/item/device/multitool,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUx" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{id_tag = "cargodoor";name = "Cargo Office";req_access = list(50)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUz" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"bUA" = (/obj/machinery/door/window{dir = 2;name = "Bar";req_access = list(25)},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bUB" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/paper_bin,/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bUC" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/barman_recipes,/obj/item/clothing/head/that{pixel_x = 4;pixel_y = 6},/obj/item/weapon/screwdriver,/obj/structure/window/reinforced/polarized{id = "finedining"},/turf/simulated/floor/lino,/area/crew_quarters/bar) +"bUD" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/bar) +"bUE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/bar) +"bUF" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/bar) +"bUG" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Civilian West"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bUH" = (/obj/structure/bed/chair/comfy/black{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"bUI" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"bUJ" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"bUK" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUL" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable,/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/civilian_west{c_tag = "Civilian - Civilian Substation";dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bUM" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUN" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUO" = (/obj/item/weapon/storage/belt/utility,/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = -30;pixel_y = 0},/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUP" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/cobweb,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bUQ" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -28},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bUR" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bUS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bUT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bUU" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUV" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUW" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUX" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "finedining"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bUY" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/library) +"bUZ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/library) +"bVa" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/library) +"bVb" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian West";name_tag = "Civilian West Subgrid"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bVc" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west) +"bVd" = (/obj/machinery/newscaster{pixel_x = -27;pixel_y = 1},/obj/item/weapon/tape_roll,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6;pixel_y = -5},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/brown/full,/obj/item/stack/material/glass{pixel_x = 3;pixel_y = 3},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVe" = (/obj/structure/table/woodentable,/obj/machinery/light/small,/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"bVf" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 0},/obj/effect/floor_decal/corner/brown,/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/folder/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVg" = (/obj/machinery/door/airlock{name = "Custodial Closet";req_access = list(26)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVh" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bVi" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bVj" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bVk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance";req_access = list(12)},/turf/simulated/floor/plating,/area/crew_quarters/bar) +"bVl" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bVm" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Civilian West Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/quartermaster/storage) +"bVn" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVp" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVq" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400;home_destination = "QM #1";suffix = "#1"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVr" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/alarm{pixel_y = 22},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVs" = (/obj/structure/closet/jcloset,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVt" = (/obj/machinery/newscaster{pixel_y = 30},/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVu" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/camera/network/security{c_tag = "Maintenance - Janitorial Office"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVv" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVx" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "finedining"},/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bVy" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/library) +"bVz" = (/obj/structure/closet/crate/medical,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVA" = (/turf/simulated/floor/tiled,/area/maintenance/library) +"bVB" = (/obj/structure/closet/crate/internals,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVC" = (/obj/structure/closet/crate,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVG" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVH" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVI" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVJ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2";suffix = "#2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVK" = (/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVL" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVM" = (/obj/structure/noticeboard{pixel_y = -27},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bVN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVP" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bVR" = (/obj/structure/table/woodentable,/obj/machinery/light/small,/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Diner Seating";dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"bVS" = (/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVW" = (/turf/simulated/wall,/area/outpost/mining_main/refinery) +"bVX" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVY" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bVZ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/disposal) +"bWe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWf" = (/obj/machinery/door/blast/shutters{dir = 2;id = "qm_warehouse";name = "Warehouse Shutters"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWh" = (/obj/structure/boulder,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bWi" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate/plastic,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWj" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bWl" = (/obj/machinery/door/airlock/glass_mining{name = "Equipment storage";req_access = list(65)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWm" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bWn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bWo" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #3"},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - MULE Storage";dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bWp" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial";departmentType = 1;pixel_y = -29},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bWq" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/steel,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bWr" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bWs" = (/obj/machinery/floor_light/dance/alternate,/turf/simulated/floor/light,/area/crew_quarters/bar) +"bWt" = (/obj/structure/janitorialcart,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bWu" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bWv" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bWw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/disposal) +"bWx" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor) +"bWy" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/library) +"bWz" = (/obj/machinery/crusher_base,/turf/simulated/floor/reinforced,/area/maintenance/disposal) +"bWA" = (/turf/simulated/wall/r_wall,/area/maintenance/disposal) +"bWB" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/disposal) +"bWC" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/library) +"bWD" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/library) +"bWE" = (/obj/machinery/button/remote/blast_door{id = "qm_warehouse";name = "Warehouse Door Control";pixel_x = 24;pixel_y = 0;req_access = list(31)},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWF" = (/obj/machinery/button/remote/blast_door{id = "qm_warehouse";name = "Warehouse Door Control";pixel_x = -24;pixel_y = 0;req_access = list(31)},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWH" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bWJ" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWK" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery) +"bWL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bWM" = (/obj/machinery/floor_light/dance,/turf/simulated/floor/light,/area/crew_quarters/bar) +"bWN" = (/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Camera 1";dir = 1},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bWO" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/library) +"bWP" = (/turf/simulated/wall,/area/maintenance/disposal) +"bWQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bWR" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office) +"bWS" = (/obj/machinery/light/small/emergency{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bWT" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #4"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office) +"bWU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal) +"bWV" = (/obj/random/junk,/turf/simulated/floor/reinforced,/area/maintenance/disposal) +"bWW" = (/turf/simulated/floor/reinforced,/area/maintenance/disposal) +"bWX" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/maintenance/disposal) +"bWY" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bWZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bXa" = (/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance";req_access = list(26)},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/janitor) +"bXb" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bXc" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bXd" = (/obj/machinery/door/airlock/mining{id_tag = "cargodoor";name = "Resource Processing";req_access = list(50)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXe" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bXf" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"bXg" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/library) +"bXh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bXi" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/sortjunction/flipped{dir = 4;name = "Janitor Closet";sortType = "Janitor Closet"},/turf/simulated/floor/plating,/area/maintenance/library) +"bXj" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"bXk" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/maintenance/disposal) +"bXl" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/disposal) +"bXm" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/maintenance/library) +"bXn" = (/obj/structure/boulder{icon_state = "boulder2"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bXo" = (/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bXp" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bXq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal) +"bXr" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bXs" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bXt" = (/obj/machinery/door/airlock/maintenance{name = "Mining Maintenance";req_access = list(48)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bXu" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXv" = (/obj/effect/landmark/corpse/engineer/rotten,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bXw" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bXx" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bXy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXz" = (/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXA" = (/obj/machinery/door/window/westright,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bXC" = (/obj/machinery/mineral/processing_unit,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXD" = (/obj/machinery/conveyor{dir = 8;id = "mining_internal"},/obj/structure/plasticflaps,/obj/machinery/mineral/output,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/library) +"bXF" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{dir = 8;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXG" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bXH" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/library) +"bXI" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bXJ" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bXK" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal) +"bXL" = (/obj/machinery/light/small/emergency,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/library) +"bXM" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bXN" = (/obj/effect/decal/cleanable/blood/tracks/footprints,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bXO" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bXP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/tagger/partial{name = "Sorting Office";icon_state = "pipe-tagger-partial";dir = 1;sort_tag = "Sorting Office"},/turf/simulated/floor/plating,/area/maintenance/library) +"bXQ" = (/obj/machinery/door/airlock/maintenance{name = "Trash Compactor"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal) +"bXR" = (/obj/machinery/door/window/westleft,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXS" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/maintenance/disposal) +"bXT" = (/obj/structure/boulder{icon_state = "boulder4"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bXU" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bXV" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery) +"bXW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bXX" = (/obj/machinery/disposal/deliveryChute{pixel_y = -6},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/wall/r_wall,/area/maintenance/disposal) +"bXY" = (/obj/machinery/light/small/emergency{dir = 8},/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bXZ" = (/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYa" = (/obj/structure/disposalpipe/sortjunction/wildcard{tag = "icon-pipe-j1s (NORTH)";icon_state = "pipe-j1s";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library) +"bYb" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYc" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYd" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bYe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYf" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bYg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bYh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/obj/item/modular_computer/telescreen/preset/trashcompactor{pixel_y = 26},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bYi" = (/obj/effect/decal/cleanable/blood/tracks/footprints,/turf/simulated/floor/airless,/area/mine/unexplored) +"bYj" = (/obj/structure/girder/reinforced,/turf/simulated/floor/airless,/area/mine/unexplored) +"bYk" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bYl" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/obj/machinery/mineral/rigpress,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYm" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/crowbar/red{desc = "Used to remove floors and to pry open doors. And, once in a while, save the world."},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYn" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYo" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYp" = (/turf/simulated/floor/plating,/area/maintenance/cargo) +"bYq" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYr" = (/obj/machinery/mineral/output,/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYs" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bYt" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bYu" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYv" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/library) +"bYw" = (/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Maintenance - Trash Compactor";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bYx" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/airless,/area/mine/unexplored) +"bYy" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bYz" = (/obj/structure/closet/crate/secure/loot,/obj/random/loot,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"bYA" = (/obj/machinery/disposal/deliveryChute{dir = 8;pixel_x = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal) +"bYB" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bYC" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library) +"bYD" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/library) +"bYE" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library) +"bYF" = (/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Crate Storage";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction{dir = 1;name = "Sorting Office";sortType = "Sorting Office"},/turf/simulated/floor/plating,/area/maintenance/library) +"bYH" = (/obj/structure/disposalpipe/up{icon_state = "pipe-u";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 8},/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/library) +"bYI" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"bYJ" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/airless,/area/mine/unexplored) +"bYK" = (/obj/effect/floor_decal/corner/brown/full,/obj/structure/punching_bag,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bYM" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/maintenance/disposal) +"bYO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"bYP" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Main Warehouse";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"bYQ" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYU" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYV" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/disposal) +"bYW" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance";req_access = list(31)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/quartermaster/storage) +"bYX" = (/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bYY" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bYZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bZa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZb" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"bZc" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"bZd" = (/obj/vehicle/train/cargo/trolley,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"bZe" = (/obj/vehicle/train/cargo/trolley,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZf" = (/obj/vehicle/train/cargo/trolley,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"bZg" = (/obj/vehicle/train/cargo/engine,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"bZh" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZi" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"bZj" = (/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/mining,/obj/item/stack/flag/yellow,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"bZk" = (/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/mining,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"bZl" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/airless,/area/mine/unexplored) +"bZm" = (/obj/machinery/door/window,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"bZn" = (/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"bZo" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZp" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZr" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bZt" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal";name = "mining conveyor"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bZu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZv" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate/secure/loot,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZw" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"bZx" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZz" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"bZA" = (/obj/effect/large_stock_marker,/turf/simulated/floor/airless,/area/mine/unexplored) +"bZB" = (/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"bZC" = (/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"bZD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"bZE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"bZF" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"bZG" = (/turf/simulated/wall,/area/outpost/mining_main/eva) +"bZH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"bZI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"bZJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZK" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"bZL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/large_stock_marker,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZP" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZQ" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bZS" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bZT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) +"bZU" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZV" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/stack/flag/green,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"bZW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"bZX" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo) +"bZY" = (/obj/machinery/suit_cycler/mining,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"bZZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/closet,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo) +"caa" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/structure/weightlifter,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"cab" = (/turf/simulated/floor/asteroid,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/mine/unexplored) +"cac" = (/obj/structure/boulder{icon_state = "boulder3"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cad" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 8},/area/mine/unexplored) +"cae" = (/turf/simulated/floor/asteroid,/turf/simulated/shuttle/wall{icon_state = "swall_c"},/area/mine/unexplored) +"caf" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cag" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"cah" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"cai" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cak" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cal" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cam" = (/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"can" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"cao" = (/obj/machinery/mineral/input,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"cap" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caq" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/mine/unexplored) +"car" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"cas" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"cat" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"cau" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cav" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Mineral Processing";dir = 8},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"caw" = (/obj/structure/track{icon_state = "track6"},/obj/structure/ore_box{icon_state = "orebox1";name = "minecart ore box"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"cax" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cay" = (/obj/structure/track{icon_state = "track14"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"caz" = (/obj/structure/track{icon_state = "track14"},/obj/structure/ore_box{icon_state = "orebox1";name = "minecart ore box"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"caA" = (/obj/structure/track{icon_state = "track10"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"caB" = (/obj/machinery/light/small{icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/turf/simulated/floor/airless,/area/mine/unexplored) +"caC" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/effect/large_stock_marker,/turf/simulated/floor/airless,/area/mine/unexplored) +"caD" = (/obj/machinery/door/airlock/mining{id_tag = "cargodoor";name = "Mining Dock";req_access = list(50)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) +"caE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caF" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"caH" = (/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/obj/machinery/camera/network/mining{c_tag = "Mining - Suit Storage";dir = 4},/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/mining,/obj/item/stack/flag/red,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caI" = (/obj/effect/floor_decal/industrial/warning/dust/corner{icon_state = "warningcorner_dust";dir = 4},/obj/structure/track{icon_state = "track5"},/obj/vehicle/train/cargo/trolley/mining,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"caJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"caK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo) +"caM" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/track{icon_state = "track13"},/obj/vehicle/train/cargo/engine/mining,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"caN" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caO" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/track{icon_state = "track13"},/obj/vehicle/train/cargo/trolley/mining,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"caP" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/structure/track{icon_state = "track13"},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"caQ" = (/obj/effect/floor_decal/corner/brown,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caR" = (/obj/structure/track{icon_state = "track12"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"caS" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caT" = (/obj/structure/track{icon_state = "track8"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"caU" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caV" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caW" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caX" = (/obj/machinery/conveyor{dir = 4},/turf/simulated/floor/airless,/area/mine/unexplored) +"caY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"caZ" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/airless,/area/mine/unexplored) +"cba" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/airless,/area/mine/unexplored) +"cbb" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbc" = (/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"cbd" = (/obj/machinery/door/airlock/external,/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/plating,/area/maintenance/cargo) +"cbe" = (/obj/item/weapon/key/cargo_train,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cbf" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cbg" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Shaft Miner"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbj" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbk" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"cbl" = (/obj/machinery/light_switch{pixel_x = 25;pixel_y = -9},/obj/machinery/status_display{layer = 4;pixel_x = 32;pixel_y = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbm" = (/obj/structure/track{icon_state = "track3"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cbn" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbo" = (/obj/effect/decal/cleanable/generic,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"cbp" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"cbq" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/floor/airless,/area/mine/unexplored) +"cbr" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cbs" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/cargo) +"cbt" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Expedition Preparation";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbv" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/table/standard,/obj/item/device/suit_cooling_unit/improved,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2;pixel_y = -1},/obj/item/weapon/storage/belt/utility,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbw" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbx" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Camera 1";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cby" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbz" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "mining_east_pump"},/obj/structure/sign/vacuum{pixel_y = 32},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "mining_east_pump"},/obj/structure/closet/walllocker/emerglocker/north,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbB" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "supply_shuttle";pixel_x = 25;pixel_y = 0;req_one_access = list(13,31);tag_door = "supply_shuttle_hatch"},/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"cbC" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbD" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbE" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbF" = (/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA";req_access = list(54)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbH" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbI" = (/obj/structure/closet/crate/secure/loot,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"cbJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbK" = (/obj/structure/girder/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cbL" = (/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA";req_access = list(54)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/airless,/area/mine/unexplored) +"cbP" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/floor/airless,/area/mine/unexplored) +"cbQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/simulated/floor/airless,/area/mine/unexplored) +"cbR" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "mining_east_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbS" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "mining_east_inner";locked = 1;name = "Mining External Access"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbT" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "mining_east_outer";locked = 1;name = "Mining External Access";req_access = list(10,13)},/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"cbU" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/floor/airless,/area/mine/unexplored) +"cbV" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cbW" = (/obj/structure/track,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cbX" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "mining_east_airlock";name = "exterior access button";pixel_x = -27;pixel_y = -26;req_one_access = newlist()},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"cbY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cbZ" = (/turf/simulated/floor/asteroid,/area/skipjack_station/cavern) +"cca" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"ccb" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/landmark/start{name = "Shaft Miner"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"ccc" = (/obj/structure/filingcabinet,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"ccd" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cce" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_east_pump";tag_exterior_door = "mining_east_outer";frequency = 1379;id_tag = "mining_east_airlock";tag_interior_door = "mining_east_inner";pixel_x = 0;pixel_y = -25;tag_chamber_sensor = "mining_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "mining_east_pump"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"ccf" = (/obj/structure/ore_box,/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "mining_east_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "mining_east_pump"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"ccg" = (/obj/machinery/camera/network/civilian_west{c_tag = "Exterior - Mining Airlock";dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"cch" = (/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/tiled,/area/maintenance/cargo) +"cci" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo) +"ccj" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 8},/turf/simulated/floor/plating,/area/maintenance/cargo) +"cck" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"ccl" = (/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/obj/structure/closet/crate/radiation,/turf/simulated/floor/tiled,/area/maintenance/cargo) +"ccm" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"ccn" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) +"cco" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/outpost/mining_main/eva) +"ccp" = (/obj/machinery/light/small{icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored) +"ccq" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/turf/simulated/floor/airless,/area/mine/unexplored) +"ccr" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/cargo) +"ccs" = (/obj/random/junk,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/cargo) +"cct" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/cargo) +"ccu" = (/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/structure/table/steel_reinforced,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"ccv" = (/obj/machinery/cell_charger,/obj/structure/table/steel_reinforced,/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"ccw" = (/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/structure/table/steel_reinforced,/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"ccx" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored) +"ccy" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo) +"ccz" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/cargo) +"ccA" = (/obj/structure/track{icon_state = "track1"},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ccB" = (/turf/simulated/shuttle/wall{icon_state = "swall15";dir = 2},/area/mine/unexplored) +"ccC" = (/turf/simulated/floor/asteroid,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/mine/unexplored) +"ccD" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "iaa_desk";name = "Desk Privacy Shutter";pixel_x = 0;pixel_y = -26;req_access = list(38)},/turf/simulated/floor/wood,/area/lawoffice) +"ccE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "KEEP CLEAR: MEDICAL EXOSUIT PARKING";pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"ccF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "KEEP CLEAR: MEDICAL EXOSUIT PARKING";pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"ccG" = (/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/wood,/area/library) +"ccH" = (/obj/random/cookingoil,/turf/simulated/floor/plating,/area/maintenance/library) +"ccI" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"ccJ" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"ccK" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder) +"ccL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/engineering/locker_room) +"ccM" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"ccN" = (/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Locker Room";req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"ccO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"ccP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"ccQ" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"ccR" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact";dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"ccS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/engineering/locker_room) +"ccT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/locker_room) +"ccU" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/locker_room) +"ccV" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ccW" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ccX" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ccY" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ccZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/tiled,/area/security/brig) +"cda" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"cdb" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/range) +"cdc" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cde" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/main) +"cdf" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/main) +"cdi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdk" = (/obj/machinery/door/airlock/glass_security{name = "Firing Range";req_access = list(1)},/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/main) +"cdl" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence{pixel_x = 7},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdm" = (/obj/item/weapon/stool/padded{desc = "Apply butt. This particular stool looks tattered and old. Perhaps there have been budget cuts?";name = "Tattered Stool"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdo" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdr" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cds" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdt" = (/obj/machinery/optable,/obj/machinery/button/windowtint{id = "FT Op";pixel_x = 28;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"cdu" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdv" = (/obj/machinery/door/airlock/security{name = "Forensic Technician";req_access = list(4)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cdw" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/swabs{pixel_x = 5;pixel_y = 5},/obj/item/weapon/storage/box/slides{pixel_x = 2;pixel_y = 2},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"cdx" = (/obj/machinery/door/window/westleft{dir = 2;name = "Forensics Operating Theatre";req_access = list(4)},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"cdy" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdz" = (/turf/simulated/floor/lino,/area/security/forensics_office) +"cdA" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/forensics_office) +"cdB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdC" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdD" = (/turf/simulated/floor/lino,/area/security/forensics_office) +"cdE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/lino,/area/security/forensics_office) +"cdF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/forensics_office) +"cdG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdJ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/main) +"cdL" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"cdM" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"cdN" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"cdO" = (/obj/structure/coatrack,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdQ" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdR" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdS" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) +"cdT" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) +"cdU" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/security/brig) +"cdV" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"cdW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdX" = (/obj/machinery/photocopier,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cdY" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"cdZ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"cea" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/brig) +"ceb" = (/obj/machinery/door/airlock/security{name = "Forensic Technician";req_access = list(4)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cec" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/forensics_office) +"ced" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cee" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/security/forensics_office) +"cef" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/computer/med_data,/turf/simulated/floor/tiled,/area/security/forensics_office) +"ceg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"ceh" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) +"cei" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) +"cej" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"cek" = (/obj/effect/floor_decal/corner/blue,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cel" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/structure/table/standard,/obj/item/device/camera_film,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/forensics_office) +"cem" = (/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/blue,/obj/item/weapon/pen/blue{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red,/obj/structure/table/standard,/obj/item/device/camera,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/forensics_office) +"cen" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/computer/secure_data,/turf/simulated/floor/tiled,/area/security/forensics_office) +"ceo" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig) +"cep" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) +"ceq" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"cer" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"ces" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"cet" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office) +"ceu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig) +"cev" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cew" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cex" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cey" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"cez" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ceA" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ceB" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ceC" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"ceD" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"ceE" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"ceF" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 4"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"ceG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ceH" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ceI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ceJ" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ceK" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "RobotSurg"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"ceL" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"ceM" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"ceN" = (/obj/machinery/door/airlock{name = "Public Bathrooms";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/medical/medbay3) +"ceO" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"ceP" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"ceQ" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/bridge) +"ceR" = (/obj/structure/flora/pottedplant/random,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge) +"ceS" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"ceT" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"ceU" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/turbolift/command_sub) +"ceV" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/turbolift/command_sub) +"ceW" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/turbolift/command_sub) +"ceX" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/turbolift/command_sub) +"ceY" = (/obj/structure/flora/pottedplant/random,/turf/space,/area/turbolift/command_sub) +"ceZ" = (/obj/turbolift_map_holder/aurora/command,/turf/simulated/floor/tiled,/area/turbolift/command_sub) +"cfa" = (/obj/machinery/light,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research) +"cfb" = (/turf/simulated/open,/area/turbolift/research_station) +"cfc" = (/turf/simulated/open,/area/turbolift/research_station) +"cfd" = (/turf/simulated/open,/area/turbolift/research_station) +"cfe" = (/turf/simulated/open,/area/turbolift/research_station) +"cff" = (/turf/simulated/open,/area/turbolift/research_station) +"cfg" = (/turf/simulated/open,/area/turbolift/research_station) +"cfh" = (/turf/simulated/open,/area/turbolift/research_station) +"cfi" = (/turf/simulated/open,/area/turbolift/research_station) +"cfj" = (/turf/simulated/open,/area/turbolift/research_station) +"cfk" = (/turf/simulated/open,/area/turbolift/research_station) +"cfl" = (/turf/simulated/open,/area/turbolift/research_station) +"cfm" = (/turf/simulated/open,/area/turbolift/research_station) +"cfn" = (/turf/simulated/open,/area/turbolift/research_station) +"cfo" = (/turf/simulated/open,/area/turbolift/research_station) +"cfp" = (/turf/simulated/open,/area/turbolift/research_station) +"cfq" = (/turf/simulated/open,/area/turbolift/research_station) +"cfr" = (/turf/simulated/open,/area/turbolift/research_station) +"cfs" = (/turf/simulated/open,/area/turbolift/research_station) +"cft" = (/turf/simulated/open,/area/turbolift/research_station) +"cfu" = (/turf/simulated/open,/area/turbolift/research_station) +"cfv" = (/turf/simulated/open,/area/turbolift/research_station) +"cfw" = (/turf/simulated/open,/area/turbolift/research_station) +"cfx" = (/turf/simulated/open,/area/turbolift/research_station) +"cfy" = (/turf/simulated/open,/area/turbolift/research_station) +"cfz" = (/turf/simulated/open,/area/turbolift/research_station) +"cfA" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station) +"cfB" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station) +"cfC" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station) +"cfD" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station) +"cfE" = (/obj/machinery/crusher_base,/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/reinforced,/area/maintenance/disposal) +"cfF" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/closet/crate/trashcart,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/maintenance/disposal) +"cfG" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/security/brig) +"cfH" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/security/forensics_office) +"cfI" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/security/forensics_office) +"cfJ" = (/obj/structure/filingcabinet/security{desc = "A large cabinet with hard copy security records.";name = "Security Records"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/lino,/area/security/forensics_office) +"cfK" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/security/brig) +"cfL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/security/brig) +"cfM" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/brig) +"cfN" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"cfO" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "armoury";name = "Emergency Access"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"cfP" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "armoury";name = "Emergency Access"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"cfQ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/brig) +"cfR" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"cfS" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer) +"cfT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/foyer) +"cfU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard) +"cfV" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cfW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cfX" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cfY" = (/obj/machinery/vending/medical,/turf/simulated/wall,/area/medical/icu) +"cfZ" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cga" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cgb" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay) +"cgc" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cgd" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cge" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cgf" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cgg" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) +"cgh" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft) +"cgi" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaAcaAcaAcaAcaAcaAcaAcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaabaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaabaabaabaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaaaaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaAcaAcaAcaAcaAcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaacaadaaeaafaaeaagaacaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaacaahaaiaaiaaiaajaacaaaaaaaaaaabaabaabaabaabaanaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaacaakaaiaaiaaiaalaacaaaaaaaaaaaaaabaabaabaamaaqaamaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaacaakaaiaaiaaiaaoaacaaaaaaaaaaaaaabaabaabaapaavaapaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaaaaaaaaaaaaaaaaacaagaaraaraasaataacaaaaaaaaaaabaabaabaabaauaaCaawaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaayaazaaAaaBaacaacaacaacaacaacaacaacaacaaDaacaacaacaacaacaaaaabaabaaaaacaacaaFaacaabaabaabaabaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaaHaaGaaGaaGaaGaaIaaGaaGaaJaaGaaGaaGaaGaaGaaKaaGaaNaaLaacaaaaaaaaaaaaaacaaMaaSaacaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaabaabaabaabaabaabaabaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaabaabaaPaaaaaaaaaaaaaaaaaaaaaaaQaaRaaQaaQaaQaaQaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacabaaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaUaaUaaUaagabaaacaacaacaacaacaacaacaacaagaacaacaacaacaacaacaacaacaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaaOaaVaaVaaVaaOaaWaaWaaWaaOaaXaaXaaXaaOaabaabaabaaaaaaaaaaaaaaaaaaaaaaaQaaRaaYaaZabbaaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacabaaaTabfabcabcabcabdabeabgabeabiabhablabjaaUabkabmaaGaaGaaGaaGabnaboaaGaaGaaGaaGabnaaGaaGaaGabuabpaacaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaababqaabaabaabaabaaOaaVabraaVaaOaaWabsaaWaaOaaXabtaaXaaOaabaabaabaabaabaaaaaaaaaaaaaaaaaQabyabvabwabxaaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaababzabaabAabFabBabCabDabEabDabEabGabJabHabIabKabPaadabLaagabMaagaagabNaacaacaagaacabOabOabOabOabOabRabQaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaaOabSabUabTaaOabVabYabWaaOabZacdacaaaOaabaabaababqaabaaaaaaaaaaaaaaaaaQabXaaYaaRaaRaaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabacjabaackabFacmacbacbacbacbacbabFabJaccacoabKaaUaagaceacfacgaaBachaagaagaciaagaagabOacuacvaclabOabRabMaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaOaczacnacAaaOacpacnacqaaOacpacracqaaOaabaabaabaabaabaabaaaaaaaaaaaaaaQaaQacsactaaQaaQaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabacjabaackacEacDacwacxacyacxacwacFacGacBacoabKaaUaagaceaciaacaacabNaacacCaagaagaagabOacHacOacIacRacQadbaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabacJaabacJaabacKaabacLaabacKaabacLaabaabaabaabaabaabaabaabaaaaabaabaabaabactaaRaabaabaaaaaaaaaaaaaabaabaabaababqaabaabaabacjabaackabFacmacbacbacbacbacbabFabJacMacoabKaaUacNadiaacaaBaaBaayacCacPaagaagaagabOadjabOabOabOaacadkacSacTacUaacaagaagaagaagaagaagaagabMaagaagaagaagaagaagaacaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabacVacVacWacXacYacXacYacZadaadlacVadcacYaddadeacVacVaabaabaabaabaabaabaabaabaabaabadfadgadhaabaaaaaaaaaaabaabaabaabaabaabaabaabaabadmabaadnadpadoadradqadqadsaduadtadxadvadAabKaaUaceacfaagacCaagaagaagaagaagaagacCaacadDadHadwaagaacabaadKaagadyaacaagaacaacaacaacaacaacaacaacaacaacaacaacaagaacaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabacVadzadMadBadCadBadNadEadFadGadzadEadPadIadJadzacVaabaabaabaabaabaabaabaabaabaabadfadfadhaabaabaabaabaabaabaaaaaaaaaaaaaabaabaabaacabaaaTadTadLadLadWadLadLadLadLaegadOaehabKaaUaceaaBaacaaAaagaagaagacgaayadRaaBaacadSaejadUadVaacaelacSaadadXaacaagaacadYadZaeaaebaecaecaecaecaedaeeaacaagaacaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaOaaOaaOaaOaaOaabacVaefaenaemaeiadBaeoadEaekaemaeqaepaexaevaeAaezaeraesaaOaaOaaOaaOaaOaabaabaabaetadfaeuaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabaaaTaaTaaTaeCaaTaewaeNaeyaaTaaTaaTaeRabKaaUaeSaaUaaUaaUaaUaaUaaUaaUaaUaaUaaUaacadSaeUaeDaagaacabaaacaacaacaacaagaacaeEadYadYaeFaeGaeHaeIaeJaeJaeKaacaagaacaacaacaacaabaaaaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaQaeLaeLaaQaaaaaaaaaaaaaaaaabaabaabaabaaOaeMaeMaeVaeOaePaeQaeWaeXaeTadBadBadzaeYaeZaeZafbafaafcaeZaeZaeZafhafgafjafiafdafdaaOaabaabaabafeaaRaeuaffaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaacafkaaGaaGaaGadbaaTaaTaaTaaTaaTafmaflafoafnafqafpafsafrafuaftafxafvabIabIcfGaaUafwacCafKccVafyafMccWafNabMaagaagaagaacadYadYafBafCaeJafDafEaeJaeIaeJafFaagaagaagaagaacaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabafGafQafGafQaeLaaaaaaaaaaaaaaaaabaabaabaabaaOaeMafIafRacraabafJafYafLadzadBaemafZafZafZagaaevadEafOadzafPagbagcacKafSagdafTafdaaOaabaabaabaaQadhafUafeaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaacaacaacaacaacadkaaUafVafWafXagfagiaghagkagjaglageagmaggagncfLagpagoagsagsaguagtagEagDagFagragGaacagNagLaacaacaacaagaacagvagwagvagxagyagzagAagBagzagvaacaacaacagvaagaacaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabagCagCagCagCaeLaaaaaaaaaaaaaabaabaabaabaabaaOaeMaeMagQafjagRagXagUagHagIagJagKaeiagYagMagMagMagZagOagPahbahaagSagTaeOahdafdafdaaOaabaabaabaaQadhagVafeaabaabaabaaaaaaaabaabaabaabaaaaaaaaaaaaaacacUagWadXaacadkaaUahfaheahgaaUahiahhalyalzalzalzalzalzalzalzalzaeBahcahcahjahcahcahkahlahmahDaacccXahFaacaaaaacaagaacahGahqadZahraeFahsafCaeJaeJafEafEafEahtagvaagaacaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabagCagCagCagCaeLaaaaaaaaaaaaaabaabaabaabaabaaOaaOaaOaaOaaOaabacVadEahuadzadBadzahvahwahxagMahyaeYahOahNaeZaeZafhahQaaOaaOaaOaaOaaOaabaabaabaiNahCahCaiNaabaabaabaabaabaabaabaabaabaabaabaaaaaaaacaagaagacTaacabaaaUahRahEahSaaUahYahhamxamVamUamXamWamCamDamDanVaeBahPaieaifahHahcaacaacaacaacaacccXaigaacaacaacaagaacafCahTahTahUahVaeFafCafCahTahTafEahWafEagvaagaacaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaQaabaabagCagCagCagCaeLaabaabaaaaaaaabaabaabaabaabaaOahXahXailaeOaePaeQaimainaibaicagPaidaipahxagMahyadzaisahNaeZaeZafhagRafjaitaihaihaaOaabaabaabaiNaiiaiiaiNaabaabaabaabaabaabaabaabaabaabaabaabaaaaacaacadKaacaacabaaaUaijaikaixaiwccZcdaapaapcaozapdamDaoBamDaoBcdbaeBahJahJaifahHahcaaaaaaaacaagcdccddaiRabMaagaagaagaacaiyaizaiSaiBaiCaeJaeHaeKaiDaiEaeIafEaeHagvaagaacaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaeLaabaabagCagCagCagCaeLaabaabaabaabaabaabaabaabaabaaOahXahXaiUacraabafJaiVaiYaiHaiIaiJahvaekadzajaadzadzafOaiHafPajbagcaabafSajeaiMaihaaOaabaabaiNaiNaiOaiPaiNaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaacaagabkaiQajfaaUajhaiTajiaaUahiahhcdeapYamDalzapyapzapyapzapyaeBcdfaiGaifahHahcaaaaaaaacaiLcdgaacaacaacaacajyaacaacafCahTahTahTajcaeJafEafCahTahTajdafDafEagvaagaacaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaeLaabaabajAajAajAajAaeLaaaaaaaaaaaaaabaabaabaabaabaaOahXahXajBaeOaePajgajDajEajjajkajlajmajnajnajnajnajnajoajmajHajGagSaePaeOajKaihaihaaOaabaabaiNajsajtajLaiNaiNaiNajvajwajxaiNaiNaiNaiNaiNajvajwajxaiNaacaaHabnaaGajMaaUabIajzabIaaUajXajWcdhamDamDapzaqpamDaqpamDaqpaeBahLahKcdiajJahcaaaaaaaacajucdgagvaeJajNajOaeJaecagvaeJajPafCaeJafEafEaeJaeJaeJajQafCajPahqagvaagaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaQajRajRajSajSajSajSajTajTajTajTajTajTajTaabaabaabaaOaaOaaOaaOaaOaabacVadEajUajVakwakjakjakjakjakjajYajZakaajZakGakFakdaabaaOaaOaaOaaOaaOaabaabaiNakLakIakIakMakMakMakNakMakIakIakMakMakSakMakNakIakMakNakTaiRaaAaayaacaaUakkaaUaaUaaUahiahhcdkamDamDarQamDamDamDamDamDaeBcdlcdmcdnahHahcaeBaeBaeBaeBcdgagvaeJaklaeJaeJaeJagvakmaknakoakmakpakqakrakqaksaktakuagvagvagvakUagvagvaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaajRakvalcakxakyakzajTakAakBakCakDakEajTaabaabaabaabaabaabaabaabaabacVaeYalfahNaeZaeZaeZaeZaeZaeZafbaeZalkadzakHadzacVaabaabaabaabaabaabaabaabaiNalnaiNaiNaiNaiNaiNajvajwajxaiNaiNaiNaiNaiNajvajwajxaiNaacaadaagaagaagabMakkakJakKaaUalraMRamxamDaoCapzasvasJasxamDasvaeBakRahJcdpahHahcaivcfHakgaeBcdgagvaklalAakVafEaklakWadYadYafEaeJakXakYaeJaeHaeHafEafEakZalaalaadYalbagvaaaaaaaabaabaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRakvalBalBaldalealKakAalgalhakAaliajTacVacVacVacVacVacVacVacVacVacValLallalmalMajnalMaloajnajnalNalqalOadzalsagIacVaabaabaabaabaabaabaabaaaaiNalTaiNaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaacaacalualuaagaadakkalUalwalVagicfMamoalzalzalzalzalzalzalzalzahcakRcdrcdpcfIahcaiuaiZcdtaeBcdgagvalCalDafEalEaklalFafEadYadYafCafEafEafEafEaeaalGafEakUadZafCafCaeFagvaaaaabaabaabaabaabaabaabaababqaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaajRakvalHalHalIalJajTalYamaalZamcambajTalPalRalQalQalSalQalQameamdampamgamzamyamBamAamyamEamPamMamQamfamRamhamiamjamkaabaabaabaabaabaabaabaaaaiNalTaiNamlamlamlamlamlamlamlamlamlamlamlamlamlamlaabaabaabaabaaaaluaagaagakkammamnaaUahiahhamoamSamqamramsamtamuamvamwahcahcahccdvahcahccdwcdxamYaeBcdgagvamFalCamGafEamHakWafEafEaeJafEamIamJamJamKamKafEaeJakZafCamLadYafCagvaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaajRamZalcamNamOanaancanbandamTanhanganoanmansanqantanqanqanqanwanuanAaneanfanBanDanfanianjankanlanEannanFanpanManramkaaaaabaabaaaaaaaaaaaaaaaaiNanNaiNamlamlamlamlamlamlamlamlamlamlamlamlamlamlaaaaabaabaabaabaluabMaagakkaaUaaUaaUahianOanPanvanQanxanyanzanzanzanzaeBcfJcdzanCcdAaiqcdBaiqajIaeBcdgagvamFanGakXafEanHanIadYanJaeJagvagvagvagvagvagvagvagvagvaeaanKadYanLagvaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaajRakvaogaoaaokaojajTakAalgalhaolaliajTaljanRaljaljaljaljaljaljaljacVaomaekaonaopaekaoqanWanXanYaovaouaobaocaodaoeaofaiNaiNaiNaiNaiNaiNaiNaiNaiNaowaiNamlamlaohaoiaoyaoxamlaoAaoHaoDaoHaooamlamlaaaaaaaabaaaaaaaluaagaagaagaagabMabPaoLaoIamoaoraosaotaoNaoMaoZaoZaoZaeBanTcdzcdEcdFcdGcdHcdIapeaeBcdgagvaeJaeJaoEaoFaoEaoGafEapgapfagvaaaaaaaaaaaaaaaaaaaaaagvaeaadYaoJajPagvaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKaoKaoKaoKajRajRapiaphaphajRalKakAakBakCaplakEajTaoOaoPaoQaoRaoSaoTaoUaoVaoWacVacVacVacVacVacVacVamkaoXaoYapoapmapbaprapuaptapxapwapDapBapjapjapjapkapjapkapLapIamlamlapnapnapnapnamlapNapnapnapnappamlamlaaaaaaaaaaaaaaaapqaagaadakkaaUaaUaaUahiahhamoapUapsanzcdKapVapvapvapXaeBcdLcdMcdNaeBcdOcdPaiqcdQaeBcdgagvaklaeJalCapAamFapZapCaqaafCagvaaaaacaacaacaacaacaaaagvapEaeJafEalaagvaabaabaabaabaabaabaabaabaabapFaabaabaabaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKapGapGapHapHapHaqeapJapKaqgapMapMapMapMaqkapMapMaoOaoPaoQaoRapOapPapPapQapQaljapRapRapRapRapRapRamkapSapTaqraqlaqvaquaqxaqwamkamkamkamkamkamkaiNaqyaiNaiNanNaqbamlamlaqcaqdapnapnamlaqzaqfapnapnaqBamlamlaaaaaaaaaaaaaaaaluabMaagakkakJakKaaUahiahhamoaqhaqiaqjaqDaqCaqmaqnaqoamocdScdTcdUcdVaiqcdPaiqcdXaeBcdgagvaklafEaeJaeJaeJaqqaeJaqEafCagvaaaaacacUagWadXaacaaaagvaeJaeFaqsaeJagvaabaabaabaabaqtaqtaqGaqFaqHaqtaqJaqIaqKaqtaqtaaaaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaqAaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKapGapGapHapHapHaqUaqTaqXaqVapMaqYaraaqZarearbarfaoOaoPaoQaoRaqLaqMaqNaqOaqOaljapRapRapRapRapRapRamkaqPaqQaqRaqSarhargariaqWarkarjaroarnarpamkarcarcardaiNarrarqamlamlartarsapnaruarBaryarlapnapnarmamlamlaaaaaaaaaaaaaaaaluaagabMakkarEalwarFarHarGamoarIarNarJarOapVarvarwarxamocdZabIceacebceccedceecefaeBcdgagvaeJafEarzamGarAaacaacarRaacaacaaaaacaagaagacTaacaaaagvarCarDafEafEagvaabaabaabaqtaqtarSarUarTarTarXarTarTasaarYaqtaqtaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaqAaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKapHapHapHapHapHarKarLarMascapMasdarParPasiaseapMasjaoPaoQasmaslapPapPaoVaoWaljapRapRapRapRapRapRamkarVarWasnaqSasqarZassasbaswasuaqWaqWasyamkasfasgashaiNarcaszamlamlasAaskaskasBasDasCasoaskaspapnamlamlaaaaaaaaaaaaaaaaluaagaadakkammamnaaUalrasEamoasrasFapvapWapVarvastasIamocfKabIceicdVcekcelcemcenaeBcdgaacaacaacaacaacaacaacaatasNaadaacaacaacaacasOaacaacaacaacaacaacaacaacagvaabaabaabasPasRasQasSasGasGasHasGasGasSasTasVasUaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaabaabaqAaqAaabaabaabaabaabaabaabaabaabaabaabaabaabaoKasWapHapHapHapHasMapHasZasYateataatgatfatiathatlatkasXaoQatpatoapPatratbatbaljapRapRapRapRapRapRamkatcatdatuatsatzatvatAasbatjatBatBatBatCamkaiNaiNaiNaiNatmaszamlamlatnatnapnatDamlatEatqatFatHapnamlamlaaaaaaaaaaaaaaaaluaagattakkaaUaaUaaUatJatIamoatwatxatyatPatKatwatxatyamoaFTceocepaeBcdLcdMcdMcdNaeBatQatRatRatRatRatVatVatVatWatXaagaagaagaataadabMatGaadaadaadaadatYaagaacaabaabaabaabatZaubauaasSatLatMatNatOasGasSaucaueaudaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSaaaatSaabaabaabaabaqAaqAaqAaqAaqAaabaabaabaabaabaabaabaabaabaabaabaabaoKatTatTatTatTatUasMapHauhaugaljaljaljaljauialjaukaujaoPaoQaoQaulaumaoQaoQaoQaljapRapRapRapRapRapRamkauoaunamkauqaufauramkamkamkamkamkamkamkamkausakSakSakSauuautamlamlatnatnapnauvamlauwauxauxauzauyamlakkakkakkakkakkakkakkaaUaaUaaUaupauBauAauIauGauJaflafqauKauMauLauOauNauPauNauOauNceuaflaflaflauRauCauDauDauDauDauDauDauDauDaagalXauEacgaacaacaacauFauSauSauSauHaacaacaacaagaacaabaabaabaabauTauWauUauYauXavbavaavcauQaveavdavhavfaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRajRajRajRauVaabaabaqAatSaqAatSaqAatSaabaabaabaabaabaabaabaabaabaabaabaabaoKavjavlavkauZavpasMapHavuavtavwavvavxavgavFaviavNavGaoPaoOavgavRavmaoOavnavoaljaljaljaljaljaljaljavqavravsavUavTavYavWawaavyccLavAavBavAavAavDanNaiNaiNaiNavEawbamlamlatnatnawcatDamlavHapnavIavJavKamlavLavMavMawgavOavPavQawlawiaaUawmawnavVavVawoavMavMavXaoLavMawpavZawpawqawpavZawpavMavMavMavMawuawsauDawdawdawdaweawfawvauDawhawwawhawhaaQaabaabaabaabaabaabaabaabaabaacaagaacaabaabaabawjaqtawkawxasSauXawAawzawCauQasSawEawkaqtawFaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSajRawrawrawrawGawtaabaabawtawtawtawtawtaabaabaabaabaabaabaabaabaabaabaabawtaoKawHawHawIawKawJarMawyavuawLawMawBawNawDavFaviawPawOawSawRawRawTawRawRawRawUaxbawXaxgaxgaxgaxhaxiavqaxmawQaxpaxoaxraxqawVccMccNccOawWccPccQavDanNaiNaaaaiNarcawbamlamlamlamlamlaxuamlawYapnapnawZaxaamlaxvaxcaxdacoaxeabIabIaxfaxwaaUaxxaxzaaUaxjaxkaxlaxAaxnaxCaxnaxEaxFaxEaxnaxEaxHaxEaxnaxsaxsaxtaxJabKauDaxKaxMaxLawfaxyaxQaxOaxBaxRaxDawhaabaabaabcevatScevatScevaabaabaacaagaacaabaabaabaabasPaxUaxSasSaxGaxVaxIaxXaxWasSaxYaxZasPaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRaxNawrawrawGawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtayaaxPaycaybaydaxTayfayeayhaygayjayiaylaykaynaymayrayoaytaymaymayuaymayyaymayAayEayDaymaymaymayFayGavqayHaypayqayKaysccRayOayvccLccTccUaywavAavDanNaiNaaaaiNayxayPayzayQayBayCaySayRamlayTapnapnapnayUamlayVayIayJayZayWayMayNazaabIazdavZazfaxkaxkazjaznazlazpazoaxnazqayXayYaxnazsayXayYaxnaztazbazcaxJabKauDazuazeazvazgazhaACazwazkazxaxDawhaabaabceyazmazmazmazmazmcezaabaacaagaacaabaabaabaabazyazAazzasSazDasGazrasGazEasSazFazIatZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSajRawrawrawrawGawtaabaabaabawtawtawtawtawtaabaabaabaabaabaabaabaabaabaabawtaoKawHawHazJazMazLazNascazPazOawMawBazQazBaoOazCazSazRazYazGazGazGazGazHazGazZaAaazKaAdaAbaAkaAjaAlavqaAmawQaAqaAoazTaEIayLayvazVazWazWazWazWazWanNaiNaaaaiNazXaAraAuaAtayBaAyaAAaAzamlaADapnapnapnaxaamlaAEaAeaAfacoavOaAgaAhaAiabIavOaAIaAKaAJaALaxkaAnaAMaApaANaxnaAOaAsaAPaxnaAOaAsaAQaxnaAvaAwaAxaxJabKauDaARaAUaASaABawfaAWazwaxDaAXaxDawhaabaabatSazmazmazmazmazmatSaabaacabMaacaabaabaabaabauTaBaaAZaBdaBbaBfaBeaBhaBgaBnaBkaBoavfaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRajRajRajRaATaabaabaabaqAatSaqAatSaqAatSaqAaabaabaabaabaabaabaabaabaabaabaoKavjavlavkaoKaBqaAVapHavuaBsaBtaAYaBvaBuaBxaBcawPavGaByaoQaBFaBDaBHaBGaBGaBIaoQaBHaBIaoQaBLaBKaBMavqavqaBiaBjaBNaBlaEIazUavzazVaBmaBPaBOaBpaBQanNaiNaaaaiNaiNaiNaBrawbayBaBRaBUaBTamlaBVapnapnapnaxaamlaBwaCeaBZaBzaBAaBBajzabIaBCaBAaAIaCfaBEaChaCgaCjaCiaBJaCkaxnaClaCoaClaxnaClaCpaClaxnaxnaxnaxnaCsaCrauDaCtaxMaCuaBSawfaCwaCvcfNaCxaBWawhaabaabceyazmazmazmazmazmcezaabaCaaCbaCaaCaaCaaCaaCaaCaaCaaCcaCdaqtaqtaCBaqtaqtaCcaCdaqtaqtaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSaaaatSaaaaaaaaaaabaabaqAaqAaqAaqAaqAaqAaabaabaabaabaabaabaabaabaabaabaoKaCCaCDaCDaCFaCEasMapHavuaCGaljaljaljaljaljaljaukaCHaCJaCIaCmaCnaCKaCKaINaINaCLaCqaCMaoQaCOaCNaCUaCTaCXaCVaCyaCNaCzaCYaDaaCZaDdaDbaDfaDeaDiaDgaDjaiNaaaaaaaaaaiNaiNawbayBaDkaDraDpamlamlaDtcfOcfOamlamlaDuaCPaCQaCQaCRaCQaCQaCQaCQaCSaAIazfaBEaDEaDAaDFaCWaDHaDGaDKaDIaAsaDLaDcaDMaDRaDOaDSaDhaDWaDUaDZabKauDaDlaDmaDnaDoaEaaDqaEbaDsaEcaEeawhaabaabatSazmazmazmazmazmatSaabaCaaDvaDwaDxaDyaDzaEgaDBaCaaDCaDDaEhaEkaEjaEoaEmaDJaDDaqtaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaqAaqAaqAaqAaqAaabaabaabaabaabaabaabaabaabaoKaEpapHazNaEsaEraDNaqTaEtaDPaDQaEuaEvaDTaEwaDVaExavGaEBaEzaDXaCnaCnaCnaCnaDYaCnaCnaEDaoQaEFaEEaEGaEdaEdaEdaEdaEHaEfaEIazUaEJaEiaEKaEiaEiaEiaEiaELaEiaElaEiaEiaEiaEiawbaaUaEMaEnaENaEOaEOaEnaEqaEnaEOaETaESaEUaEUaEUaEVaEUaEUaEZaEUaEUaFaaFbaEyaFdaEAaFeaECaFgaFfaFjaFiaFkaDOaFkaDOaFlaAsaFmaAsaFoaFnaFqaFpauDaFraEPaEQaERaFsaFtauDaFuaxRaxDawhaabaabceyazmazmazmazmazmcezaabaCaaFwaEWaEWaEXaEYaFyaFxaCaaFzaFcaFAaFBaEjaFBaFCaFcaFDaqtaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaqAaqAaqAaabaabaabaabaabaabaabaabaabaabaoKaFhaFEascaFFaFEascaFGavuapHaFIaFHaFKaFJaFMaFLaFPaFOaFQaEzaFSaCnaCnaCnaCnaFvaCnaCnaFWaFVaFYaFXaGaaFZaFZaGbaGdaGcaGfaGeazUaGgaEiaGhaGjaGiaGlaGkaFNaGmaGoaGnaFRaGpaEiawbabPaFTaFUaGuaGxaGvaGvaGyaGvaGvaGAaGzaGCaGBaGEaGDaGEaGMaGPaGEaGEaGQaGRaBEaGUaGSaGWaGVaGYaGXaAsaGZaGqaGraGsaGtaHaaFkaDSaHbaGwaDUaHkaHcaHmaHlaHlaHnaHraHoccDaHsaxDaxRaxDawhaabaabatSatSaGFaGFaGFatSatSaabaCaaGHaGIaGJaGKaEYaGLaHtaCaaGNaGOaHuaHvaEjaHCaHzaDDaGTaqtaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaqAaqAaabaabaabaabaabaabaabaabaabaabaoKaHEaHFasYasYaHGasYaHHaHJaHIaDQaHKaHMaDTaHNaHdaExavGaHeaHOaHfaCnaCnaHgaHhaHiaHjaHjaHRaHPaHTaHSaHUaHpaHpaHqaHpaHVaEfazUaHYaHXaEiaHZaIcaHwaHxaGoaHyaIdaHAaHBaFRaIfaEiawbaHDaIhaIlaIjaInaImaIpaIoaHLaHLaHLaIqaIsaIraHLakkaIuaHQaIwaIvaIyaIxaaUaBEaIDaHWaIGaIEaIHaIaaIaaIbaIKaIIaIeaGqaILaIgaxnaxnaxnaxnaIMabKauDauDauDauDauDauDauDauDaIiaIOaIiawhaGFaGFaGFceCaIkaIkaIkceCaGFaGFaCaaCaaCaaCaaCaaCaaCaaIPaCaaIQaISawkaIVaIUaIWawkaJbaIYaItaItaJdaJcaJeaItaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKaqeaJhaJgaIzaJhaIAaIBaICaDPaDQaDQaDQaDQaDQaDQaJjaJiaIFaoQaJlaCnaJmaIJaJraJoaJoaJsaJtaoQaJvaJuaJwaHpaHpaIRaHpaJxaEfazUaITaJEaEiaEiaEiaEiaJFaGoaHyaIdaJGaIXaFRaJHaEiawbaHDaIZaJaaJaaJJaJIaJTaJSaHLaJfaJVaJUaJXaJWaJkaJYaJZaJnaKaaJpaJqaJqaKcaKbaKgaKdaKiaKhaKjaJyaJyaJzaJAaJBaJCaJDaKlaKkaDSaKnaKoaDUaDZabIaKqaKpaJKaxDaxDaJLaxDaJMaxDaxRaxDaxDaJNceEaIiaJPaJPaJPaJPaJPceFaJRaJLaKraKuaKsaKuaKvaKAaKyaKCaKBaKBaKDaKFaKEaKGaKeaKfaKJaKLaKKaKPaKMaKQaItaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaabaabaabaabaoKaKmapHaKRaLcaLbaLdapHapHaLeaoKaLfaKtaLhaLiaKwaKxaLlaKzaoQaoQaoQaoQaoQaoQaoQaoQaoQaoQaoQaLnaLmaLpaLoaLqaLqaLsaLraKHaKIaLuaLtaEiaLyaLzaHwaKNaGoaKOaLAaLBaEiaEiaEiaEiaLCaHDaKSaKTaKUaKVaKWaKXaKYaHLaKZaLaaJUaLDaJWaLaaLEaLHaLFaLIaLgabIaLJaaUaBEaBEaBEaBEaBEaBEaxnaxnaLKaLjaLkaAsaAsaILaAsaLLaAsaFoaLMaFqabKaLOaLNaLQaLPaLPaLPaLWaLSaMdaMcaLvaLvaLwaLvaLxaLvaMgaMeaMkaMjaMmaMlaMpaMnaLGaMqaqtaMraMxaMtaMBaMzaMCaMBaMEaMDaMFaKeaLRaMJaLTaLUaLUaLVaMKaItaLXaLXaLXaLXaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaoKaLYaLZaLZaMaaMbaMMaMLapHapHaoKaMNaMfaMNaMOaKwaKxaLlaMhaKwaaaaaaaMiaMPaMSaMQaMXaMUaMoaMYazUaEIaNdaMsaMsaMsaMsaNeaEfaMuazUaMvaEiaMwaFRaNfaIdaGoaMyaIdaNgaMAaNiaNhaEiaLCaHDaNjaNlaNkaMGaMHaMIaNmaHLaNpaNraNqaNuaNtaLaaNvaNwabIaMRaLgabIaNxaaUaMTaNyaMVaMWaNzaxnaNAaNBaNaaNbaNcaAsaGqaNCaFkaDSaNDaGwaDUaNFaNEaNHaNGaNLaNIaNIaNMaNNaNnaxDaxDaxDaxDaNoaNOaIiaxDaNPaxDaNQaxDaNsaxDaNSaNRaNVaNTaNVaNYaNZarTarTaOaarTarTaOdaOcaOgaOeaOiaOhaOoaOkaOkaLVaOpaKeaNJaNKaOraLXaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaoKaoKaoKaoKaoKaOsaOtaoKaoKaoKaoKaOuaOzaOvaOzaOAaOzaOBaKwaKwaaaaMiaMiaODaNUaOFaNUaNWaNXaOJazUaEIaOLaOKaObaONaOOaObaOPaOfazUaOQaEiaEiaEiaEiaOSaORaOjaIdaGoaOVaFRaGoaEiaLCaHDaOlaKTaOmaOnaMIaMIaOWaHLaOXaOqaOYaPbaOZaLaaJYaPdaPcaOwaOxaOyaPeaaUaPfaxnaPnaOCaNzaxnaPoaNBaOEaLjaPraOGaOHaILaOIaxnaxnaxnaxnaPuaPtakkaNQaPvaxDaOMaOMaPwaOMaPyaPxaPxaPzaOMawhawhawhaPBaGFaPCaxDaOTaOUaOUaPEaOUaOUaOUaPFaPHaPHaPKaPJaPaaPaaPOaPNaPPaKeaPSaPRaPgaPgaPgaPhaPiaKeaPjaPkaPlaLXaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaQaabaabaabaabaabaabaPmaPmaabaabaabaKwaKwaKwaKwaKwaKwaMfaPVaKwaaaaaaaMiaQfaPpaPqaQgaPpaPsaQiaQhaQlaQjaQnaQmaQuaPAaQxaQvazUaPDaQzaQyaEiaPGaFRaHwaQAaGoaHyaIdaFRaPIaFRaQCaEiaLCaHDaQFaPLaPMaQHaQGaQIaPQaHLaQJaLaaJUaLDaQKaPTakkakkakkakkakkakkakkakkaPUaxnaQMaPWaPXaPYaPZaPZaQaaQbaQcaQdaQeaQOaQNaDSaDhaQPaDUaQScfQakkaNQaPvaxDaQTaQkaQWaQVaQXaQoaQpaQqaOMaQraQsaQtaQYaGFaQZaNnaQwaRaaRcaRbaRdaQBaOUaReaQDaQEaRgaRfaRiaPaaRkaRjaRlaKeaQLaRnaRpaRoaRqaQQaQRaKeaRsaPlaRvaLXaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaeLafGaQUaQUaQUaQUaQUaRxagCafGafQafGafQaabaaaaaaaaaaKwaKzaPVaKwaaaaaaaMiaMiaRCaREaRDaRGaRFaRNaRIaRTaRRaRUaEfaRYaPAaRhaSbaSdaScaSeaRmaEiaSkaFRaSlaIdaGoaHyaIdaFRaSmaFRaSnaEiaLCaHDaHDaHDaHDaHDaHDaHDaHDaHLaRraLaaJUaLDaSpaRtaRtaRuaSqaLaaRwaSraRyaRzaPUaxnaxnaxnaxnaxnaRAaRBaOEaAsaAsaAsaAsaILaAsaSsaAsaFoaStaSuabKakkaSvaPvaxDaSwaRHaSxaRJaRKaRLaRMaSAaOMaROaRPaRQaQYaGFaSCaRSaSGaSFaRVaRWaRXaSHaOUaRZaSaaSaaSaaSIaSKaSJaPOaPNaSLaKeaKeaKeaKeaKeaItaItaItaItaLXaSfaLXaLXaLXaLXaLXaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaeLaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaabaabaabaaaaKwaKzaPVaKwaaaaaaaaaaMiaShaSiaSjaSNaSMaSPaSOaSoaSQaSSaSRaSUaPAaTaaSYaTdaTcaSYaTeaEiaSyaFRaHwaSzaTfaSBaTgaSDaSEaFRaThaEiaTjaToaTlaTlaTlaTraTraTlaTvaHLaTwaLaaJUaTCaTAaTDaLaaLaaTEaLaaTFaTHaTGaSTaTIaSVaSVaSWaSVaSXaSVaSVaTJaSZaSZaTKaTbaTTaTQaDSaTUaGwaDUaTVabIakkaxDaPvaxDaSwaRHaTYaTWaTiaTZaTkaUaaOMaTmaTnaQtaQYaGFaUbaTpaTqaUdaTsaTtaTuaUeaOUaUfaTxaTyaTzaUiaTBaUnaPOaUoaUraUqaUtaUsaUBaUwaUCaTLaTMaTNaTOaTPaUDaTPaTRaTSaLXaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaQafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaabaabaabaabaKwaKzaPVaKwaaaaaaaaaaMiaMiaMiaUFaUIaUHaUKaMiaTXaUNaURaUOaUSaUcaUUaUTaUTaUTaUVaRmaEiaEiaEiaEiaUgaUhaUWaUjaUkaEiaEiaEiaEiaUlaUlaUlaUlaUlaUmaUmaUmaVcaHLaHLaHLaVhaUpaVlaHLaHLaHLaHLaHLaHLaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaVoaVoakkaxDaPvcfRaSwaVwaVxaUuaRKaRKaRKaUvaOMaQtaQtaQtaQYaGFaVyaUxaQwaUdaUyaUzaRXaUAaOUaVzaVCaVBaUEaVIaTBaUnaPOaPNaUGaVJazEasGaVKaUJaVLaULaTPaUMaTPaVMaLXaTPaTPaVPaLXaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaaQaabaabaabaKwaKzaPVaKwaKwaKwaKwavzazUazUazUazUcfSaUPaUQazUaVQaVSaVRaVUazUazUazUazUazUaITaQzaVYaVVaUXaUXaUXaUXaUYaUXaUZaVaaUXaVbaUXaWaaUXaUXaVdaVeaVfaVgaVgaWcaViaVjaVkaWdaVmaVmaVnaWfaVpaVgaVgaVgaVfaVqaIiaxDaxDaJLaVraxDaxDaJKaxDaxDaVsaJMaxDaJNaVtaxDaxDaJLaxDaVuaVvaVvaWjaxDaPvaxDaWlaWkaWmaVAaWoaWnaVDaVEaOMaVFaVGaVHaWpaGFaWraWqaWtaWsaVNaVOaRXaWuaOUaWvaSaaSaaWxaWwaVTaWyaPOaPNaWzaVWaVWaVWaVWaVWaLXaVXaTPaTPaTPaWBaLXaTPaTRaWbaLXaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaeLaabaabaabaKwaWDaWCaWeaWeaWeaWeaWEaWgaWgaWgaWgaWgaWhaWgaWiaWFaWHaWGaWIaWIaWIaWIaWIaWIaWNaWJaWQaWPaWTaWTaWTaWTaWWaWVaWTaWXaWTaWTaWTaWZaWTaWTaXbaXaaXdaXcaXkaXeaXcaXcaXcaXlaXlaXlaXlaXlaXlaXlaXmaXlaXdaXoaXpaLPaLPaLPaLPaLPaLPaLPaLPaLPaLPaXqaLPaLPaXraLPaLPaLPaLPaLPaLPaLPaLPaLPaXsaxDaOMaOMaXtaOMaOMaOMaOMaOMaOMaWKaWLaWMaXuaWOaOUaOUaXxaXwaWRaVOaRXaWSaOUaXyaWUaXzaXBaXAaWYaPaaXIaXHaXJaVWaXLaXKaXMaXfaLXaLXaLXaLXaLXaLXaLXaXiaXjaLXaLXaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqAaqAaaQaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaeLaqAaabaabaKwaKzaXNaKwaKwaKwaKwavzaXOazUazUaXPazUazUazUaXnaXQaDaaDacfTaDaaDaaDaaDaaDaaDaaXRaXTaXSaXVaXUaUXaUXaUXaXWaUXaUXaUXaUXaUXaXvaUXaXXaVdaVeaVfaXZaYaaVgaYcaVgaYcaVgaYdaVgaYcaVgaYcaVgaYeaXCaXDaXEaXFaDsaXGaDsaYfaXGaDsaDsaYhaYgaYgaYgcfUaYlaYmaYgccEaYnaYnaYnccFaYoaDsaDsaYqaYpaYwaYraYyaYyaYyaYAaYyaYBaYyaYyaYCaWMaYEaYDaOUaXYaYHaYFaRXaYbaRXaYKaOUaPaaYLaPaaPaaPaaPaaPaaPOaPNawAaVWaYNaYMaYRaYOaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaeLaaaaabaabaKwaKzaYSaKwaabaabaabavzaYTaZbaYVaPAazUazUaZfaZhaZgazUazUaPAaPAaYsaYtaYtaYtaYuaYvaPAaUlaUlaUlaUlaUlaUlaZiaYxaYxaYxaYxaYxaYxaYxaYxaYxaYxaYxaVgaYaaZjaYzaYzaYzaYzaYzaYzaYzaYzaYzaZmaZpaVgaUmawhawhawhaZxaZraZzaZyaYGaYGaZAaYGaYIaYIaYIaYIaYIaYIaYJaZBaZCaZCaYJaZGaYJaYJaZKaZIaYPaYPaYPaYPaYPaYQaYQaYQaYQaYQaZMaWMaZOaZNaOUaYUaZPaYWaYXaYUaRXaYYaOUaYZaZaaZRaZcaZdaPaaZeaZTaOcaOgaZVaZYaZWaZZaZkaLXaYiaYiaYiaYiaYiaLXaQtaTnaYkaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaeLaaaaabaabaKwaKzaXNaKwaabaabaabaabaabaabaabaaQaZoaZoaZobabaZoaZoaZoaZoaaQaaQaaQaaQaaQaaQaaQaaQaabaabaabaabaabaZqbaeaZsaZtaZuaZvaZwbafbahbagbajbaiaYxbakaYacfVaYzaZDaZDaZDaZDaZDaZDaZDaYzcfWbanaVgaUmaabaabawhaZJaxDaNsbapaYGaZLbarbaqaYIbaxbazaZQbaDaZSaYJbaEaZUaZUbaGbaFaZXbaIbaKbaJbaNbacbadbaPbaQaYQbaUbaTbaUaYQbaWbaVbaZbalaOUbbbbbfbaobbgaYUaRXbbhaOUbbibasbatbaubavaPabawaPOaRjaRlaVWbbkbaybbnaVWaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaeLaaaaaaaabaKwaKzaXNaKwaabaabaabaabbbpbbqbbqbbrbaHbbtbbsbbubaLbaMbbvaZobcfbcfaKzaKzaKzaKzaKzaZqaZqaZqaZqaZqaZqaZqbaeaZsaZtaZwbaObbxaZsbbzbaRbaSbbAbbBaVgbbEbbCaYzaZDbaYaZDaZDaZDbaYaZDaYzaZmaZpaVgaUmaabaabawhbbaaxDbbGbbcaYGbbdbbebbIaYIbbMbbPbbNbbjbbRaYJbblbbmbblaYJbbVbbYbbWbccbcbbcebcdbchbcgbbwaYQbcibbybcjaYQbckaWMaWMaWMaOUbclbcnbbDbcoaYUaRXbcraOUbcsbbHbcubbJbbKaPabbLbcwbcvbbOaVWbcxbbQbcyaVWaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaeLaaaaaaaaaaKwaKzaXNaKwaabaabaabaabbczbcBbbXbcCbbZbcabcDbcFbcEbbZbcIaZoaKzaKzaKzaKzaMfaKzbcJbcMbcLbcNbcNceGceGceGbcOaZsaZsaZsaZsaZsaZsbaSbcPbcmbcSbcTaVgaYaaVgaYzaZDbcqbcqaZDbcqbcqaZDaYzaVgaZpbcVbctbctbctbctbctbctbctbctbcXaYGaYGaYGaYIbcYbdabcZbcZbdbaYJaYJaYJaYJaYJbdcbcAbbWbdebddbdhbdfbdibcGbcHaYQbdkbdjbcKbdlbdobdnbdqbdpaOUaOUaOUaOUaOUaOUbcQaOUaOUaPabcRaPaaPaaPaaPaaqtbdraqtbdsaVWaZkbdtbduaVWaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaYkaYkaYkaYkaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQafGaQUaQUaQUaQUaQUaRxaSgaRxaSgaRxagCaeLaaaaaaaaaaKwbcWaXNaKwaabaabaabaabbdvbdxbdwbdybbZbbZbdzbbZbdAbbZbdBaZobcJbcMbdCbcMbcMbcMbdDaKzbdgaKzceJbdFbdEbdEbdEbdJbdJbdJbdJbdJbdKbdNbdmbaSceKbdQaVgaYabdRaYzaZDaZDaZDaZDaZDaZDaZDaYzbdSbdVbdTbctbdWbeabdYbebbeabedbecbelbehbeqbepbeubetbevbdGbdHbdIbeybewbdLbdMbeAbezbdPbeBbeDbeCbeEbdUbeHbeGbdXaYQbeIbdZbeJaYQaYQaYQbeObeKbeKbeKbdnbePbeebefbegbeQaYkbeiaRPbejaTnbekaRPaqtbeTaMqaMqaVWaVWbemaVWaVWaLXaLXaLXaLXaLXaLXaLXaQtbenaQtaRPbeobeUaYkaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaSgaQUaQUaQUaQUaQUaQUaQUaQUaQUaQUaRxaeLaaaaaaaabaKwbcWaXNaKwaabaabaabaabbczbeVberbesbbZbbZbeWbbZbeXbbZbeYaZobeZaKwaKwaKwaKwaKwaKwaKwbdgaYxaYxbexaYxaYxaYxaYxaYxaYxaYxaYxaYxbfcbfbbfcbfdaYxaVfbfeaVfaYzaZDbcqbcqaZDbcqbcqaZDaYzaVfbffaVfbfhbfgbeFbfibfobeFbfsbfrbfxbeLbeMbeNbfBbfybfCbeRbeSbfEbfGbfFbfKbfIbfMbfLbfabfQbfVbfSbfWbdUbfZbfXbgaaYQbgbbfjbfkbflbfmaYQbfnbfnbfnbfnbfnbgcaQtbfpaRPbfqaYkbekaYkaYkaYkaYkaRPaqtbgdaqtbgfawkbftbfubfvaQtaQtaQtaQtaQtaQtaQtaQtaQtbenbggaRPbenaRPaYkaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaQaeLaaQabqaabaaQaeLaeLaeLaeLaeLaaQaaaaaaaabaKwbfwaXNaKwaabaabaabaabbghbbqbbqbgibfzbfAbgjbgkbfDbgnbglaZobgpaKwaabaabaabaabbfHaKwbdgaYxbgqbfJbgrbgtbgsbfNbfOaZsbfPaZwbfPbgubfRbgvbfTbfUaZHbgwaZjaYzaZDaZDaZDaZDaZDaZDaZDaYzaZmaZpaVgbgybgxbfYbgzbgAbfYbgEbgDbgGbgebeMbeNbgMbgHbgNbdGbeSbgPbgTbgQbaFbgUbgmbgWbgobgXbhfbgZaYPaYPaYPaYPaYPaYQbhgbfjbhjbhibhlaYQbhnbhmbhpbhobfnbhqbgBaVFbgCbhrbhsbeebeebeebeebeebeebgFbhwbhtasGbgIbenbfubenbenbgJbenbenbenbgKbenaRPbenaRPaYkaYkaYkaYkaYkaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaKwaKxaXNaKwaabaabaabaabaabaabaabbgLbgLbgLbgLbgLbgLbgLbgLbgLbhxaKwaabaabaabaabbfHaKwbhybgObhzbhCbgRbgSbgRbgRbhDaZsbhIbgVbhIbhNbhMbgYbhOaVgaVgaYacfVaYzbhaaZDaZDaZDaZDaZDaZDaYzbdOaZpaVgbctbhSbhhbhTbhUbhhbhkbhVbhXbgebibbiabihbiebikbdGbeSbinbiobhubaFbhvbhvbhvbhvbhvbiqbipbisbirbhAbhBbiwaYQbixbhEbhFbhGbhHbiybhJbhKbhLbizbfnbhqbgBbgBaQtaQtaYkaYkaYkaYkaYkaYkaYkaqtbiEbiDbiIawkbhQbhQbhQbhQbhQbhRaYkaYkaYkaYkaYkaYkaYkaYkaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaKwaKxaXNaKwaabaabaabaabaabaabaabaabaabaabaabaabaKwbiNbcMbdCbiOaKwaabaabaYxaYxaYxaYxaYxaYxbiPbiQbhWbiRbhYbhZbiTaZsbfPaZwbfPbiUbicbidaYxbiXaVgaYaaZjaYzaYzaYzaYzaYzaYzaYzaYzaYzaZmaZpaVgbfhbjabiibfYbfYbiibhkbctbijbjfbilbimcfYbjgbjjbjjbjqbjoaYJbjrbjsbhvbitbiubivbhvbjvbjtbjxbjwbiAbiBbiCaYQbjyaYQaYQaYQaYQaYQbjzbiFbiGbiHbjAbhqbiJbiKbiLbiMbiMbgBaaaaabaabaabaabbjBbjDbjCbjHbjGbiSbjIbjKbiVbiWbjMaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaKwbiYaXNaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwbeZbiZbiZbiZaKwaKwaKwaYxbjObjbbjcbjdbjebjPbjSbjhbjibjhbjTbjkbjlbjmbjnbjnbjUbjpbjpbjWbjYaVgbkaaVgbkbaVgbkcaVgbkdaVgbkcaVgbkbaVgaZpaVgbgybkfbkhbkgbkjbkibkkbjEbkmbklbkpbkobjLbkqbjLbjLbgebksbjNbkwbkxbhvbhvbhvbjQbjRbkzbkybkAbjVbkBbjXbkCbjZbkEbkDbkGbkFbkIbkHbkKbkJbkMbkLbfnbkNbkObkObkObkObkPbknaabaabaabaabaabbkQasGbkRasGbkSbkrbkWbktbkubkvbkXaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaKwaMhblableblcblcblcblcblcblfblcblcblcblcblcblcblcblgbiZbliblhbljbljbljblkblmbllbloblnblqblpbltblsblvblublyblwblAbkTbkUbkUbkVbgRbgRblBbjYaVgaYaaVgceLaVgcfZblCbkYbkZcfZaVgceLaVgaZpaVgbctblHblbblIbldblJblLblKblNblMblPblOblNblQblSblRblTblNblNblUblXbhvbitblrbjQbhvbmcblYbmebmdbmhblxbmkbjZblzbmlbmnbmmblDbfnbfnbfnbfnbfnblEblFblFblFblFblFbhqblGaabaabaabaabaabbmobmqbmpbmybmvbmAbmzbmCbmBbmFbmEaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKzbaebiZbmIbmGaKwaKwaKwaYxbmMblVblWbmObjebmPblZbmabmbbmbbmRbmQaZsbmSbgRbmfbmgbgRbmTaYxbjYaVgaYaaVgbmibmibmibmibmibmibmibmibmiaVgaZpaVgbmjbmUbmWbmVbnabmZbmjbmjbncbnbbmrbmsbmtbmubnebmwbmxbnfbjLbngbnhbhvbhvbhvceNbhvbnpbnkbmDbnrbnvbnvbnwbjZbmHbnxbmJbmKbmLbjZbnybmNbnAbnzbnCbnBbnEbnDbnFblFbhqblGaabaabaabaabaabbnGasGbkRasGbnHbkubmXbktbkubmYbnJaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaqAaqAaqAaZqbcWbnLbnKbnNbndaKwaabaabaYxbnObnOceOceObnQbnPbnPbnRbnibnjbnSbmQaZsbnlbnlbnmbnnbnobnoaYxbnTbiXaYaaVgbmibnqbnVbnsbntbnubobbnZbmiaVgaZpaVgbohbogbojboiboobolboqbopbjLborbozbnIbnIbnIboBboAboCbnIbnMboHbjLcgbboJbjLbjLboLboPboOboSboQbnUboTbnWbnXbnYboUboabnYboVbocbodboWbofboXboZboYbpabokbpbblFbhqbomaabaabaabaabaabbonawAbkRbpcbonbpebpdbpfbkubosbotaabaabaabaabaababqaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaabaabaabaabaqAaqAaZqbfwbaebouboubouboubouboubouboubouaYxaYxaYxbovaZsbowboxboxboybpgaZsaZsaZsaZsaYxaYxaYxaYxaYxbphaYacfVbmibpibpjboDboEboFboGbpkbmibdOaZpboIbplboKbpmboMboNboNbpobpnbppbngboRbpqbpsbprbpvbpubpzbpwbjFbpAbpBbpBbpBbpCbpBbpDbpFbpEbpGbpFbpFbpFbpHbpDbpFbpIbpLbpKbpObpMbpUbpPbpYbpWbqabpZbqbbptbqdblFbhqbgBaaaaabaabaabaqtaqtbqjbqgbiIaqtaqtbhRbhRbpxbpybhRaabaabaabaabaabaaaaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaqAaqAaZqbqkbqlboubqnbqmbqpbqobqrbqqbqtboubqubpJbpJbpJbpJbpJbpJbpJbqwbqvbqzbpNbqBbqAbpQbpRbpSbpTbpQbqDaYaaVgbmibpVbqFbpXbqJbqGbqMbqKbmiaVgaZpbqcbqObqebqfbqPbqhbqibqSbqRbqUbqTbqWbqVbqYbqXbqZbqsbrabnIbrebrdbrfbqxbqybrgbrhbnXbribqCbrjbqEbrkbnYbrlbqHbqIbrmbrnbqLbrobqNbrqbrpbqQbrrbrtbrsbrxbrwbryblFbhqbgBaaaaabaabaabaqtaqtasGbkRasGaqtaqtaabaabaabaabaabaabaaaaaaaabaabaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaqAaabaabaabaabaqAaqAaZqbiYbrDboubrEbrbbrcbrFbrHbrGbrKbrJbrMbrLbrQbrNbrNbrNbrNbrSbrNbrUbrNbrWbrNbrZbsbbsabsabpJbsdbjYaYaaVgbmibmibmibmibsgbrubrvbmibmibshbsjbsibsmboNbsnbqebqebrBbrCbspbsrbsqbeNbstbsxbrIbszbsybsAbnIbsCbsBbsEbrObrObrObrObrObrObrObrObrObrObrPbsFbrRbrRbrRbrRbrRbrRbrRbsGbrTbsHbrVbqabsMbrXbrYbsPblFbhqbgBaaaaaaaaaaqtaqtceQaKFaKybbOceRaqtaqtaabaabaabaabaabaaaaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaqAaqAaZqaMhbrDboubsUbsTbqpbsWbsXbskbslboubsYbpJbsZbsobsobsobtbbtabtgbssbsobsobsobthbpQbsubsvbswbpQbtiaYaaVgbtmbtlbtqbtnbtrbsDbtubttbtvaVgaYebtybohbsIbrBbsJbsKbsLbtzbsNbsObtBbsObnIbtEbtDbtHbtFbtJbnIbtLbtKbtPbtMbtRbtQbtSbtcbtdbtebtfbtTbrObtUbtVbrRbtjbtjbtjbtjbtjbrRbtkbtWbnYbtXbqabtYbtobtpbtZblFbuabgBaaaaaaaaaaqtbsRbsQbscbsSaUGbsebsfaqtaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaZqaZqaZqaZqbrDbtxbtxbtxbtxbtxbtxbtxbtxbtxbtxbuhbuibpJbtAbtAbtAbukbtAbtAbtAbtCbtCbumbtCbtCbtCbtCbtCbjYaYaaVgbupbuobtGbuqbtIbtIbusburbuuaVgaZpboIbuvbtNbrBbtObuBbuxbuFbuDbuHbuGbuIbnIbuJbnIbnIbnIbnIbnIbuLbuKbuNbuMbuPbuPbuQbudbuebufbuebuRbrObuSbwxbrRbtjbtjbtjbtjbtjbrRbuUbulbuVbunbuXbuWbvabuYbvbblFbhqbgBaaaaaaaaaaqtbtsbubaUGbucaUGbugbtwaqtaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabbuzbuAbvgaZqbuCaZqaZqbrDbtxbvhbuEbvkbvjbvqbvnbvsbvrbvybvvbvzbuObvBbvAbvEbvCbvIbvGbvJbtCbvLbvKbvMbuZbvObvNbvQbvPbbEbvebupbvRbvXbvSbsDbvibwdbwbbuuaVgbdVbvlbqObqebvmbtObwfbvobrCbvpbwkbwgbwlbnIbvtbvubwmbvwbvxbvwbwnbtKbwpbvwbwtbwsbrObwvbtfbvDbtfbwwbrObvFbwxbrRbtjbtjbtjbtjbtjbrRbjZbjZbjZbjZblFblFblFblFblFblFbhqbgBaaaaaaaaaaqtbutbvcaUGbvdbuwbvfbuyaqtaYkaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabbwFbwEbwHbwGbwLbwKbvTbvUbaebtxbvVbvWbwMbvYbvZbwabwObwcbwPbwebuibuObwRbwQbwhbwibwjbwjbwSbtCbwUbwTbwVbwobwWbwqbjYaVgaYacfVbupbwrbxfbwZbwubxgbxhbwrbuuaVgaZpbqcbxjbqebqebxlbwzbxpbxrbxqbxubxsbxwbnIbxybxxbwIbvwbwJbvwbxBbxzbxCbwNbsVbxDbxFbxEbtfbtfbtfbxGbrObxIbwxbrRbtjbtjbtjbtjbtjbrRbxKbxJbkObkObkObkObxLbkObkObkObxMbgBaaaaaaaaaaqtaqtbwXbwBbxQbxabxbceSceTaYkaabaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabbuzbuAbxcaZqaZqaZqaZqbrDbtxbxdbxebxTbxSbxUbxibxVbxkbxWbpJbuibuObwRbwQbxmbxnbxobxmbycbtCbyebydbyfbxtbygbxvbjYaVgaYaaVgbyibyhbymbykbxAbyobyqbttbyraVgaZpbyubyvboKbqebtObywbxHbyxbsNbyAbyybyCbvwbvwbvwbvwbvwbyDbvwbyEbtKbsVbxObxCbxPbyFbxRbyMbyJbyObyNbrObjZbyPbrRbtjbtjbtjbtjbtjbrRbhqbgBbgBbgBbgBbgBbxXbgBbxYbxZbiJbgBaaaaaaaaaaaaaqtaqtaqtaqtaqtaqtaqtbyWaYkaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaZqbyXbyYbtxbzabyjbzbbylbzcbxibynbzibxWbypbzobzmbwRbwQbxmbysbytbxmbzpbtCbzvbzsbzxbxtbzybxvbjYaZHbgwaVgbyzbzzbyBbzAbwubzBbzDbzCbyzbyGaZpaVgbuvbyHbyIbzEbyKbyLbzFbsNbzHbzGbzIbvwbzJbyRbySbyRbyTbzObzRbzQbzUbzSbyZbzYbrObrObrObrObrObrObrObzZbAabrRbrRbzdbzebzfbrRbrRbhqbgBbzgbxXbxXbgBbxXbgBbgBbgBbgBbgBaabaabaaaaaaaqtbzhbzhbzhbzhbzhaqtbAbaYkaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaZqaZqbzjbzkbzkbzkbzkbzlaZqaZqbAcaKzbtxbxdbznbxTbAdbAkbzqbynbzrbxWbpJbuibuObwRbwQbxmbAlbztbzubAmbtCbzwbAobAsbAqbAtbxvbvPaVgaYaaVgbyzbAubAybAwbACbAAbyzbADbyzaVfbAFaVfbsNbsNbsNbsNbsNbsNbsNbsNbAGbijbijbvwbAHbzKbzLbzMbzNbxObyEbtKbAObzPbAPbxPbARbAQbzTbASbzVbzWbzXbATbAVbAUbBcbBbbBdbAebAfbAgbhqbgBbxXbAhbAibxXbAjbgBaabaabaabaabaabaaaaaaaaaaqtbzhbzhbzhbzhbzhaqtbAbaYkaabaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaZqbBibcNbcNbcNbcNbcNbcNbBjbcNbBkaKzbtxbAnbAnbxTbBlbApbBmbArbBnbBobpJbBpbAvbwRbBqbxmbxmbxmbAxbBrbtCbAzbBsbABbBtbBubxvaVgaVgaYaaVgbyzbAEbwrbBvbwubBxbyzbBzbyzaVgaZpaVgaVfbAIbAJbAKbALbAMaUmbANbxXbxXbxXbvwbBBbBAbBDbBCbBFbBEbzUbBGbxCbxObsVbxDbBHbAWbAXbAYbAZbBabzXbBIbBNbBLbjZbBebBfbBgbxXbxXbhqbgBbxXbgBbxXbxXbiMbgBaabaabaabaabaabaaaaaaaaaaqtbzhceUbzhceVbzhaqtbAbaYkaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaZqbaeaZqaKzaZqaZqaZqaZqaZqaZqaZqbBhbtxbBPbBObBVbtxbtxbtxbtxbtxbtxbBWbBXbuObCdbCcbCjbCibxmbAlbAmbtCbCnbCkbCpbCobCqbBwcfZaVgaYaaVgbyzbAEbwrbCrbwubBybCubCtbyzaVgbCvaXlaXdbCxaXlbCybCAbCzbCCbCBbCDbBJbBKbvwbvwbvwbvwbvwbvwbvwbCEbtKbBMbvwbCGbCFbzXbCHbBQbBRbBSbBTbzXbBUbBUbCIbBUbCJbCKbkObkObkObxMbgBbxXbAjbiJbxXbiMbgBaabaaaaabaaaaaaaaaaaaaaaaqtbzhceWceXceWbzhaqtbAbaYkaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaZqbaeaZqaKzaMfaKzaKzaKzaKzaKzbBYbBhbBZbCabCabCbbCLbCMbCebCfbCgbBhbChbCSbCNbtAbCUbClbCmbxmbxmbCVbtCbCZbCWbDbbDabCsbtCbtCaVfbDcaVfbyzbyzbyzbDfbDhbCwbyzbyzbyzbDibDlbDjbDmbDjbDjbDobDqbDpaUmbkNbDsbDrbDtbDtbDtbDrbDrbDrbDubvwbDzbDxbuNbDDbDGbDFbDHbCObCPbCQbCRbDIbzXbCTbDMbDLbBUbDNbgBbgBbgBbgBbgBbgBbxXbgBbgBbgBbgBbgBaabaabaabaabaabaaaaaaaaaaqtceZbzhbzhbzhbzhaqtbAbaYkaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaZqaZqbaeaZqaZqaZqaZqaMfaZqaZqaZqaKzbBhbCXbCYbDPbDQbDPbDSbDRbDdbCabBhbDebDVbDgbtAbDXbEabDZbDkbEbbEcbDnbEebEdbEhbEfbEkbEibDnbElaYaaVgaVgbfUbDwbEmaVgaVgbDyaVgaVgaVgbEmbEpbDAbDBbDCbDAbEqbDEbDAbErbDAbDAbDAbDAbDAbDAbDAbDAbDNbvwbxNbEsbtPbEtbExbDJbDKbEzbEEbEBbDObEHbzXbEIbEKbEJbBUbDNbgBbDTbAibzgbxYbgBbxXbgBaabaabaabaabaabaabaabaabaabaabaabaaaaqtaqtaYkaYkaYkaqtaqtbAbaYkaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaabaabaabaZqbfwbaeaZqbBYaMfaKzaKzaZqbBYaZqaZqbBhbDUbELbCfbDWbCfbCfbDWbENbDYbBhbEPbuibERbtAbESbETbESbEUbBqbEVbDnbEWbEgbEYbEXbEjbEZbDnbFabFbbEnbEnbEobEnbFcbFfbFebFgbFebFebFebFhbcVbDAbEubEvbEwbFibEybFjbEAbFkbECbEDbDAbFmbEFbEGbDAbDNbvwbvwbvwbFnbzXbzXbzXbzXbzXbzXbzXbzXbzXbzXbFobBUbBUbBUbDNbgBbiJbAibAhbxXbgBbAjbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBaaaaaaaaaaYkbFpbFqbFqbFqbFsaYkaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaabaabaabaaaaZqbEMbaeaZqaKzaZqaZqaKzaKzaKzaZqaKzbBhbFtbEObFubEQbFwbFybFxbFAbFzbFFbFBbFGbpJbtAbFHbFJbFIbFPbFdbFQbDnbFTbFSbFXbFWbGbbGabDnaYaaVgaVgcfZbFlaVgaVgbGcaVgaVgaVgcfZaVgaVgaVgbDAbGebGfbGfbGkbEybEybEybGmbFrbGpbGnbGrbFvbGsbDAbGtbDrbDrbDrbDrbGubGvbDrbDrbDrbDrbDrbDrbDrbDrbGwbGubDrbDrbGxbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbFCbgBaaaaaaaaaaYkbAbaYkaYkaYkaYkaYkaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaabaabaabaaaaZqbiYbaeaZqaKzaKzaZqaKzaZqaKzaMfaKzbBhbFDbFEbCabGGbGEbGMbCacfabFKbFLbFMbuibCNbtAbFNbFNbFNbFNbFNbFNbDnbDnbFObGNbDnbDnbDnbDnbGQbFRbFRbFRbFRbFRaVfbGRaVfaUmaUmaUmaUmaUmaUmbDAbGSbEAbFUbFVbEybEybEybGTbEAbGUbDAbFYbFZbGVbDAbDNbgBbgBbGWbgBbgBbgBbgBbGXbgBbgBbgBbiMbGdbiJbGYbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaZqaZqbaeaZqaZqaZqaZqaZqaZqaZqaZqaKzbBhbHcbFLbFLbFLbFLbFLbFLbFLbGibGibGjbHdbGlbGibFNbHfbHebGobHgbGqbHibHnbHjbHtbHrbHDbHvbFNbaebFRbGybGzbGybFRbGAbHFbGAbGCaaaaaaaaaaaaaaabDAbGDbEAbHGbGFbEAbEybEybHHbGHbHJbDAbDAbDAbDAbDAbDNbgBbxXbxXbGJbgBbGKbANbANbGLbHNbgBbgBbgBbgBbHObgBbANbANbGObANbANbxXbGObGPbxXbxXbGObxXbxXbxXbGObxXbxXbGObxXbxXbxXbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaZqbHRbHQbcNbcNbHVbcNbcNbcNbcNbcNbcNbHWbFLcfbcfbcfbcfbcfbbFLbGibHYbHXbIabHZbIbbFNbGZbHabHbbHbbIibIcbIlbIjbIubHhbHhbIvbFNbaebFRbIxbHkbHlbFRbHmbIzbHmbGCaaaaaaaaaaaaaaabDAbHobHpbHpbHqbEAbEybEybEAbEAbIAbHsbICbHubDAbIFbGxbgBbHwbHxbHybgBbHzbANbxXbANbHAbGXbHBbHCbgBbANbIHbGLbANbHEbIJbIIbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbHEbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaabaabaZqaZqaZqaZqaZqbfwbHIaKzaZqaZqaZqaKzbgpbFLcfbcfbcfbcfbcfbbFLbGibILbHKbHLbHMbINbFNbIPbHPbGZbGZbIZbIVbHSbHTbHUbHhbHhbJfbFNbaebFRbJkbJmbJlbJobJnbJqbJpbGCaaaaaaaaaaaaaaabDAccGbEAbIdbIebIfbIfbIfbIfbIfbIgbEybIhbFUbDAbJrbgBbgBbgBbgBbgBbgBbJsbIkbJvbImbJsbgBbInbxXbIobANbgBbANbxXbIpbIqbIpbIpbIpbIpbIrbIrbIrbIrbIrbIpbIpbIpbIpbIpbIpbIpbIsbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaabaabaabaZqaZqaZqaKzaZqaqAaZqbItbJBbFLcfbcfbcfbcfbcfbbFLbGibJEbIwbJGbIybJIbFNbJMbHbbIBbJObIDbIEbJSbJQbJVbJUbJUbJWbFNbJYbFRbJZbIMbKdbFRbIObKfbIObGCaaaaaaaaaaaaaaabDAbEAbIQbIRbISbEybITbEybEybITbITbITbIhbEvbIUbKgbiMbIWaabaaaaaabgBbIXbIYbKjbJabJbbgBbJcbJdbJebKmbgBbJgbJgbJhbIpbIrbIrbJibIrbIrbIrbJibIrbIrbIpbJjbIpbIpbJjbIpbIpbxXbgBaaaaaaaYkaYkbKnaYkaYkaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaZqaKzaZqaZqaZqaZqbeZbFLcfbcfbcfbcfbcfbbFLbGibKtbKqbKBbKxbKDbFNbKFbKEbKHbFNbFNbJtbJubKLbJubJtbFNbFNbFNbaebFRbJwbJxbJwbFRbJybKfbIObGCaaaaaaaaaaaaaaabDAbEAbIQbJzbISbEybEybEybEybEybEybEybIhbGDbJAbKSbiMbJCaabaabaabbgBbJDbIYbKTbJabJFbgBbgBbgBbgBbKWbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBaaaaaaaYkbJHbAbbLbaYkaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaqAaqAaabaabaZqaMfaZqbJJbJKaZqbeZbFLcfbcfbcfbcfbcfbbFLbGibJLbLebJNbLfbJPbFNbLgbHhbJRbLibFNbJTbJubLjbJubLkbFNbLlbcNbBkbFRbJwbJXbLmbFRbLnbKfbKabGCaaaaaaaaaaaaaaabDAbEAbIQbKbbISbEybITbEybEybITbITbITbIhbFUbJAbKSbiJbJCaabaabaaabgBbgBbgBbgBbgBbgBbgBaabaabbKcbLpbKeaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaYkaRPbLqbLvaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaqAaqAaabaabaZqaKzaZqbKhbKibLwbgpbFLbFLbFLbFLbFLbFLbFLbGibKkbKlbLBbLxbJPbFNbKobHhbHhbKpbFNbFNbJubLEbJubFNbFNbrDaKzaKzbKrbKrbKrbKrbKrbKsbLGbIObGCaaaaaaaaaaaaaaabDAbEAbGpbKubKvbKwbKwbKwbKwbKwbKwbKwbLKbHGbKybKSbGdbKzaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabbKAbLMbKAaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaYkaYkaYkaYkaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqAaabaabaqAaZqaKzaZqbKCaKzaZqbLNbLObcMbcMbcMbcMbLPaKwbGibGibKGbLQbKIbGibFNbKJbHhbKKbLWbFNbKMbKNbKMbKNbKMbFNbaebKOaKzbKrbKPbKQbKRbKrbLZbMdbIObGCaaaaaaaaaaaaaaabDAbKUbKVbMebKXbKYbITbKZbLabITbITbITbIhbMgbDAbKSbgBbLcaabaabaabaabaabaabaaaaabaabaabaabaabbLdbMhbLdaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaqAaZqaKzaZqaZqaZqaZqaZqaZqaZqaZqaZqaZqbeZaKwbGibGibGibGibGibGibFNbMnbFNbFNbFNbFNbKMbKNbKMbKNbKMbFNbMoaZqbLhbKrbMpbMqbMqbMsbMrbMubIObGCaaaaaaaaaaaaaaabDAbDAbDAbDAbDAbDAbDAbDAbDAbDAbDAbDAbMvbDAbDAbKSbLcaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabbMwaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaZqaKzaKzaZqbLobMybMxbLrbLsbLtbvTbMGbMzbcMbcMbcMbMHbcMbcMbcMbcMbMIbLyaabaabbFNbKMbLzbKMbLAbKMbFNbaebMJaKzbKrbLCbLDbMMbKrbLFbMNbLHbGCbLIbLIbLIbLIbLIbDAbDAbDAccHbLJbMPbLLbLLbMTbMRbMUbMUbMVbMUbMUbMWbLcaaaaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaZqbcWaKzaZqbvTbLRbvTbLSbLTbvUbvTaZqaZqbLUaZqaKzbLVaZqaMfaZqaKzbhxaKwaabaabbFNbKMbKMbMXbKMbKMbFNbaebLXaKzbKrbKrbKrbKrbKrbHmbIzbHmbLIbLIbLYbNibMabMbbMcbNkbLIbNlbLIbMfbLIbLIbNpbNmbLcbMibLcbLcbLJbLcbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqbfwaMfaZqbvTaKzbMjbMkbMlbLSbvTaZqaKzaKzaKzaMfaKzaKzaKzaZqbMmbgpaKwaKwaKwbFNbNqbNrbNrbNrbNsbFNbrDbLXaKzaKzaKzaMfaKzbGCbNwbKfbIObNxbLIbNybMtbMtbMtbMtccIbLIbNBbNDbNCbNEbLIbNGbNFbLcbMAbMBbLJbLJbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaZqaKzaZqbLSaZqbMCbvTbMDbMEbMFaZqaKzaZqaZqbLVaZqbMGaZqaZqaKzbNHbLObLObLObNJbNIbcNbcNbcNbcNbNKbyYbMKaKzaMfaKzaKzaKzbMLbKsbLGbIObNNbNMbMtbMObNObMQbNPbMSbNRbNQbOgbNVbOhbLIbKSbLJbMYbLJbLJbMibLJbLJbLJbMZbLJbLJbLJbLJbLJbLJbNabLJbLcaaaaabaabaababqaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbNbbNcbNdbNebLSbLSaKzaZqaKzaZqbNfbNgaKzaKzbLUaZqaZqaZqbLuaZqbNhbOkbNjbNjbNjbOmbNjbNjbNjbNjbNjbNjbNjbNjbNjbNjbOpbKfbIObNNbNMbMtbMtbOqbNnbNobOrbLIbOxbOzbOzbOBbLIbKSbMAbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLJbLcaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbLSbNdaKzbvTbLTbKibvTaZqaKzaKzbNtaKzaKzaKzaMfaZqbNubLSbNvbLTbNhbOFbOEbOJbNzbNAbOKbOObOLbORbOPbOPbOPbOPbOSbOXbOWbOYbIObNNbNMbMtbMtbPcbNLbNobPdbLIbPebPfbOzbPgbLIbPibPhbLcbNSbNSbNTbNUbNUbNSbNSbLcbPkbLJbLJbLJbNWbLcbLJbLcaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbNXbNYbNZbvTbOabvTaKzaZqaKzaZqbObaKzaMfaKzaKzaZqbOcbOdbOebOfbNhbPnbNjbPvbOibOjbPxbOlbPybOnbOobOobOobOobPzbPDbPAbMNbLHbNNbNMbMtbMObOsbOtbNobOubLIbLIbLIbLIbLIbLIbKSbOvbLcbNSbNUbNUbNUbNUbNUbNSbOwbLJbLJbNSbLJbPIbLcbLJbLcaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbMGaZqaZqaZqaZqaZqaZqaZqaKzaZqbLUaKzbOyaKzaKzaZqbPPbKibOfbOAbNhbPnbNjbPUbOCbODbPVbNjbPybPWbOGbOGbOHbOGbOGbOIbPXbKfbIObPYbLIbQabOMbONbONbQebQbbLIaabaabaabaabbLcbKSbOQbLcbNSbNUbNUbNUbNUbNTbQfbLcbQgbOTbNSbOUbOVbLcbLJbLcaabaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaZqaKzaKzaKzaKzaKzaKzaKzaKzaKzaKzaKzbLVaKzaKzaKzaKzaKzaZqaZqbQsbQkbQtbNhbPnbNjbOZbPabPbbQvbQFbQybQLbQHbQNbQNbQNbQObNjbHmbIzbHmbLIbLIbPjbQPbPlbPmbQQbPobLIaabaabaabaabbLcbKSbLcbLcbLcbPpbPqbPqbPpbPqbLcbLcbLcbPrbMZbPsbLcbLcbMZbLcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaZqaZqaZqaZqaZqaZqaZqaZqaZqaZqaZqaKzaKzaKzbcfaMfaKzbPtbPuaZqbQSbKibPwbNhbPnbNjbQWbQVbQYbQXbNjbPybPWbOGbOGbPBbOGbPCbQZbIObKfbIObPEbPFbPGbPGbPGbPHbRaccJbPEbPEbPEbPEbPEbPEbKSbLcbPKbPLbLJbLJbLJbLJbNSbLJbNSbLcbPsbLJbPMbLcbNabLJbLcaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqaKzaKzaKzaKzaKzbObaZqbPNbPObRbbNhbPnbNjbPQbPRbPSbPTbRcbPybRgbRebRebRhbRjbOGbPZbIObMNbRlbPEbPEbRmbPHbPHbQcbRabPJbQdbRnbWMbWsbWMbPEbKSbLcbRqbLJbNTbQhbQhbQhbNUbLJbLJbLcbPsbNSbQibLcbLJbLcbLcaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqaZqbLuaZqaKzaZqaZqaZqbQjbvTbRrbNhbPnbNjbPTbQlbQmbPTbQnbPybQobQpbQqbQrbRtbOGbPZcghbKfbIObPEbPEbRubQubQubQubRvbQwbPJbQxbWsbWMbRwbPEbKSbLcbNSbLJbNUbQhbQhbQhbNUbLJbLJbLcbQzbNSbQAbLcbLJbLcaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbQBbPtaKzaKzbNtaZqbNhbNhbNhbNhbNhbPnbNjbPQbQCbQDbQEbRzbPybQGbRFbQIbQJbRtbOGbPZbIObKfbNNbQKbRGbPJbPJbPJbPJbRabPJbPJbQMbWMbWsbWMbPEbKSbRHbLJbNSbNSbNSbLJbLJbLJbNSbLJbOwbNSbNSbPsbLcbLJbLcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaZqaMfaZqaKzaKzaKzaKzaKzaZqbRIbRJbRJbRJbRJbRNbNjbPTbQRbRPbPTbQTbPybQUbRRbRRbRRbPzbOGbPZbIObRWbRSbRYbRXbSbbSabSbbSbbSdbRdbRdbSebPEbPEbPEbPEbKSbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLJbLcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaZqaKzaZqaKzaMfaKzaKzbLVaZqbPnbRfbRfbRfbRfbRfbRfbRfbRfbRfbRfbRfbShbSkbOGbOGbRibOGbSnbRkbSobKfbSpbPEbPEbSqbRabRobRobRobPJbPJbRpbSvbSrbRsbPEbSxbMUbMUbMUbSDbSzbMUbSEbLJbLJbLJbLJbLJbLJbLJbLJbLJbLcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaZqaKzbLuaKzaKzaKzaKzaMfaZqbPnbRfbRxbRxbRxbRxbRxbRxbRfbRAbRBbRfbRfbRfbRfbRfbRfbRfbRfbRfbRCbLGbNNbQKbRGbPJbRabRDbREbRDbPJbPJbRpbSIbPGbSMbPEbPEbSNbPEbPEbSObPEbPEbKSbSPbLcbLcbLcbLcbLcbLcbLcbLcbLcaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaZqaKzaZqbObaKzaKzbLUaKzbRKbPnbRfbRxcfAbRxbRxbRxbRxbRfbSQbRObSRbRQbSTbRfbSWbRTbRUbRVbSXbIObKfbNNbQKbRGbPJbRabTbbTbbTbbPJbPJbRpbTdbPGbRZbTjbPEbTkbScbTlbQxbTnbPEbKSbMAbLcaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqaKzaZqaZqaZqaZqaZqbLVaKzbPnbRfbRxcfAbRxbRxbRxbRxbRfbTqbRObSibRTbSjbTsbSlbRTbSmbTubTwbTvbKfbIObPEbPEbTCbTxbSsbSsbSsbStbSsbSubTDbSwbTEbSybTFbSAbSBbSCbTIbTGbPEbKSbSFbLcaaaaaaaaaaabaabaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqaKzaKzaKzaKzaKzbcJbTKbTKbRNbRfbRxcfAbRxbRxbRxbRxbRfbTqbRObSibTLbSJbSKbSLbTNbTPbTObTRbTQbTVcgibPEbSSbPJbTXbRobRobRobSUbPJbRpbTdbPGbSVbTYbPEbTZbSYbSZbPJbTabPEbKgbLcbLcaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaZqaZqaZqbcWaMfbNhbUabTcbTcbTcbRfbRxcfAbRxbRxbRxbRxbRfbUebTebTfbTgbThbTibSLbUfbTgbRTbUhbUgbKfbIObPEbTmbPJbUibRDbREbRDbSUbPJbRpbTdbPGbTobTpbUjbTrbUkbTtbTtbUmbPEbKSbLcaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaZqaKxaKzaZqbUobUnbUqbTybRfbTzbRxbRxbRxbRxbRxbRfbUvbRObUwbTObTObUxbTObUybRTbTHbSXbUzbKfbIObPEbTJbPJbUibTbbTbbTbbSUbPJbRpbUBbUAbTMbUCbPEbPEbUEbUDbUFbPEbPEbKSbLcaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaZqaZqaKzaZqbUabTcbULbUGbRfbRfbRfbRfbRfbRfbRfbRfbUObRObUfbRTbTSbTTbRTbTUbRTbUQbTwbIObKfbTWbPEbUUbUWbUVbPJbPJbPJbSUbPJbQxbUXbPJbUbbUcbUdbPEbUZbUYbUYbUYbUYbVabLcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaZqaKzbNhbUabTcbVcbVbbNhaabaabaabaabaabaabbRfbVdbRObUfbRTbVfbRfbRfbRfbUlbUlbUlbUlbVgbUlbPEbVhbVibPJbPJbPJbPJbUpbPJbVjbUrbUrbTIbPJbPJbVkbVlbLcbLcbUtbLJbKSbLcaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaZqaKzbNhbPnbUubUubVmbUubUubUubUubUubUubUubUubUubVnbVobRTbVpbSlbVqbRfbVsbVrbVubVtbVwbVvbPEbRDbVibUHbUIbUJbUHbUIbUJbUKbVxbPJbUMbREbUNbPEbVybLJbMBbLJbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaZqaZqaKzaZqbPnbUubUPbVzbURbUSbUTbURbUubVGbVIbVHbUubRObUfbRTbVpbSlbVJbRfbVNbVLbVObVObVQbVPbPEbPEbPJbUHbVRbUJbUHbVebUJbPEbPEbPEbPEbPEbPEbPEbVybLcbLJbLJbMibKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqbcWaKzaZqbPnbUubVYbVXbWabVZbWcbWbbWfbWebWbbWgbWlbWkbWnbRTbVpbSlbWobRfbWqbWpbWubWtbWxbWvbUlbPEbVkbPEbPEbPEbPEbPEbPEbPEbPEbUZbUYbUYbUYbUYbWybLJbLJbVAbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqbcfaKzaZqbPnbUubVBbVCbVDbVEbVFbWEbUubWFbWNbWJbUubVKbWQbVMbWRbSlbWTbRfbUlbUlbUlbUlbXabUlbUlbXbbMUbSzbMUbMUbMUbMUbMUbXcbLcbVybLcbLcbMYbMibLcbLJbVAbMZbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaZqaKxaKzaKzbPnbUubVSbVSbVTbVUbVVbUubUubUubUubUubUubVWbXdbVWbVWbVWbVWbVWbXgbXfbMRbMUbXibMUbXjbMWbLJbXkbWdbWdbWdbWdbXlbKSbLcbXmbLJbMZbLJbLJbLJbMZbMibLJbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbXnbWhaaaaabaZqaZqaZqaZqbPnbUubWibWjbVEbVSbXrbUubXsbWmbWmbWmbWmbXtbXybXubXDbWrbXFbVWbXHbXGbXPbLLbWwbWwbXQbWwbWwbXSbWzcfEbWzbWAbWBbKSbLcbVybLcbWCbLJbSFbLJbLJbLJbWDbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXTaabaaaaabaabaabaaabNhbXUbUubWGbWHbVEbVSbXrbUubWIbVWbVWbVWbVWbVWbXWbXubWKbWLbXZbVWbXHbYabNFbWObWPbYdbYfbWSbYhbWUbWVbWVbWWbWAbWXbKSbLcbVybLcbLcbLcbLcbMibMYbLcbLcbMibKSbLcaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbWYaabaabaabaaabNhbPnbUubWjbWZbVEbVSbYkbUubWIbVWbYmbYlbYnbXebXWbYobYqbXhbYrbVWbYtbYsbYvbMZbWPbYwbYybXobXpbXqbWWbWVbWVbYAbXSbYCbMUbYDbMUbMUbMUbMUbMUbMUbMUbYEbMUbMWbLcaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbXvbXwaaaaaabNhbNhbPnbUubXxbVSbVEbVSbXxbUubWIbVWbYFbXzbXubXAbXWbXzbXubXBbXCbVWbYGbXEbYIbYHbWPbYNcfFbXIbXJbXKbWVbWWbWWbWAbWAbLcbLcbLcbLcbLcbLcbLcbLcbMAbMAbUtbXLbLJbLcaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXMbXNbWhaaaaaaaaabNhbXObPnbUubXxbVSbVEbYPbXxbUubWIbVWbYQbXzbXubXRbYSbYRbYTbXVbYUbVWbKSbLcbLcbLcbWPbYVbWwbWwbWwbWdbWdbWdbWdbWdbWdbWdbXXbWAaaaaaaaaaaaabLcbLcbLcbLcbLcbLcbLcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbXNbXMaaaaaaaaabNhbXYbPnbUubUubUubYWbUubUubUubYXbVWbYbbYcbYYbXebYebYZbXubYgbXZbVWbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaabZibZnbZmaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaabNhbYpbZobRJbZpbRJbZqbRJbRJbRJbZrbVWbVWbVWbVWbVWbYubZsbZtbXhbZCbVWbKSbLcaaaaaaaaaaaaaaaaaaaaabYBaabaabaabaaaaaabZDbZFbZEaabaabaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXnbWhbXNaaaaaaaaaaaabNhbNhbNhbNhbNhbNhbNhbNhbNhbNhbZUbZJbZZbZXbVWcaabYebYZbXubYLbYMbVWbKSbLcaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaaaaabaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaccabbYjbYicadcadaaRcaeaabaabbZabZbbZcbZdbZebZfbZgbNhbZhbYpbYpcafbVWcahbYebYZbYocancaobVWbKSbLcaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaRaaRbYxaaRbYzbYJcaqbXnaabbZubZvbZwbZxbZxbZybZzbNhbNhbNhbYpcafbVWbYKbYecarcatcascavbVWbKSbLcbZGbZHbYObYObZIbZGbZGcawcazcaycaycaAaababqaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXTbYjcaBbYiaaRaaRccqcaqbZMbZLbZNbZxbZxbZxbZObZPbZzbNhaabbNhbZQcafbVWbVWbZRbZSbZTcaDbVWbVWbKSbLcbZGcaHbZVbZjbZkbZYbZGcaIcaOcaMcaPcbWcaRcaRcaRcaRcaRcaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaqbYzaaRbZlaaRcbacaZcbdcbccbdcbfbZxbZxcagbZzbZzbNhbNhbNhbNhcafbZGcbgcbhcajcakcbicbjbZGcbkbZGbZGcamcapcamcamcblbZGbZGbZGbZGcbpcbmaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaqaaRaaRbZBbZBaaRcbqcaubYpcaubZxbZxcbrbZwbYpbZwcbsbZzbZycbscafbZGcbtbZKcambZWcbucbvbZGcbxcbwbZGcbycapcaEcamcaFcaGcbzcbAcaJcbpcbmaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaabXnaabaabaaaaaaaaacaqaaRaaRaaRaaRcbBcaqbZMbZLcaLbZzbZxbZPbYpbYpbZxbNhbNhbNhbNhcafbZGcbCcbEcbDcalcaicbGcbFcbJcbHcbLcaxcbNcbMcaKcbRcbScbbcbVcbTcbXcbmaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaabYjaaRaaRaaRaaRaaRcbqcaucbecaubZcbZybZybZxbZzbZwbNhaabaabbNhcbYbZGcaNccbccacaScaQcccbZGcamccdbZGcaUcaVcaUcaWcbncaGcceccfcaJccgcbmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaabYjaaRaaRaaRaaRcaXcaZcbdcbccbdcchccjccicclcckbZwbNhaabaabbNhcafbZGbZGbZGcaYccnccmbZGbZGbZGccobZGbZHbYObYObZIbZGbZGbZGbZGbZGaabcbmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcacaaaaaRccpcboaaRaaRccqcaqbZMbZLcaLbNhbNhbNhbNhbNhbNhbNhaabaabbNhbZUbZJccrbNhbNhbNhbNhbNhccsbZJcctbNhccuccwccvccxaabaabaabaabaabaabcbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaRbYjaaRcbIcbIbYjbYjaabaabaabaabaabaabaabaabaabaabaabaaabNhbNhbNhbZUccyccyccyccyccycczbNhbNhbNhaabaabaabaabaabaabaabaabaabaabccAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbKccBcbOcbOcbOccBccCaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaabNhbNhbNhbNhbNhbNhbNhbNhbNhaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaabXTbXnaaaaaaaabbXTcbQcbPcbPcbPcbUaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaabaaaaaaaaaaabaabcacaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabbXnaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZaabaabcbZaabaabaabcbZaabaabaabaabaabcbZaabaabaabcbZaabaabcbZaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZaabaabaabcbZcbZcbZcbZcbZcbZcbZaabaabaabcbZcbZcbZcbZaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabcbZcbZcbZcbZaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/Aurora-MapDev/aurora-4.dmm b/maps/Aurora-MapDev/aurora-4.dmm new file mode 100644 index 00000000000..7ccc532bcef --- /dev/null +++ b/maps/Aurora-MapDev/aurora-4.dmm @@ -0,0 +1,376 @@ +"aa" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored) +"ab" = (/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ac" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored) +"ad" = (/turf/simulated/wall/r_wall,/area/mine/unexplored) +"ae" = (/turf/simulated/wall/r_wall,/area/maintenance/research_port) +"af" = (/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/cable{icon_state = "11-2"},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/research_port) +"ag" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ah" = (/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/up/supply,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ai" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ak" = (/turf/simulated/floor/plating,/area/maintenance/research_port) +"al" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"am" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) +"an" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port) +"ao" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ap" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port) +"aq" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port) +"ar" = (/turf/simulated/wall/r_wall,/area/maintenance/arrivals) +"as" = (/turf/simulated/open,/area/turbolift/main_mid) +"at" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"au" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"av" = (/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aw" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"ax" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"ay" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"az" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aB" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aC" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aD" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aE" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button{command = "cycle_interior";master_tag = "fuckyou1";name = "interior access button";pixel_x = 32;pixel_y = -26},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aG" = (/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aH" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/arrivals) +"aI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou1_inner";locked = 1},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aQ" = (/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "fuckyou1";pixel_x = -32;tag_airpump = "fuckyou1_pump";tag_chamber_sensor = "fuckyou1_sensor";tag_exterior_door = "fuckyou1_outer";tag_interior_door = "fuckyou1_inner"},/obj/machinery/airlock_sensor{id_tag = "fuckyou1_sensor";pixel_x = 32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;id_tag = "fuckyou1_pump"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aR" = (/obj/machinery/access_button{command = "cycle_exterior";master_tag = "fuckyou2";name = "exterior access button";pixel_x = -32;pixel_y = -26},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aT" = (/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou1_outer";locked = 1},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"aU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aV" = (/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou2_outer";locked = 1},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aX" = (/obj/machinery/access_button{command = "cycle_exterior";master_tag = "fuckyou1";name = "exterior access button";pixel_x = -32;pixel_y = 26},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"aY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"aZ" = (/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "fuckyou2";pixel_x = -32;tag_airpump = "fuckyou2_pump";tag_chamber_sensor = "fuckyou2_sensor";tag_exterior_door = "fuckyou2_outer";tag_interior_door = "fuckyou2_inner"},/obj/machinery/airlock_sensor{id_tag = "fuckyou2_sensor";pixel_x = 32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;id_tag = "fuckyou2_pump"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"ba" = (/turf/simulated/wall/r_wall,/area/maintenance/maintcentral) +"bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bd" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou2_inner";locked = 1},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"be" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bg" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bh" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bi" = (/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button{command = "cycle_interior";master_tag = "fuckyou2";name = "interior access button";pixel_x = 32;pixel_y = 26},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bk" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bl" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bm" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bn" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bo" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bp" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bq" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"br" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bs" = (/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bt" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bu" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bv" = (/obj/effect/floor_decal/corner/yellow,/obj/machinery/light,/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bw" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/maintcentral) +"bx" = (/turf/simulated/wall/r_wall,/area/maintenance/library) +"by" = (/turf/simulated/open,/area/turbolift/command_mid) +"bz" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bA" = (/obj/machinery/light/small/emergency{dir = 1},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bB" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bC" = (/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 4},/obj/structure/cable/green{icon_state = "12-0"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bE" = (/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 8},/obj/structure/cable/green{icon_state = "11-8"},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/maintcentral) +"bF" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/door/window/southleft,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/library) +"bG" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/door/window/southleft,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/maintenance/library) +"bH" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/door/window/southleft,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/library) +"bI" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/library) +"bJ" = (/turf/simulated/open,/area/turbolift/cargo_mid) +"bK" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/library) +"bL" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/maintenance/library) +"bM" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/library) +"bN" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/library) +"bO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/library) +"bP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/library) +"bQ" = (/turf/simulated/floor/tiled,/area/maintenance/library) +"bR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/library) +"bS" = (/obj/machinery/access_button{command = "cycle_interior";master_tag = "fuckyou3";name = "interior access button";pixel_x = 32;pixel_y = -26},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/library) +"bT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou3_inner";locked = 1},/turf/simulated/floor/plating,/area/maintenance/library) +"bU" = (/obj/effect/decal/warning_stripes,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "fuckyou3";pixel_x = 0;pixel_y = -32;tag_airpump = "fuckyou3_pump";tag_chamber_sensor = "fuckyou3_sensor";tag_exterior_door = "fuckyou3_outer";tag_interior_door = "fuckyou3_inner"},/obj/machinery/airlock_sensor{id_tag = "fuckyou3_sensor";pixel_x = 0;pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;id_tag = "fuckyou3_pump"},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/library) +"bV" = (/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou3_outer";locked = 1},/turf/simulated/floor/plating,/area/maintenance/library) +"bW" = (/obj/machinery/access_button{command = "cycle_exterior";master_tag = "fuckyou3";name = "exterior access button";pixel_x = -32;pixel_y = 26},/turf/simulated/floor/asteroid,/area/mine/unexplored) +"bX" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library) +"bY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library) +"bZ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library) +"ca" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/library) +"cb" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/library) +"cc" = (/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/maintenance/library) +"cd" = (/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/maintenance/library) +"ce" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/maintenance/library) +"cf" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/library) +"cg" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/library) +"ch" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library) +"ci" = (/turf/simulated/floor/plating,/area/maintenance/library) +"cj" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/library) +"ck" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/library) +"cl" = (/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 4},/obj/structure/disposalpipe/up{icon_state = "pipe-u";dir = 4},/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"cm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small/emergency,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) +"cn" = (/obj/structure/disposalpipe/down{icon_state = "pipe-d";dir = 8},/obj/structure/cable{icon_state = "11-8"},/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 8},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/library) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababadaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacabababadaaaaaaaaaaaaaaaaaaadaaaaababababacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacababababaaaaaaaaaaadaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacababaaaaaaaaaaadadadaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaadaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababadaaaaaaaaaaaaaaaaaaadaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacabaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacababababababaaadaaaaaaadaaababababacababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababacaaababababacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacababababababaaaaaaabacababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeafagahaiaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeajakalamaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeanaoapaqaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaadaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadarararararararararadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadarasasasasasasasaradaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadarararararararararadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaratauavavavawaxaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarayazaAaBavavaCaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaraDaEavaFavaGaHaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaraIaJaKaLaMaNaOaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaPaQaPabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaRabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaSaTaSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaUaVaWababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaXababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaYaZaYababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbbcbdbebfbabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababgbhbibjbibkblbabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababmbnbobpbibibqbrbsbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababtbubibibibvbwbababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbybybybybybxbxbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaabxaabababababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbsbsbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababzbAbBbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababCbDbEbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababrbababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbsbsbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaabxaaaabxaabxbxbxbxbxabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbFbGbHbIabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxbKbLbMbNbObPababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbJbJbJbJbJbJbxbQbRbSbTbUbVbWababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxbQbQbQbXbYbZababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxbQbQbQcaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbJbJbJbJbJbJbxbQbQbQcaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxcbbQcccaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxcdcecfcgababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaabxaaaabxaabxbxchbxbxabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxbxbxbxbxbxbxbxbxbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcicicicicicicicicicibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbxchbxbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcjcickbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcicicibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxclcmcnbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/Aurora-MapDev/aurora-5.dmm b/maps/Aurora-MapDev/aurora-5.dmm new file mode 100644 index 00000000000..c04ba79912c --- /dev/null +++ b/maps/Aurora-MapDev/aurora-5.dmm @@ -0,0 +1,1978 @@ +"aa" = (/turf/unsimulated/chasm_mask,/area/space) +"ab" = (/turf/simulated/wall,/area/space) +"ac" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/space) +"ad" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/fore) +"ae" = (/obj/structure/sign/electricshock,/turf/simulated/wall,/area/space) +"af" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/fore) +"ag" = (/turf/simulated/mineral/random,/area/space) +"ah" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/fore) +"ai" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Fore Solar Array"},/turf/unsimulated/chasm_mask,/area/solar/fore) +"aj" = (/obj/machinery/power/solar{id = "auxsolarnorth";name = "Fore Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore) +"ak" = (/turf/simulated/floor/airless,/area/solar/fore) +"al" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/fore) +"am" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/fore) +"an" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/fore) +"ao" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/fore) +"ap" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/fore) +"aq" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/fore) +"ar" = (/obj/machinery/power/solar{id = "auxsolarnorth";name = "Fore Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore) +"as" = (/obj/machinery/power/solar{id = "auxsolarnorth";name = "Fore Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore) +"at" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/fore) +"au" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "solar_tool_airlock";name = "exterior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/fore) +"av" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aw" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_tool_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"ay" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "solar_tool_pump"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "solar_tool_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_tool_pump";tag_exterior_door = "solar_tool_outer";frequency = 1379;id_tag = "solar_tool_airlock";tag_interior_door = "solar_tool_inner";pixel_x = 25;req_access = list(13);tag_chamber_sensor = "solar_tool_sensor"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"az" = (/turf/simulated/floor/asteroid,/area/shuttle/arrival/station) +"aA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aC" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_tool_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aF" = (/turf/simulated/wall/r_wall,/area/maintenance/foresolar) +"aG" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/machinery/power/solar_control{id = "auxsolarnorth";name = "Fore Solar Control";track = 0},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 32;pixel_y = 0},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aI" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_tool_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aJ" = (/obj/item/weapon/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aK" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/binary/pump/on{dir = 1;target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aM" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Fore Solar Maintenance";dir = 1},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aN" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Fore Port"},/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aO" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aP" = (/turf/simulated/wall/r_wall,/area/maintenance/solarmaint) +"aQ" = (/obj/machinery/door/airlock/engineering{name = "Gamma Solar Array"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar) +"aR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"aS" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"aT" = (/obj/machinery/light/small{dir = 4;pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"aU" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"aV" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"aW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"aX" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_west_outer";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "arrivals_west";name = "exterior access button";pixel_x = 30;pixel_y = 4;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"aY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"aZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"ba" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_east_outer";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "arrivals_east";name = "exterior access button";pixel_x = -30;pixel_y = 4;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bc" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored) +"bd" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"be" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "arrivals_west_sensor";pixel_x = -30;pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bf" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "arrivals_east_sensor";pixel_x = 30;pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bg" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomsat) +"bh" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer) +"bi" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bj" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "arrivals_west";master_tag = "arrival_dock";pixel_x = -30;pixel_y = 0;req_one_access = list(13);tag_airlock_mech_sensor = null;tag_airpump = "arrivals_west_pump";tag_chamber_sensor = "arrivals_west_sensor";tag_exterior_door = "arrivals_west_outer";tag_interior_door = "arrivals_west_inner";tag_shuttle_mech_sensor = null},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1380;id_tag = "arrivals_west_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bk" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bm" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bn" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "arrivals_east";master_tag = "arrival_dock";pixel_x = 30;pixel_y = 0;req_one_access = list(13);tag_airlock_mech_sensor = null;tag_airpump = "arrivals_east_pump";tag_chamber_sensor = "arrivals_east_sensor";tag_exterior_door = "arrivals_east_outer";tag_interior_door = "arrivals_east_inner";tag_shuttle_mech_sensor = null},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1380;id_tag = "arrivals_east_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bp" = (/obj/machinery/status_display/arrivals_display,/turf/simulated/wall,/area/hallway/secondary/entry/fore) +"bq" = (/turf/simulated/wall,/area/hallway/secondary/entry/fore) +"br" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bs" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_west_inner";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bt" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bu" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bv" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Blue Dock Fore"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bw" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bx" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_east_inner";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"by" = (/turf/simulated/open,/area/turret_protected/tcomsat) +"bz" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Wing Fore"},/turf/simulated/open,/area/turret_protected/tcomsat) +"bA" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"bB" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6;icon_state = "intact"},/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"bC" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"bD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1;icon_state = "map"},/obj/machinery/meter,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"bE" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"bF" = (/turf/simulated/floor/plating,/area/tcommsat/computer) +"bG" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"bH" = (/obj/machinery/light{dir = 1},/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"bI" = (/obj/structure/table/reinforced,/obj/item/stack/material/phoron{amount = 10},/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"bJ" = (/obj/structure/table/reinforced,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/glasses/meson,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"bK" = (/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"bL" = (/obj/machinery/power/port_gen/pacman,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"bM" = (/turf/simulated/floor/asteroid,/area/shuttle/administration/station) +"bN" = (/obj/effect/landmark{name = "carpspawn"},/turf/unsimulated/chasm_mask,/area/space) +"bO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"bP" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two";child_tags_txt = "arrivals_west;arrivals_east";frequency = 1380;id_tag = "arrival_dock";pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bQ" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bR" = (/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "arrivals_west";name = "interior access button";pixel_x = 30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bS" = (/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bT" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bU" = (/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "arrivals_east";name = "interior access button";pixel_x = -30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bV" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"bW" = (/turf/simulated/floor/asteroid,/area/shuttle/escape/station) +"bX" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/open,/area/turret_protected/tcomsat) +"bY" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ca" = (/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cb" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5;icon_state = "intact"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cc" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cd" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat) +"ce" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cf" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cg" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Computer Room"},/obj/item/weapon/pen/blue{pixel_x = -3;pixel_y = 2},/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"ch" = (/obj/structure/ladder/up{pixel_y = 16},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"ci" = (/obj/machinery/computer/telecomms/traffic,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cj" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"ck" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/turf/simulated/floor/plating,/area/tcommsat/computer) +"cl" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_x = -29;pixel_y = 0},/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 50},/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"cm" = (/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"co" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cp" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cq" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cr" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cs" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ct" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cv" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cw" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cx" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cy" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cz" = (/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cA" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cB" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cC" = (/obj/machinery/computer/telecomms/monitor{network = "tcommsat"},/obj/item/device/radio/intercom{name = "General Listening Channel";pixel_x = 28;pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cE" = (/obj/machinery/light{dir = 8},/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"cF" = (/obj/machinery/autolathe,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"cG" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cH" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cI" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cJ" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"cK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat) +"cL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat) +"cM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat) +"cO" = (/obj/structure/window/reinforced,/turf/simulated/open,/area/turret_protected/tcomsat) +"cP" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/computer) +"cQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cS" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cT" = (/obj/machinery/computer/telecomms/server{network = "tcommsat"},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cU" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/obj/item/weapon/spacecash/c1,/turf/simulated/floor/plating,/area/tcommsat/computer) +"cV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/table/reinforced,/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"cW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"da" = (/obj/machinery/light{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Blue Dock Port";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"db" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"dd" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Blue Dock Starboard";dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"de" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"df" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"dg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"dh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"di" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/tcommsat/computer) +"dj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"dk" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dm" = (/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dn" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"do" = (/obj/structure/table/reinforced,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/powercell,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"dp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"dq" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"dr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ds" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"dt" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"du" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) +"dv" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) +"dw" = (/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/port) +"dx" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"dy" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat) +"dz" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/light,/turf/simulated/open,/area/turret_protected/tcomsat) +"dA" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat) +"dB" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/blue{icon_state = "12-0"},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 1},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 1},/obj/structure/cable/blue,/turf/simulated/open,/area/turret_protected/tcomsat) +"dC" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dD" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer_1";set_temperature = 73;use_power = 1},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dE" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dF" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381;icon_state = "door_locked";id_tag = "server_access_outer";locked = 1;name = "Telecoms Server Access";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/airlock_sensor/airlock_exterior{frequency = 1381;id_tag = "server_access_ex_sensor";master_tag = "server_access_airlock";pixel_x = 25;pixel_y = 22},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dH" = (/obj/machinery/airlock_sensor{frequency = 1381;id_tag = "server_access_sensor";pixel_x = 12;pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1381;id_tag = "server_access_pump"},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{frequency = 1381;id_tag = "server_access_airlock";name = "Server Access Airlock";pixel_x = 0;pixel_y = 25;tag_airpump = "server_access_pump";tag_chamber_sensor = "server_access_sensor";tag_exterior_door = "server_access_outer";tag_exterior_sensor = "server_access_ex_sensor";tag_interior_door = "server_access_inner";tag_interior_sensor = "server_access_in_sensor";tag_secure = 1},/turf/simulated/floor/plating,/area/tcommsat/computer) +"dI" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/tcommsat/computer) +"dJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage";req_access = list(61)},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/tcommsat/computer) +"dK" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"dL" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"dM" = (/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/port) +"dN" = (/obj/machinery/porta_turret/stationary,/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"dO" = (/turf/simulated/wall/r_wall,/area/tcommsat/chamber) +"dP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber) +"dQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/black,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber) +"dR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber) +"dS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber) +"dT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber) +"dU" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381;icon_state = "door_locked";id_tag = "server_access_inner";locked = 1;name = "Telecoms Server Access";req_access = list(61)},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) +"dV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"dW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"dX" = (/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"dY" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"dZ" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/light,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ea" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ec" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ed" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ee" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ef" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"eg" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"eh" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"ei" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"ej" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"el" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Central Compartment Fore"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"em" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381;id_tag = "server_access_in_sensor";master_tag = "server_access_airlock";name = "interior sensor";pixel_x = 8;pixel_y = 25},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"en" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"eo" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381;id_tag = "server_access_in_sensor";name = "interior sensor";pixel_y = 25},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"ep" = (/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"eq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"er" = (/turf/simulated/wall,/area/hallway/secondary/entry/port) +"es" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"et" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"eu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"ev" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"ew" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"ex" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"ey" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ez" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"eA" = (/turf/simulated/wall,/area/hallway/secondary/exit) +"eB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"eC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"eD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"eE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"eF" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"eG" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"eH" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"eI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"eJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"eK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"eL" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"eM" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"eN" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"eO" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Yellow Dock Fore"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"eP" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"eQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"eR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"eS" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"eT" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"eU" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Red Dock Fore"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"eV" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"eW" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two";child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock";frequency = 1380;id_tag = "escape_dock";pixel_x = 25;pixel_y = 0;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"eX" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Solar Array";dir = 4},/turf/unsimulated/chasm_mask,/area/solar/port) +"eY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"eZ" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) +"fa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"fb" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"fc" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"fd" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"fe" = (/obj/machinery/telecomms/server/presets/unused,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"ff" = (/obj/machinery/telecomms/broadcaster/preset_right,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"fg" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"fh" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"fi" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"fj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"fk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"fl" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"fm" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Storage"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"fn" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"fo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"fp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"fq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"fr" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"fs" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"ft" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"fu" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"fv" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"fw" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"fx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"fy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"fz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"fA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"fB" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"fC" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"fD" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"fE" = (/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"fF" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"fG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"fH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"fI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"fJ" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/port) +"fK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"fL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"fM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"fN" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"fO" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"fP" = (/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Fore"},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"fQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"fR" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Wing Central";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"fS" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"fT" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"fU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"fV" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat) +"fW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"fX" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"fY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"fZ" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"ga" = (/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "admin_shuttle_dock_sensor";pixel_x = 0;pixel_y = 26},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"gb" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock";name = "exterior access button";pixel_x = -6;pixel_y = -28;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"gc" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"gd" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "admin_shuttle_dock_airlock";pixel_x = 0;pixel_y = 26;req_one_access = list(13);tag_airpump = "admin_shuttle_dock_pump";tag_chamber_sensor = "admin_shuttle_dock_sensor";tag_exterior_door = "admin_shuttle_dock_outer";tag_interior_door = "admin_shuttle_dock_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "admin_shuttle_dock_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"ge" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock";name = "interior access button";pixel_x = -30;pixel_y = 26;req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"gf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"gg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"gh" = (/obj/machinery/door/airlock/glass{name = "Blue Dock"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"gi" = (/obj/machinery/door/airlock/glass{name = "Blue Dock"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"gj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"gk" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"gl" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_north_inner";locked = 1;name = "Escape Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"gm" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "escape_dock_north_airlock";name = "interior access button";pixel_x = 30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"gn" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "escape_dock_north_sensor";pixel_x = 0;pixel_y = -25},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"go" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "escape_dock_north_airlock";master_tag = "escape_dock";pixel_y = 30;req_one_access = list(13);tag_airlock_mech_sensor = "escape_dock_north_mech";tag_airpump = "escape_dock_north_pump";tag_chamber_sensor = "escape_dock_north_sensor";tag_exterior_door = "escape_dock_north_outer";tag_interior_door = "escape_dock_north_inner";tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "escape_dock_north_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"gp" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_north_outer";locked = 1;name = "Escape Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "escape_dock_north_airlock";name = "exterior access button";pixel_x = 4;pixel_y = -26;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"gq" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port) +"gr" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port) +"gs" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/port) +"gt" = (/turf/simulated/floor/airless,/area/solar/port) +"gu" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port) +"gv" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "brig_solar_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"gw" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "brig_solar_airlock";name = "exterior access button";pixel_x = 25;pixel_y = -25;req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/port) +"gx" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "brig_solar_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"gy" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "brig_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "brig_solar_airlock";layer = 3.3;pixel_x = 0;pixel_y = -25;req_access = list(13);tag_airpump = "brig_solar_pump";tag_chamber_sensor = "brig_solar_sensor";tag_exterior_door = "brig_solar_outer";tag_interior_door = "brig_solar_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "brig_solar_sensor";layer = 3.3;pixel_x = 12;pixel_y = -25},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"gz" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/binary/pump/on{dir = 8;target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"gA" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "civilian_eva_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"gB" = (/obj/machinery/door/airlock/engineering{name = "Beta Solar Array"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"gC" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"gD" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"gE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"gF" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"gG" = (/obj/structure/sign/nosmoking_2{pixel_x = -32;pixel_y = 0},/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"gH" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"gI" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"gJ" = (/obj/machinery/telecomms/relay/preset/telecomms,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"gK" = (/obj/machinery/telecomms/hub/preset,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"gL" = (/obj/machinery/telecomms/relay/preset/station,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"gM" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"gN" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"gO" = (/obj/structure/sign/nosmoking_2{pixel_x = 32;pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"gP" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"gQ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 7},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"gR" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"gS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"gT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"gU" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_x = 29;pixel_y = 0},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"gV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"gW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"gX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"gY" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"gZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"ha" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"hb" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"hc" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hd" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"he" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hf" = (/obj/item/device/radio/intercom{pixel_y = 27},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Fore"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hg" = (/obj/structure/closet/emcloset,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hh" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"hi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"hj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"hk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"hl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"hm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"hn" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/port) +"ho" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"hp" = (/obj/machinery/power/solar_control{id = "auxsolarnorth";name = "Fore Solar Control";track = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"hq" = (/turf/simulated/floor/plating,/area/maintenance/portsolar) +"hr" = (/obj/structure/cable,/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Aft Solar Maintenance";dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"hs" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ht" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"hu" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"hv" = (/obj/machinery/telecomms/bus/preset_one,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"hw" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"hx" = (/obj/machinery/bluespacerelay,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"hy" = (/obj/machinery/telecomms/processor/preset_three,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"hz" = (/obj/machinery/telecomms/bus/preset_three,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"hA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"hB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"hC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat) +"hD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"hE" = (/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"hF" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"hG" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"hH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"hI" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"hJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"hK" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"hL" = (/obj/machinery/door/airlock/glass{name = "Yellow Dock"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"hM" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hN" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hO" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hP" = (/obj/effect/floor_decal/ss13/l1,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hQ" = (/obj/effect/floor_decal/ss13/l3,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hR" = (/obj/effect/floor_decal/ss13/l5,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/ss13/l7,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hT" = (/obj/effect/floor_decal/ss13/l9,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hU" = (/obj/effect/floor_decal/ss13/l11,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hV" = (/obj/effect/floor_decal/ss13/l13,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hW" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hX" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"hY" = (/obj/machinery/door/airlock/glass{name = "Red Dock"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"hZ" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"ia" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"ib" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"ic" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/port) +"id" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) +"ie" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"if" = (/obj/machinery/telecomms/receiver/preset_right,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"ig" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ih" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"ii" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"ij" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"ik" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat) +"il" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"im" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"in" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"io" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"ip" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"iq" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"ir" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"is" = (/obj/machinery/door/airlock/glass{name = "Yellow Dock"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"it" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"iu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l2,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l6,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l4,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l10,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l8,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l14,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l12,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iF" = (/obj/machinery/door/airlock/glass{name = "Red Dock"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"iH" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iJ" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iK" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iL" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iM" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iN" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iO" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"iP" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iQ" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iR" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 6},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iS" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iT" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 5},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iU" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iV" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iW" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"iX" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"iY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"iZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ja" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jb" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jd" = (/obj/machinery/door/airlock/glass{name = "Yellow Dock"},/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"je" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jg" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ji" = (/obj/machinery/light,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jk" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"jm" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"jn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1;external_pressure_bound = 140;external_pressure_bound_default = 140;icon_state = "map_vent_out";use_power = 1;pressure_checks = 0;pressure_checks_default = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"jo" = (/obj/machinery/light,/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Central Compartment Aft";dir = 1},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"jp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1;external_pressure_bound = 0;external_pressure_bound_default = 0;icon_state = "map_vent_in";initialize_directions = 1;internal_pressure_bound = 4000;internal_pressure_bound_default = 4000;use_power = 1;pressure_checks = 2;pressure_checks_default = 2;pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber) +"jq" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"jr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"js" = (/obj/item/device/radio/intercom{pixel_x = 32},/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jt" = (/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ju" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"jw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/wall,/area/security/checkpoint2) +"jx" = (/turf/simulated/wall,/area/security/checkpoint2) +"jy" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/checkpoint2) +"jz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"jA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"jB" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jC" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jD" = (/obj/machinery/light{dir = 8},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"jE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"jF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"jG" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) +"jH" = (/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "admin_shuttle_dock_sensor-s";pixel_x = 0;pixel_y = -26},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"jI" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_outer-s";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock-s";name = "exterior access button";pixel_x = -6;pixel_y = 28;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"jJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_inner-s";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"jK" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "admin_shuttle_dock_airlock-s";pixel_x = 0;pixel_y = -26;req_one_access = list(13);tag_airpump = "admin_shuttle_dock_pump-s";tag_chamber_sensor = "admin_shuttle_dock_sensor-s";tag_exterior_door = "admin_shuttle_dock_outer-s";tag_interior_door = "admin_shuttle_dock_inner-s"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "admin_shuttle_dock_pump-s"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"jL" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock-s";name = "interior access button";pixel_x = -30;pixel_y = -26;req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jM" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jN" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"jO" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint1";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jP" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint1";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jQ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/obj/machinery/button/remote/blast_door{id = "seccheckpointup";name = "Watchpost Lockdown";pixel_x = 5;pixel_y = 32},/obj/machinery/light_switch{pixel_x = -8;pixel_y = 32},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"jR" = (/obj/structure/closet/wardrobe/red,/obj/structure/reagent_dispensers/peppertank{pixel_x = -30;pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"jS" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"jT" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"jU" = (/obj/structure/closet/wardrobe/red,/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_x = 30;pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"jV" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint3";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"jW" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"jX" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_south_inner";locked = 1;name = "Escape Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"jY" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "escape_dock_south_inner";name = "interior access button";pixel_x = 30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"jZ" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "escape_dock_south_sensor";pixel_x = 0;pixel_y = 25},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"ka" = (/obj/machinery/light/small{dir = 1},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "escape_dock_south_airlock";master_tag = "escape_dock";pixel_y = -30;req_one_access = list(13);tag_airlock_mech_sensor = "escape_dock_south_mech";tag_airpump = "escape_dock_south_pump";tag_chamber_sensor = "escape_dock_south_sensor";tag_exterior_door = "escape_dock_south_outer";tag_interior_door = "escape_dock_south_inner";tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "escape_dock_south_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"kb" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_south_outer";locked = 1;name = "Escape Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "escape_dock_south_airlock";name = "exterior access button";pixel_x = 4;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"kc" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/airless,/area/solar/port) +"kd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/open,/area/turret_protected/tcomsat) +"ke" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat) +"kf" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) +"kg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"kh" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"ki" = (/obj/machinery/porta_turret{dir = 6},/obj/effect/decal/warning_stripes,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomfoyer) +"kj" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Foyer"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/turretid/lethal{ailock = 1;check_synth = 1;control_area = "\improper Telecoms Satellite";desc = "A firewall prevents AIs from interacting with this device.";name = "Telecoms lethal turret control";pixel_y = 29;req_access = list(61)},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"kk" = (/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"kl" = (/obj/machinery/porta_turret{dir = 10},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/turret_protected/tcomfoyer) +"km" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"kn" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/open,/area/turret_protected/tcomsat) +"ko" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"kp" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"kq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"kr" = (/obj/machinery/light{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Incoming";dir = 4},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ks" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"kt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"ku" = (/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kv" = (/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kx" = (/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"ky" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"kz" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Outgoing";dir = 8},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"kA" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"kB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"kC" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"kD" = (/obj/machinery/door/airlock/hatch{name = "Telecoms West Wing";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomfoyer) +"kE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"kF" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"kG" = (/obj/machinery/door/airlock/hatch{name = "Telecoms East Wing";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomfoyer) +"kH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat) +"kI" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Starboard Wing Aft";dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat) +"kJ" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"kK" = (/obj/effect/floor_decal/corner/yellow/full,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock North;Airlock South";child_tags_txt = "admin_shuttle_dock_airlock;admin_shuttle_dock_airlock-s";frequency = 1380;id_tag = "admin_shuttle_dock_airlock";pixel_x = -25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"kL" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"kM" = (/obj/machinery/light,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Yellow Dock Aft";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"kN" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port) +"kO" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"kP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"kQ" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "seccheckpoint1";name = "Portside Arrivals Processing";pixel_x = -5;pixel_y = -2},/obj/machinery/button/remote/blast_door{id = "seccheckpoint2";name = "Portside Departures Processing";pixel_x = 5;pixel_y = -2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kR" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Processing";dir = 4;pixel_y = -22},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kT" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "seccheckpoint3";name = "Starboardside Arrivals Processing";pixel_x = -5;pixel_y = -2},/obj/machinery/button/remote/blast_door{id = "seccheckpoint4";name = "Starboardside Departures Processing";pixel_x = 5;pixel_y = -2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kU" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"kV" = (/obj/item/device/radio/intercom{pixel_x = 32},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"kW" = (/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"kX" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"kY" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"kZ" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Red Dock Aft";dir = 1},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"la" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/exit) +"lb" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Wing Aft";dir = 4},/turf/simulated/open,/area/turret_protected/tcomsat) +"lc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"ld" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"le" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"lh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) +"li" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lj" = (/obj/machinery/door/window/brigdoor/eastleft{req_access = list(63)},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lk" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"ll" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"ln" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lo" = (/obj/machinery/door/window/brigdoor/westright{req_access = list(63)},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lp" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lq" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lr" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"ls" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint2";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lt" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint2";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lu" = (/obj/machinery/computer/secure_data,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lv" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lx" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"ly" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lz" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint4";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/turret_protected/tcomfoyer) +"lB" = (/obj/machinery/power/smes/buildable{charge = 5e+006;input_attempt = 1;input_level = 200000;output_attempt = 1;output_level = 200000},/obj/structure/cable/blue{icon_state = "0-4"},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lC" = (/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Station Intercom (General)";pixel_y = 20},/obj/effect/decal/cleanable/cobweb,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lD" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) +"lE" = (/obj/machinery/turretid/stun{ailock = 1;check_synth = 1;control_area = "\improper Telecoms Foyer";desc = "A firewall prevents AIs from interacting with this device.";name = "Telecoms Foyer turret control";pixel_y = 29;req_access = list(61)},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lG" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) +"lH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"lI" = (/obj/machinery/computer/power_monitor{name = "telecoms power monitoring"},/obj/machinery/power/sensor{long_range = 1;name = "Powernet Sensor - Telecommunications Grid";name_tag = "Telecommunications Grid"},/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"lK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lL" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"lN" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint";req_access = list(1)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"lO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"lP" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lQ" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lS" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lT" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Power Room Port"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lV" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lW" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Power Room Starboard"},/obj/machinery/light/small/emergency{dir = 1},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lX" = (/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer) +"lY" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"lZ" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ma" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mb" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"mc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"md" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"me" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/plaque,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mf" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"mg" = (/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mh" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mi" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Lobby Fore"},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mj" = (/obj/effect/floor_decal/corner/lime/full,/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mk" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ml" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mo" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/status_display{pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mp" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mq" = (/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/cable{icon_state = "11-2"},/obj/structure/lattice,/turf/simulated/open,/area/tcommsat/entrance) +"mr" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"ms" = (/obj/structure/closet/emcloset,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mt" = (/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Aft";dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mv" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mw" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mx" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"my" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mA" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mB" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mC" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mD" = (/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mE" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mF" = (/obj/machinery/door/airlock/glass{name = "NSS Aurora"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mG" = (/obj/machinery/door/airlock/glass{name = "NSS Aurora"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"mH" = (/turf/unsimulated/chasm_mask,/area/shuttle/syndicate_elite/station) +"mI" = (/obj/item/weapon/cell,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mJ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mK" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mL" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mM" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mN" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mO" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mP" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "engineering_surface_inner";locked = 1;name = "Solar Panel Hub Exterior Access";req_access = list(13)},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mQ" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mR" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "engineering_surface_outer";locked = 1;name = "Solar Panel Hub Exterior Access";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mS" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "engineering_surface_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "engineering_surface_pump";tag_chamber_sensor = "engineering_surface_sensor";tag_exterior_door = "engineering_surface_outer";tag_interior_door = "engineering_surface_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "engineering_surface_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "engineering_surface_pump"},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mT" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "engineering_surface_airlock";name = "exterior access button";pixel_x = -27;pixel_y = -26;req_one_access = list(13)},/turf/unsimulated/chasm_mask,/area/space) +"mU" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"mV" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"mW" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"mX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mY" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"mZ" = (/obj/machinery/bluespace_beacon,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"na" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"nb" = (/obj/machinery/light/small/emergency{dir = 8},/turf/unsimulated/chasm_mask,/area/tcommsat/entrance) +"nc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"nd" = (/turf/simulated/mineral/random,/area/tcommsat/entrance) +"ne" = (/turf/simulated/wall/r_wall,/area/space) +"nf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"ng" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"nh" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/machinery/light{dir = 8},/obj/machinery/camera/network/command{c_tag = "Surface - Corridor Camera 11";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ni" = (/obj/item/device/radio/intercom{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"nj" = (/turf/simulated/wall,/area/security/vacantoffice) +"nk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 1;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice) +"nl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 1;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice) +"nm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 1;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice) +"nn" = (/obj/structure/closet/crate,/obj/item/weapon/aicard,/obj/item/device/multitool,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"no" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Lobby Aft";dir = 1},/obj/structure/closet/crate/solar,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"np" = (/obj/structure/closet/malf/suits,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"nq" = (/obj/machinery/light{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"nr" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"ns" = (/obj/machinery/vending/coffee,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"nt" = (/obj/machinery/vending/cola,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"nu" = (/obj/machinery/vending/snack,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"nv" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"nw" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"nx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ny" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"nz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice) +"nA" = (/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nB" = (/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nC" = (/obj/structure/window/basic{dir = 4},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nD" = (/obj/machinery/button/remote/blast_door{id = "office_shutter";name = "Office Shutters";pixel_x = -8;pixel_y = 22},/obj/machinery/light_switch{pixel_x = -8;pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"nE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"nF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"nG" = (/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"nH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"nI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"nJ" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"nK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"nL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"nM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice) +"nN" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nO" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nP" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nQ" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nR" = (/obj/structure/window/basic{dir = 4},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/structure/table/standard{name = "plastic table frame"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"nS" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"nT" = (/turf/simulated/floor/tiled,/area/security/vacantoffice) +"nU" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/toy/figure/assistant,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/security/vacantoffice) +"nV" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/light/small{dir = 4;pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"nW" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"nX" = (/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"nY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"nZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"oa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"ob" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oc" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"od" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"oe" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"of" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"og" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Vacant Office"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"oh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"oi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"oj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"ok" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"ol" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"om" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Vacant Office 2";dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"on" = (/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) +"oo" = (/obj/machinery/door/airlock/engineering{name = "Alpha Solar Array"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"op" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oq" = (/obj/structure/bed/chair/comfy/beige,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"or" = (/obj/structure/bed/chair/comfy/beige,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Waiting Room";dir = 8},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"os" = (/obj/machinery/newscaster{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ot" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice) +"ou" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"ov" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"ow" = (/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/security/vacantoffice) +"ox" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oy" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oA" = (/obj/structure/table/woodentable,/obj/random/single{icon = 'icons/obj/items.dmi';icon_state = "lighter-g";name = "randomly spawned lighter";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/flame/lighter},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oB" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oC" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/obj/random/single{icon = 'icons/obj/drinks.dmi';icon_state = "cola";name = "randomly spawned cola";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/reagent_containers/food/drinks/cans/cola},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oD" = (/obj/structure/table/woodentable,/obj/random/single{icon = 'icons/obj/playing_cards.dmi';icon_state = "deck";name = "randomly spawned deck of cards";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/deck},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"oF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice) +"oG" = (/obj/item/weapon/folder/yellow,/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"oH" = (/obj/machinery/firealarm{dir = 2;pixel_y = -24},/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Surface - Vacant Office 1";dir = 1},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"oI" = (/obj/machinery/newscaster{pixel_y = -32},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice) +"oJ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/turf/simulated/floor/tiled,/area/security/vacantoffice) +"oK" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/security/vacantoffice) +"oL" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Aft Solar Maintenance";dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oM" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oN" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oO" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oP" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"oQ" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/obj/random/single{icon = 'icons/obj/items.dmi';icon_state = "lighter-g";name = "randomly spawned lighter";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/flame/lighter},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oR" = (/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"oS" = (/obj/machinery/power/solar_control{id = "roofsolars";name = "Aft Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0;pixel_y = -32},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oU" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_roof_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"oV" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oW" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oX" = (/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore) +"oY" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore) +"oZ" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pa" = (/turf/simulated/open,/area/turbolift/main_arrivals) +"pb" = (/obj/structure/ladder/up{pixel_y = 16},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/space) +"pc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pe" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"ph" = (/turf/simulated/wall,/area/storage/primary) +"pi" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pj" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pl" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "solar_roof_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "solar_roof_pump";tag_chamber_sensor = "solar_roof_sensor";tag_exterior_door = "solar_roof_outer";tag_interior_door = "solar_roof_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "solar_roof_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "solar_roof_pump"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pm" = (/obj/machinery/vending/tool,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary) +"pn" = (/obj/machinery/lapvend,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary) +"po" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Primary Tool Storage Fore"},/turf/simulated/floor/tiled,/area/storage/primary) +"pp" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary) +"pq" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/storage/primary) +"pr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary) +"ps" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 10";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pu" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"pv" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled,/area/storage/primary) +"pw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/primary) +"px" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/primary) +"py" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pz" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/primary) +"pA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pB" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "solar_roof_airlock";name = "exterior access button";pixel_x = -25;pixel_y = 25;req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/starboard) +"pC" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/status_display{pixel_x = -32},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary) +"pD" = (/turf/simulated/floor/tiled,/area/storage/primary) +"pE" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/storage/primary) +"pF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary) +"pG" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 10";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pH" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pI" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "arrivals_surface_airlock";name = "exterior access button";pixel_x = 27;pixel_y = -26;req_one_access = list(13)},/turf/unsimulated/chasm_mask,/area/space) +"pJ" = (/obj/machinery/light/small/emergency,/turf/unsimulated/chasm_mask,/area/hallway/secondary/entry/fore) +"pK" = (/obj/machinery/power/solar{id = "aftsolar";name = "Aft Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) +"pL" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard) +"pM" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light_switch{pixel_x = -26},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary) +"pN" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary) +"pO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary) +"pP" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"pR" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_surface_outer";locked = 1;name = "Arrivals Docking Exterior Access";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"pS" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard) +"pT" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard) +"pU" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/starboard) +"pV" = (/turf/simulated/floor/airless,/area/solar/starboard) +"pW" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/starboard) +"pX" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard) +"pY" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard) +"pZ" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/device/radio/intercom{pixel_x = -32},/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/storage/primary) +"qa" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/storage/primary) +"qb" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary) +"qc" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "arrivals_surface_airlock";pixel_x = -30;pixel_y = 0;req_one_access = list(13);tag_airpump = "arrivals_surface_pump";tag_chamber_sensor = "arrivals_surface_sensor";tag_exterior_door = "arrivals_surface_outer";tag_interior_door = "arrivals_surface_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "arrivals_surface_sensor";pixel_x = 25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "rich_command_pump"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"qd" = (/obj/machinery/power/solar{id = "aftsolar";name = "Aft Solar Array"},/obj/structure/cable/yellow,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) +"qe" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/requests_console{pixel_x = -32},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary) +"qf" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/storage/primary) +"qg" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/primary) +"qh" = (/obj/machinery/door/airlock/external,/turf/simulated/floor,/area/hallway/secondary/entry/fore) +"qi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"qj" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_surface_outer";locked = 1;name = "Arrivals Docking Exterior Access";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"qk" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary) +"ql" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/storage/primary) +"qm" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/storage/primary) +"qn" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qo" = (/obj/item/device/radio/intercom{pixel_y = 27},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qp" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qr" = (/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 9"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qs" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qt" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qu" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "arrivals_surface_airlock";name = "interior access button";pixel_x = -23;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qv" = (/turf/simulated/wall,/area/crew_quarters/sleep/cryo) +"qw" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary) +"qx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary) +"qy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qA" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qB" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qC" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qE" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qF" = (/obj/machinery/computer/cryopod{density = 0;pixel_y = 32},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qG" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qH" = (/obj/machinery/cryopod,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qI" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Cryostorage"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qJ" = (/obj/structure/cryofeed,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/storage/primary) +"qL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) +"qM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) +"qN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) +"qO" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) +"qP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qR" = (/obj/machinery/atm{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qS" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"qU" = (/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qW" = (/obj/machinery/cryopod,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"qX" = (/turf/simulated/wall,/area/maintenance/arrivals) +"qY" = (/obj/machinery/vending/assist,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary) +"qZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/storage/primary) +"ra" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/machinery/light,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Primary Tool Storage Aft";dir = 1},/turf/simulated/floor/tiled,/area/storage/primary) +"rb" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/turf/simulated/floor/tiled,/area/storage/primary) +"rc" = (/obj/structure/table/standard,/obj/item/device/camera,/obj/item/device/camera_film,/turf/simulated/floor/tiled,/area/storage/primary) +"rd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/storage/primary) +"re" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"rf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"rg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"rh" = (/turf/simulated/wall,/area/hydroponics/garden) +"ri" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"rj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"rk" = (/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"rl" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"rm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"rn" = (/obj/random/loot,/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"ro" = (/turf/simulated/floor/plating,/area/maintenance/arrivals) +"rp" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"rq" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary) +"rr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"rs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"rt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"ru" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor,/area/hydroponics/garden) +"rv" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor/grass,/area/hydroponics/garden) +"rw" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/grass,/area/hydroponics/garden) +"rx" = (/obj/machinery/smartfridge/drying_rack,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Public Garden"},/turf/simulated/floor/grass,/area/hydroponics/garden) +"ry" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) +"rz" = (/turf/simulated/floor/grass,/area/hydroponics/garden) +"rA" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"rB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"rC" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"rD" = (/obj/machinery/alarm{dir = 1;pixel_y = -25},/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"rE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"rF" = (/obj/machinery/cryopod,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"rG" = (/turf/simulated/wall,/area/crew_quarters/fitness) +"rH" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"rI" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"rJ" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"rK" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"rL" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"rM" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"rN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"rO" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"rP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"rQ" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden) +"rR" = (/obj/structure/flora/grass/green,/turf/simulated/floor/grass,/area/hydroponics/garden) +"rS" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics/garden) +"rT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"rU" = (/obj/machinery/door/airlock/glass{name = "Garden"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"rV" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"rW" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"rX" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo) +"rY" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/alphadeck) +"rZ" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"sa" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"sb" = (/turf/simulated/wall,/area/crew_quarters/locker) +"sc" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden) +"sd" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden) +"se" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) +"sf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"sg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"sh" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"si" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sl" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo) +"sn" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"so" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"sp" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"sq" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"sr" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"ss" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Locker Rooms Fore"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"st" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"su" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"sv" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker) +"sw" = (/obj/structure/flora/ausbushes/brflowers,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden) +"sx" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden) +"sy" = (/obj/machinery/light{dir = 4},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"sz" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"sA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sB" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"sC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo) +"sH" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/chasm_mask,/area/crew_quarters/sleep/cryo) +"sI" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"sJ" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Aft Solar Array";dir = 1},/turf/unsimulated/chasm_mask,/area/solar/port) +"sK" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/starboard) +"sL" = (/obj/structure/closet/wardrobe/xenos,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"sM" = (/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"sN" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker) +"sO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"sP" = (/obj/structure/flora/ausbushes/ppflowers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden) +"sQ" = (/turf/simulated/floor/tiled,/area/hydroponics/garden) +"sR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"sS" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"sT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sU" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sV" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"sW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo) +"sX" = (/obj/structure/window/reinforced,/turf/unsimulated/chasm_mask,/area/space) +"sY" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"sZ" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/starboard) +"ta" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"tb" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tc" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"td" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"te" = (/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tf" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 6";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"tg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"th" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ti" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"tj" = (/obj/machinery/door/airlock/glass{name = "Garden"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"tk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"tl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"tm" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"tn" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 7";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"to" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"tp" = (/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 8";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tq" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/threedglasses,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tr" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"ts" = (/obj/structure/table/woodentable,/obj/item/weapon/coin/silver,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tt" = (/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tu" = (/obj/machinery/door/airlock/glass{name = "Holodeck"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/cryo) +"tv" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"tw" = (/obj/machinery/door/airlock/glass{name = "Holodeck"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"tx" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard) +"ty" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tz" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker) +"tB" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass,/area/hydroponics/garden) +"tC" = (/obj/structure/flora/grass/green,/obj/machinery/light,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/grass,/area/hydroponics/garden) +"tD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"tE" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tF" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tG" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tH" = (/obj/machinery/door/airlock/glass{name = "Holodeck"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/cryo) +"tI" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"tJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"tK" = (/obj/structure/window/reinforced,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Holodeck";dir = 1;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"tL" = (/obj/structure/closet/wardrobe/black,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tM" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tN" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/tape_roll,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tO" = (/obj/item/device/radio/intercom{pixel_x = 32},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"tP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"tQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"tR" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"tS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"tT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden) +"tU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"tV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"tW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"tX" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/chasm_mask,/area/space) +"tY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/chasm_mask,/area/space) +"tZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"ua" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/chasm_mask,/area/space) +"ub" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"uc" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape_pod1/station) +"ud" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/station) +"ue" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape_pod1/station) +"uf" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape_pod2/station) +"ug" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod2/station) +"uh" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape_pod2/station) +"ui" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape_pod3/station) +"uj" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/station) +"uk" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape_pod3/station) +"ul" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"um" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"un" = (/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uo" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"up" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uq" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"ur" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"us" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"ut" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 5"},/obj/structure/extinguisher_cabinet{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"uu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"uv" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"uw" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"ux" = (/obj/structure/closet/wardrobe/pjs,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"uy" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo) +"uz" = (/turf/simulated/floor/asteroid,/area/space) +"uA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass{name = "Holodeck Control"},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"uB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/simulated/wall/r_wall,/area/bridge/levela) +"uC" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380;id_tag = "escape_pod_1";pixel_x = -25;pixel_y = 0;tag_door = "escape_pod_1_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) +"uD" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape_pod1/station) +"uE" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380;id_tag = "escape_pod_2";pixel_x = -25;pixel_y = 0;tag_door = "escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station) +"uF" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape_pod2/station) +"uG" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380;id_tag = "escape_pod_3";pixel_x = -25;pixel_y = 0;tag_door = "escape_pod_3_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station) +"uH" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape_pod3/station) +"uI" = (/obj/machinery/washing_machine,/obj/item/device/radio/intercom{pixel_x = -32},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Locker Rooms Washing";dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uJ" = (/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"uO" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"uP" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"uQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"uR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"uS" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"uT" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo) +"uU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"uV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"uW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"uX" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"uY" = (/obj/structure/table/standard,/obj/item/weapon/paper{desc = "";info = "Brusies sustained in the holodeck can be healed simply by sleeping.";name = "Holodeck Disclaimer"},/obj/machinery/light/small{dir = 1},/obj/machinery/button/windowtint{id = "holodeckwin"},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitory Holodeck North";pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"uZ" = (/turf/simulated/wall/r_wall,/area/bridge/levela) +"va" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 1";dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) +"vb" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 2";dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station) +"vc" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 3";dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station) +"vd" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"ve" = (/turf/simulated/floor/asteroid,/area/shuttle/specops/station) +"vf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/suit,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vh" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vi" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vj" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vk" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/status_display{pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vo" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vp" = (/obj/structure/disposalpipe/junction/yjunction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vq" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vs" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"vt" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore) +"vu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"vv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"vw" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"vx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"vy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"vz" = (/obj/machinery/computer/HolodeckControl/Exodus,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"vA" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"vB" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_1_hatch";locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) +"vC" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/escape_pod1/station) +"vD" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_2_hatch";locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station) +"vE" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/escape_pod2/station) +"vF" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_3_hatch";locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station) +"vG" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/escape_pod3/station) +"vH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"vI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"vJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"vK" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vL" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vM" = (/obj/structure/closet/secure_closet/personal,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Locker Rooms Aft";dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vN" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"vO" = (/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms) +"vP" = (/obj/machinery/door/airlock{id_tag = "Dormitory 2";name = "Dorm"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms) +"vQ" = (/turf/simulated/wall,/area/crew_quarters/toilet) +"vR" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"vS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"vT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"vU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"vV" = (/turf/simulated/wall,/area/storage/tools) +"vW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"vX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"vY" = (/obj/machinery/door/airlock/glass{name = "Holodeck Control"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"vZ" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"wa" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"wb" = (/turf/simulated/wall,/area/bridge/levela) +"wc" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/bridge/levela) +"wd" = (/turf/simulated/floor/plating,/area/bridge/levela) +"we" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/bridge/levela) +"wf" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"wg" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ert_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"wh" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "ert_shuttle_dock_airlock";name = "interior access button";pixel_x = 0;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/bridge/levela) +"wi" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ert_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "ert_shuttle_dock_airlock";name = "exterior access button";pixel_x = 0;pixel_y = -26;req_one_access = list(13)},/turf/simulated/floor/plating,/area/bridge/levela) +"wj" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "ert_shuttle_dock_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "ert_shuttle_dock_airpump";tag_chamber_sensor = "ert_shuttle_dock_sensor";tag_exterior_door = "ert_shuttle_dock_outer";tag_interior_door = "ert_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "ert_shuttle_dock_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "ert_shuttle_dock_pump"},/obj/machinery/light/small,/obj/machinery/camera/network/command{c_tag = "Bridge - Fleet Security Dock";dir = 1},/turf/simulated/floor/plating,/area/bridge/levela) +"wk" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker) +"wl" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Dormitories Fore";pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"wm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms) +"wn" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"wo" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"wp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"wq" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"wr" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"ws" = (/obj/machinery/door/airlock/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"wt" = (/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"wu" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"wv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"ww" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/storage/tools) +"wx" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/tools) +"wy" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Auxiliary Tool Storage"},/turf/simulated/floor/tiled,/area/storage/tools) +"wz" = (/turf/simulated/floor/tiled,/area/storage/tools) +"wA" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/storage/tools) +"wB" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed";name = "Clothing Storage"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"wC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"wD" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_1_berth_hatch";locked = 1;name = "Escape Pod";req_access = list(13)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"wE" = (/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/bridge/levela) +"wF" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_2_berth_hatch";locked = 1;name = "Escape Pod";req_access = list(13)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"wG" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/bridge/levela) +"wH" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_3_berth_hatch";locked = 1;name = "Escape Pod";req_access = list(13)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"wI" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = -32;pixel_y = 0},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"wJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"wK" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"wL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/bridge/levela) +"wM" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"wN" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"wO" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"wP" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"wQ" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Restrooms";dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"wR" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"wS" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"wT" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"wU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"wV" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/storage/tools) +"wW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/storage/tools) +"wX" = (/obj/structure/closet/athletic_mixed,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"wY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"wZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"xa" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"xb" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380;id_tag = "escape_pod_1_berth";pixel_x = -25;pixel_y = 30;tag_door = "escape_pod_1_berth_hatch"},/turf/simulated/floor/tiled,/area/bridge/levela) +"xc" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela) +"xd" = (/turf/simulated/floor/tiled,/area/bridge/levela) +"xe" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge/levela) +"xf" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela) +"xg" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380;id_tag = "escape_pod_2_berth";pixel_x = -25;pixel_y = 30;tag_door = "escape_pod_2_berth_hatch"},/turf/simulated/floor/tiled,/area/bridge/levela) +"xh" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/bridge/levela) +"xi" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Corridor 2"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela) +"xj" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380;id_tag = "escape_pod_3_berth";pixel_x = -25;pixel_y = 30;tag_door = "escape_pod_3_berth_hatch"},/turf/simulated/floor/tiled,/area/bridge/levela) +"xk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"xl" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela) +"xm" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela) +"xn" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela) +"xo" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge/levela) +"xp" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"xq" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"xr" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"xs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms) +"xt" = (/obj/item/weapon/bedsheet/mime,/obj/structure/bed/padded,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"xu" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"xv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"xw" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"xx" = (/obj/machinery/atm{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"xy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"xz" = (/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage";req_access = list(12)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools) +"xA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"xB" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools) +"xC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools) +"xD" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/storage/tools) +"xE" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/tools) +"xF" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"xG" = (/obj/structure/table/rack,/obj/item/weapon/beach_ball/holoball,/obj/item/weapon/beach_ball,/obj/item/weapon/bikehorn/rubberducky,/obj/item/device/violin,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"xH" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Holodeck Storage";dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"xI" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"xJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/bridge/levela) +"xK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"xL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela) +"xM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/bridge/levela) +"xN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"xO" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"xP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/bridge/levela) +"xQ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/bridge/levela) +"xR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela) +"xS" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/command{name = "Shuttle Docking"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"xT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela) +"xU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"xV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/plating,/area/bridge/levela) +"xW" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/bridge/levela) +"xX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/bridge/levela) +"xY" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"xZ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"ya" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"yb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms) +"yc" = (/obj/machinery/light_switch{pixel_x = 22;pixel_y = 10},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"yd" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"ye" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"yf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"yg" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 4";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"yh" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"yi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"yj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/storage/tools) +"yk" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/storage/tools) +"yl" = (/obj/structure/closet/lasertag/blue,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"ym" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"yn" = (/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"yo" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "centcom_shuttle_dock_airlock";pixel_x = 30;pixel_y = 30;req_one_access = list(13);tag_airpump = "centcom_shuttle_dock_pump";tag_chamber_sensor = "centcom_shuttle_dock_sensor";tag_exterior_door = "centcom_shuttle_dock_outer";tag_interior_door = "centcom_shuttle_dock_inner"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge/levela) +"yq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yr" = (/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela) +"ys" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/bridge/levela) +"yt" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Corridor 1";dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela) +"yu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela) +"yx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yy" = (/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"yA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"yB" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela) +"yD" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela) +"yE" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"yF" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"yG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"yH" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"yI" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"yJ" = (/obj/machinery/door/airlock{name = "Unit 3"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"yK" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"yL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/storage/tools) +"yM" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/light,/turf/simulated/floor/tiled,/area/storage/tools) +"yN" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/storage/tools) +"yO" = (/obj/structure/closet/lasertag/red,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"yP" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness) +"yQ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"yR" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"yS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"yT" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Lobby";dir = 8},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela) +"yU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"yV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"yW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"yX" = (/obj/machinery/door/airlock/command{name = "Head of Staff Preparation";req_access = list(19)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge/levela) +"yY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"yZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"za" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"zb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"zc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"zd" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"ze" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/bridge/levela) +"zf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/bridge/levela) +"zg" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"zh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"zi" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"zj" = (/obj/machinery/door/airlock{name = "Unisex Showers"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"zk" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"zl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"zm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools) +"zn" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"zo" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "command_surface_airlock";name = "exterior access button";pixel_x = 27;pixel_y = -26;req_one_access = list(13)},/turf/unsimulated/chasm_mask,/area/space) +"zp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "command_surface_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "command_surface_pump";tag_chamber_sensor = "command_surface_sensor";tag_exterior_door = "command_surface_outer";tag_interior_door = "command_surface_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "command_surface_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "command_surface_pump"},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/bridge/levela) +"zq" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "Command Docking Exterior Access";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"zr" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "command_surface_airlock";name = "interior access button";pixel_x = -23;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela) +"zs" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "command_surface_inner";locked = 1;name = "Command Docking Exterior Access";req_access = list(13)},/turf/simulated/floor/plating,/area/bridge/levela) +"zt" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"zu" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 8},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"zv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"zw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"zx" = (/obj/machinery/door/airlock/command{name = "Head of Staff Preparation";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/bridge/levela) +"zy" = (/obj/machinery/light_switch{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela) +"zz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/wood,/area/bridge/levela) +"zA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela) +"zB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela) +"zC" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela) +"zD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/wood,/area/bridge/levela) +"zE" = (/obj/structure/table/woodentable,/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/bridge/levela) +"zF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"zG" = (/obj/structure/ladder/up{pixel_y = 16},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/space) +"zH" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Docks";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"zI" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela) +"zJ" = (/obj/machinery/door/airlock/external,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"zK" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/bridge/levela) +"zL" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"zM" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;layer = 3.3;master_tag = "centcom_shuttle_dock_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/bridge/levela) +"zN" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "spare_shuttle_dock_airlock";name = "interior access button";pixel_x = 0;pixel_y = 25;req_access = list(13)},/obj/machinery/camera/network/command{c_tag = "Bridge - Auxiliary Dock"},/turf/simulated/floor/plating,/area/bridge/levela) +"zO" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "spare_shuttle_dock_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "spare_shuttle_dock_pump";tag_chamber_sensor = "spare_shuttle_dock_sensor";tag_exterior_door = "spare_shuttle_dock_outer";tag_interior_door = "spare_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "spare_shuttle_dock_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "spare_shuttle_dock_pump"},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/bridge/levela) +"zP" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "spare_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"zQ" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "spare_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "eng_sl_eva_airlock";name = "exterior access button";pixel_x = -26;pixel_y = 8;req_access = list(10,13)},/turf/simulated/floor/plating,/area/bridge/levela) +"zR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms) +"zS" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"zT" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{icon_state = "shower";dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"zU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"zV" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"zW" = (/turf/simulated/wall,/area/hallway/secondary/entry/aft) +"zX" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"zY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"zZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Aa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"Ab" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Ac" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Ad" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Entrance";dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/unsimulated/chasm_mask,/area/bridge/levela) +"Ae" = (/obj/machinery/light_switch{pixel_x = -22},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela) +"Af" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"Ag" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"Ah" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela) +"Ai" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela) +"Aj" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/bridge/levela) +"Ak" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/bridge/levela) +"Al" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/bridge/levela) +"Am" = (/obj/structure/bed/chair/office/dark,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet,/area/bridge/levela) +"An" = (/turf/simulated/floor/carpet,/area/bridge/levela) +"Ao" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine,/turf/simulated/floor/wood,/area/bridge/levela) +"Ap" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"Aq" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"Ar" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"As" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"At" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/bridge/levela) +"Au" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"Av" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/plating,/area/bridge/levela) +"Aw" = (/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Ax" = (/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms) +"Ay" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"Az" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet) +"AA" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"AB" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"AC" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/tiled,/area/bridge/levela) +"AD" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge/levela) +"AE" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela) +"AF" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled,/area/bridge/levela) +"AG" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela) +"AH" = (/obj/structure/table/woodentable,/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Meeting Room";dir = 4},/obj/item/toy/figure/ert,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/wood,/area/bridge/levela) +"AI" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/turf/simulated/floor/carpet,/area/bridge/levela) +"AJ" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/bridge/levela) +"AK" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/bridge/levela) +"AL" = (/turf/simulated/floor/wood,/area/bridge/levela) +"AM" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"AN" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "centcom_shuttle_dock_airlock";pixel_x = 30;pixel_y = 0;req_one_access = list(13);tag_airpump = "centcom_shuttle_dock_pump";tag_chamber_sensor = "centcom_shuttle_dock_sensor";tag_exterior_door = "centcom_shuttle_dock_outer";tag_interior_door = "centcom_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "centcom_shuttle_dock_sensor";pixel_x = -25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1380;id_tag = "centcom_shuttle_dock_airlock"},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Administration Dock";dir = 8},/turf/simulated/floor/plating,/area/bridge/levela) +"AO" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"AP" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"AQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/obj/machinery/light_switch{pixel_x = 22;pixel_y = 10},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"AR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"AS" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"AT" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela) +"AU" = (/obj/machinery/vending/coffee,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = -32;pixel_y = 0},/turf/simulated/floor/wood,/area/bridge/levela) +"AV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/bridge/levela) +"AW" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/carpet,/area/bridge/levela) +"AX" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "centcom_shuttle_dock_airlock";name = "exterior access button";pixel_x = 25;pixel_y = 0;req_one_access = list(13,65)},/turf/simulated/floor/plating,/area/bridge/levela) +"AY" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Dormitories Aft";dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) +"AZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"Ba" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/light,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Bb" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"Bc" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge/levela) +"Bd" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/bridge/levela) +"Be" = (/obj/machinery/vending/cola,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/bridge/levela) +"Bf" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/wood,/area/bridge/levela) +"Bg" = (/obj/structure/sign/double/map/left{pixel_y = -32},/turf/simulated/floor/wood,/area/bridge/levela) +"Bh" = (/obj/structure/sign/double/map/right{pixel_y = -32},/turf/simulated/floor/wood,/area/bridge/levela) +"Bi" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/bridge/levela) +"Bj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"Bk" = (/turf/simulated/floor/asteroid,/area/shuttle/transport1/station) +"Bl" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Bm" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 3";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Bn" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/bridge/levela) +"Bo" = (/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 4},/obj/structure/cable/green{icon_state = "11-4"},/obj/structure/lattice,/turf/simulated/open,/area/bridge/levela) +"Bp" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"Bq" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"Br" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela) +"Bs" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"Bt" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Bu" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Bv" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Bw" = (/turf/simulated/mineral/random,/area/bridge/levela) +"Bx" = (/turf/simulated/floor/asteroid,/area/syndicate_station/surface) +"By" = (/obj/machinery/atmospherics/pipe/zpipe/up/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Bz" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/chasm_mask,/area/space) +"BA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"BB" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"BC" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/unsimulated/chasm_mask,/area/space) +"BD" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 2";pixel_x = 0},/turf/unsimulated/chasm_mask,/area/hallway/secondary/entry/aft) +"BE" = (/turf/simulated/floor/asteroid,/area/skipjack_station/surface) +"BF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"BG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"BH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"BI" = (/obj/structure/mopbucket,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BJ" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/security{c_tag = "Surface - Custodial Closet"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BK" = (/obj/structure/janitorialcart,/obj/item/weapon/mop,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BL" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"BM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BO" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"BQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"BR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"BS" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BU" = (/obj/structure/closet/jcloset,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"BV" = (/turf/simulated/wall,/area/quartermaster/storage) +"BW" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance";req_access = list(31)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/quartermaster/storage) +"BX" = (/obj/machinery/door/airlock{name = "Custodial Closet";req_access = list(26)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft) +"BY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) +"BZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ca" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cb" = (/obj/machinery/light{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Station Intercom (General)";pixel_y = 20},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cc" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cd" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ce" = (/obj/vehicle/train/cargo/trolley,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cf" = (/obj/vehicle/train/cargo/trolley,/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = 0;pixel_y = 30},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cg" = (/obj/vehicle/train/cargo/engine,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ch" = (/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ci" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"Ck" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = 0;pixel_y = 30},/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cl" = (/obj/structure/table/standard,/obj/item/clothing/head/soft,/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/clothing/head/soft,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cm" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cn" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Co" = (/obj/machinery/light{dir = 1},/obj/structure/bed/chair,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Cp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Cq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Cr" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"Cs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"Ct" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Cu" = (/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Loading Bay 2";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cx" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Cy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Cz" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CA" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CB" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"CE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"CF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"CG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) +"CH" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CL" = (/obj/effect/large_stock_marker,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CM" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"CO" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CP" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"CQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CR" = (/obj/machinery/vending/snack,/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Auxilliary Entrance";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CS" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CU" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CX" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"CY" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/plating,/area/quartermaster/storage) +"CZ" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Da" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Db" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dd" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"De" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Df" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/floor_decal/corner/brown,/obj/structure/disposalpipe/junction{icon_state = "pipe-j2";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Dh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Di" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dj" = (/obj/machinery/door/airlock/glass_mining{name = "Cargo Bay";req_access = list(31)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Dm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/hallway/secondary/entry/aft) +"Dn" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"Do" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"Dp" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Dq" = (/turf/simulated/floor/plating,/area/quartermaster/storage) +"Dr" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ds" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Du" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/quartermaster/storage) +"Dx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Dz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DB" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"DC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"DD" = (/obj/structure/flora/pottedplant/random,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"DE" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"DF" = (/obj/machinery/light,/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 1";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft) +"DG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"DH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"DI" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "cargo_bay";name = "cargo bay hatch controller";pixel_x = -30;pixel_y = 0;req_one_access = list(13,31);tag_door = "cargo_bay_door"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DK" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/quartermaster/storage) +"DL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DM" = (/obj/structure/closet/secure_closet/cargotech,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Equipment Storage";dir = 8},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"DO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"DP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"DQ" = (/obj/machinery/door/airlock/maintenance,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"DR" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "QMLoad"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DS" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DT" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DU" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DX" = (/obj/structure/closet/secure_closet/cargotech,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DY" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"DZ" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ea" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Eb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ec" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Ed" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Ee" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Ef" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Eg" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Eh" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ei" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ej" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"El" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage) +"Em" = (/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"En" = (/obj/effect/landmark/start{name = "Cargo Technician"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Eo" = (/obj/structure/closet/secure_closet/cargotech,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ep" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/windowtint{pixel_x = 24;pixel_y = -24},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "qmdoor";name = "office door control";pixel_x = 15;pixel_y = -25;req_access = list(41)},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the cargo doors.";id = "cargodoor";name = "cargo door control";pixel_x = 15;pixel_y = -34;req_access = list(41)},/obj/effect/landmark/start{name = "Quartermaster"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Eq" = (/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = -30;pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Er" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Es" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Et" = (/turf/simulated/wall,/area/maintenance/substation/civilian_east) +"Eu" = (/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Loading Bay 1";dir = 8},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ev" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 1},/area/quartermaster/storage) +"Ew" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 1},/area/quartermaster/storage) +"Ex" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ey" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/device/megaphone,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ez" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Quartermaster's Office";dir = 8},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EA" = (/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp";pixel_x = 0;pixel_y = 0},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"EC" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"ED" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Civilian (Surface Level) Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"EE" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian (Surface Level) Subgrid";name_tag = "Civilian (Surface Level) Subgrid"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/light/small{dir = 4;pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"EF" = (/turf/simulated/open,/area/turbolift/cargo_deliverys) +"EG" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EK" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EL" = (/obj/machinery/door/airlock/mining{id_tag = "qmdoor";name = "Quartermaster";req_access = list(41)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EM" = (/turf/simulated/floor/tiled/ramp{icon_state = "ramptop";dir = 8},/area/quartermaster/storage) +"EN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EO" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EP" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"ER" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"ES" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Civilian (Main Level)"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"ET" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EU" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EW" = (/obj/machinery/door/airlock/mining{id_tag = "qmdoor";name = "Quartermaster";req_access = list(41)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp{icon_state = "ramptop";dir = 8},/area/quartermaster/storage) +"EY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"EZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/light_switch{pixel_x = -24;pixel_y = -24},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fa" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Fc" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"Fd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Civilian (Surface Level) Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"Fe" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian (Main Level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"Ff" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/quartermaster/storage) +"Fg" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fh" = (/obj/structure/closet,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fi" = (/obj/structure/closet/secure_closet/quartermaster,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fj" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6;pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4;pixel_y = 7},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fk" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3;pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/eftpos{eftpos_name = "Quartermaster EFTPOS scanner"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fl" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Fm" = (/obj/effect/floor_decal/corner/brown,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fn" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fp" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Fr" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fs" = (/obj/machinery/door/airlock/glass_mining{name = "Delivery Office";req_access = list(50)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Ft" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fv" = (/obj/item/weapon/storage/box,/obj/structure/table/standard,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Station Intercom (General)";pixel_y = 20},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fw" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fx" = (/obj/structure/table/standard,/obj/item/weapon/wrapping_paper,/obj/item/weapon/wrapping_paper,/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_y = 30},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"Fy" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/storage) +"Fz" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"FA" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"FB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"FC" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/quartermaster/storage) +"FG" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FH" = (/obj/structure/table/standard,/obj/item/device/destTagger{pixel_x = 4;pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4;pixel_y = 3},/obj/machinery/light{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FI" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/quartermaster/storage) +"FJ" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Mail Room";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FK" = (/obj/structure/filingcabinet/filingcabinet,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FL" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/storage) +"FM" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal/deliveryChute,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FN" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FO" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FP" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage) +"FQ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FR" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FS" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FU" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FW" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"FX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage) +"FY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction/flipped{dir = 1;name = "Sorting Office";sortType = "Sorting Office"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"FZ" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Ga" = (/obj/machinery/door/airlock/maintenance,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Gb" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Gc" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Gd" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Ge" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Gf" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Gg" = (/obj/structure/cable{icon_state = "11-4"},/obj/structure/disposalpipe/down{icon_state = "pipe-d";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 4},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/arrivals) +"Gh" = (/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Gi" = (/obj/machinery/light/small/emergency,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals) +"Gj" = (/turf/simulated/floor/asteroid,/area/supply/station) +"Gk" = (/obj/structure/sign/double/map/right{pixel_y = 32},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore) +"Gl" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/tiled,/area/bridge/levela) +"Gm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge/levela) +"Gn" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/bridge/levela) +"Go" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"Gp" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"Gq" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela) +"Gr" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela) +"Gs" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela) +"Gt" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/bridge/levela) +"Gu" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela) +"Gv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/bridge/levela) +"Gw" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/bridge/levela) +"Gx" = (/turf/simulated/open,/area/turbolift/command_station) +"Gy" = (/turf/simulated/open,/area/turbolift/command_station) +"Gz" = (/turf/simulated/open,/area/turbolift/command_station) +"GA" = (/turf/simulated/open,/area/turbolift/command_station) +"GB" = (/turf/simulated/open,/area/turbolift/command_station) +"GC" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela) +"GD" = (/turf/simulated/open,/area/turbolift/command_station) +"GE" = (/turf/simulated/open,/area/turbolift/command_station) +"GF" = (/turf/simulated/open,/area/turbolift/command_station) +"GG" = (/turf/simulated/open,/area/turbolift/command_station) +"GH" = (/turf/simulated/open,/area/turbolift/command_station) +"GI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela) +"GJ" = (/turf/simulated/open,/area/turbolift/command_station) +"GK" = (/turf/simulated/open,/area/turbolift/command_station) +"GL" = (/turf/simulated/open,/area/turbolift/command_station) +"GM" = (/turf/simulated/open,/area/turbolift/command_station) +"GN" = (/turf/simulated/open,/area/turbolift/command_station) +"GO" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela) +"GP" = (/turf/simulated/open,/area/turbolift/command_station) +"GQ" = (/turf/simulated/open,/area/turbolift/command_station) +"GR" = (/turf/simulated/open,/area/turbolift/command_station) +"GS" = (/turf/simulated/open,/area/turbolift/command_station) +"GT" = (/turf/simulated/open,/area/turbolift/command_station) +"GU" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela) +"GV" = (/turf/simulated/open,/area/turbolift/command_station) +"GW" = (/turf/simulated/open,/area/turbolift/command_station) +"GX" = (/turf/simulated/open,/area/turbolift/command_station) +"GY" = (/turf/simulated/open,/area/turbolift/command_station) +"GZ" = (/turf/simulated/open,/area/turbolift/command_station) +"Ha" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/bridge/levela) +"Hb" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela) +"Hc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/bridge/levela) +"Hd" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeacacacacacabaaafaaabacacacacacaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaaaaaaaaaaaaaaacaaaaaaaaaaaaaaahaaaiaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagaaaaaaaaaaaaacaaajajajajajaaakaaajajajajajaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaaaaacaaamalalalalanakaoapapapapaqaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaaaaacaaarararararaaakaaarararararaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagaaacaaaaaaaaaaaaaaakaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaaacaaajajajajajaaakaaasasasasasaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaaacaaamalalalalanakaoapapapapaqaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaaaaacaaarararararaaakaaarararararaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagaaaaacaaaaaaaaaaaaaaakaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagaaaaacaaajajajajajaaakaaajajajajajaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagaaaaacaaamalalalalanakaoapapapapaqaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagaaaaacaaarararararaaataaarararararaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagaaaaacaaaaaaaaaaaaaaauaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagaaaaaaaaaeacacacacacacavawavacacacacacacaeaaaaagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaxayaxaaaaaaaaaaaaaaaaagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaAaBaCaDaEaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaagaFaGaIaHaFagaaaaaaagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaFaJaLaKaFagagaaagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaFaMaOaNaFagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaFaFaQaFaFagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaPaSaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaUaTaPagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaPaVaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaXaYaaaaaaaZbabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaPaVaPbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcaPagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdbebdaaaaaabdbfbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaagagagaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbgbgbgbgbgbgbgbgbgbgbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabibjbkblblblbmbnboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaagagaaaaaaaaaaaaaaagagagagagagagagagaPaVaPbcbcbgbgbgbgbgbgbgbgbgbgbgbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbqbrbsbtbubvbwbrbxbtbqbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagaPaVaPbcbgbgbgbybybzbAbBbCbDbEbgbhbhbhbhbhbhbhbhbFbhbGbHbIbJbKbLbhbhagagagagagagaaaaaaaaaaaaaaaaaaaaaabMbMbMbMbMbMbMaaaaaaaaaaaabNaaaaaaaaaaaaaaaabObPbQbRbSbTbTbTbSbUbQbVbOaaaaaaaaaaaabNaaaaaaaaaaaaaaaabWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaagagagagaPaVaPbcbgbgbybybybXbYbZcacbcccdbhcecfcgchcicjbhckbhclcmcmcmcmbLbhbhagagagagagagagagaaaaaaaaaaaaaaaabMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaacncocpcqcqcpcrcpcqcqcpcscnaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaPaVaPaPbgbgbybybybXctcvcucwcxcdbhczcycBcAcDcCbhckbhcEcmcmcmcmcFbhbhagagagagagagagagagaaaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacncGcHcqcqcHcIcHcqcqcHcJcnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaeacacacacacacacacacacacacacaeaaagagagagaPaVaPbcbgbgbybybybycKcLcMcNcKcOcPcQcRcmcmcScTbhcUbhcVcWcXcYcYcZbhbhagagagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacndacqcqcqcqdbdcdcdcdcddcnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaacaaagagagagaPaVaPbcbgbgbybybybXdedgdfdhdhdjdidldkdmdkdnbhbhbhbhdobKdpdqbKbKbhbhagagagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacncocpcqdrdsdtcpcqcqcpcscnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaadudwdvaadudwdvaadudwdvaaacaaagagagagaPaVaPbcbgbgbybybybXdxdydzdAdAdBbhdCdDdEcmdGdFdHdIbhbhbhdJbhbhbhbhbhbhagagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacncGcHcqcqcHdLdKcqcqcHcJcnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaadudMdvaadudMdvaadudMdvaaacaaaaagagagaPaVaPbcbgbgcadNbybXdxcddOdOdOdOdOdPdQdRdSdTbhbhdUbhdObXdVcdbydNbybgbgagagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaadWdXdYdYdZeaebeceddYdYeedWaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaadudMdvaadudMdvaadudMdvaaacaaaaagagagaPaVaPbcbgbgbybybybXefegdOeheheheiekejelehenemeoepeqdObXdVcdbybybybgbgagagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaereseteteteteteuerbqevewexbqeyebezbqevewexbqeAeBeCeCeCeCeCeDeAaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaadudMdvaadudMdvaadudMdvaaacaaaaagagagaPaVaPbcbgbgbybybybXeEeFdOehepepepeGepeHepeGepepepehdObXdVcdeIeJeKbgbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaereMeLeNeOeLeNePeQaaaaaaaabOeyebezbOaaaaaaaaeReTeSeVeUeSeVeWeAaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabacacabeXdudMdvaadudMdvaadudMdvaaacaaeYeZeZeZeZaVaPbcbgbgbybybybXfafbdOehfcfdfeeGepffepeGepfgfhehdOfifjcdfkflfmfnbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMfofpfpfqfsfrftfufrfvfwfxaaaaaaaafydXfzeefyaaaaaaaafAfCfBfDfEfBfDfFfGfHfHfIbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaacaaaaaaaaaafJaaaaaafJaaaaaafJaaaafKfLfMfOfNfPeZaVaPbcbgbgbybybybXfQfRdOehepepepeGepfSepeGepepepehdOfTfUfVfWfXfYfZbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMgbgagdgcgefufufufugffwggaabqevexbqghgighbqevexbqaagjfCfEfEgkfEfEgmglgogngpbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaacaagrgqgsgtgtgtgtgtgtgtgtgtgtgugwgvgygxgAgzgCgBgDaPbcbgbgbybybybXgEgFdOgGgHgIgJenehgKehengLgMgNgOdOgQgPdggRgSgTgUbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMgVfpgWgXgYgZhafufugfhberbqbqhdhchchchehchfhchgbqbqeAhhfEfEhifEfEhjhkhlfHhmbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaacaaaaaaaaaahnaaaaaahnaaaaaahnaaaafKfLhohphqhreZhsaPbcbgbgbybybybXhthudOehhvhwhxeGepfSepeGhxhyhzehdOhAhBhChDhEhFhGbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaahHhIhJfrhKfufrhKfwhLhNhMhOhPhQhRhShThUhVhWhchXhYfCfBfDhifBfDiahZibaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabacacabaaduicdvaaduicdvaaidicdvaaacaaieeZeZeZeZaVaPbcbgbgbybybybXdVcddOehepepepeGepifepeGepepepehdOigihcdfkiiijikbgbgagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaahHilinimioipiriqitisiviuixiwiziyiBiAiDiCiEixiGiFiIiHiJiKiMiLiOiNibaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaaduicdvaaduicdvaaidicdvaaacaaagagagagaPaVaPbcbgbgbybybybXdxcddOehiPiQiRiSepeHepiTiUiViWehdOiXiYcdiZeJeKbgbgbgagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaahHjajbfrftjcfrftjejdjgjfjhdYjidYdYdYjidYjjcqjkhYjlfBfDhifBfDiajmibaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaaduicdvaaduicdvaaidicdvaaacaaagagagagaPaVaPbcbgbgbybybybXdxcddOehehehjnehehjoehehjpehehehdObXdVcdbybybybgbgagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMgVfpjqjrgYfufujcfufujserjtjueejvjwjxjyjxjAjzdXjBjCeAjDfEfEhifEfEhjjEjFfHhmbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaaduicdvaaduicdvaaidicdvaaacaaaaagagagaPaVaPbcbgbgcadNbybXdVcddOdOdOdOdOdOdOjGdOdOdOdOdOdOdObXdVcdbydNcabgbgagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMjIjHjKjJjLfufujMfufujNerjPjOjPjxjRjQjTjSjUjxjVjVjVeAjWfEfEhifEfEjYjXkajZkbbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaadukcdvaadukcdvaaidkcdvaaacaaaaagagagaPaVaPbcbgbgbybybybXdVkdkecOcOkfkgkikhkjkkklkmkfcOcOkekndVcdbybybybgbgagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMfofpfpkofsfrftfufrftkperkrkqksktkukvkwkvkxktkycqkzeAkAfBfDhifBfDfFkBfHfHfIbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaagagagaPaVaPbcbgbgbybybybXkCdgdgdgdgkDkEkEkEkFkEkEkEkGdgdgdgdgkHcdbybykIbgbgagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaerkKkJkLkMkJkLkNerkOkqkykPkRkQkSkTkUkPkycqkVeAkWkXkYkZkXkYlaeAaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaeacacacacacacacacacacacacacaeaaagagagagaPaVaPbcbgbglbbybybydAdAdAdAdAkflcldkklelfldkmkfdAdAdAdAdAbybybybybgbgagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaereslglglglglglherlikqkyljlklllmlnlplokycqlqeAeBeCeCeCeCeCeDeAaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaPaVaPaPbgbgbybybybybybybybykfkfkfkfkflrkfkfkfkfbgbybybybybybybybybgbgagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaabqltlsltjxlvlulwlxlyjxlzlzlzbqaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagaPaVaPbcbgbgbybybybybybybybylAlBkhlDlClFlElGkklIlHbybybybybybybybybgbgagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaalJhNlKlLjAlMjwlNjAlMlOlPlQhXlJaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagaPaVaPbcbgbgbgbybybybybybybgkflSlRlUlTlVkhlWkhlXbgbgbybybybybybybgbgbgagagagagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaacnjgkqcqlYlZlYmalYlZlYcqcqjkcnaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagaPaVaPbcbcbgbgbgbgbgbgbgbgbgkfkfkfkfmbmcmbkfkfkfbgbgbgbgbgbgbgbgbgbgagagagagagagagagagagagagagaaaaaaaaaabMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnjgmdiEixixixmecqcqcqcqcqjkcnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbgbgbgbgbgbgbgbgkfkfmfmfmgmhmimfmfkfkfbgbgbgbgbgbgbgbgagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWmjmkmlcqcqcqjfmmmmmmmnmojCdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbcbcbcbcbcbcbcbcbcbcmfmfmgmhmgmfmfbcbcbcbcmfmpmpmqmrmfagagagagaaaaaaaaaaaaaaagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbqbqmsmkmtmkmumkmvmkmwbqbqbqagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbcbcbcbcbcbcbcbcbcbcmfmxmymAmzmBmfmfmfmfmfmfmCmDmEmDmfmfmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqevexbqmFmGmFbqevexbqagagagagagagagagaaaaaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagaPaVaPaPaPaPaPaPaPaPaPaPaPaPaPaPmfmImgmKmJmMmLmNmNmNmNmLmNmNmOmQmPmSmRmTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOcqkqcqbOaaaaaaaaaaagagagagagagagagaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaPmUaRaRaRaRaRaRaRaRaRaRaRaRaRmWmVmXmXmZmYmgmfmfmfmfmfmfmfmfmfnamfmfmfnbaaagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafycqkqcqfyaaaaaaaaaaaaagagagagagagagaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaVmfmgmgncmgmgmfndndagagagagagneneneagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqnfewewewngbqnhkqninjnknlnlnlnmnjnjnjnjagagagaaaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagaPaVmfnnnonpnpnqmfagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaalJnrnsntnunvnwnxnycqnznAnAnBnAnCnDnEnFnjagagagaaaaaaaaaaaaaaagagmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagaPaVmfmfmfmfmfmfmfagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnnGnGnGnHnInwnJnKnLnMnNnOnPnQnRnSnTnUnjagagagagaaaaaaaaagagagagmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagaPmUaRaRaRnWnVaPagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnnXnYnZoaobocodoeixogofoiohokojololomnjagagagagagaaaaaaagagagagmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagaPaPaPononooononagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnopoqnGoporbqoskqcqotnAounBovnCnTnTownjagagagagagagaaaaaaagaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagonoxozoyonagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnoAoBnGoDoCbOoEjfjhoFnAoGoHoInCnToJoKnjagagagagagagaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagonoLoNoMonagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnoOoDoPoQoBcnoEkqoRnjnjnjnjnjnjnjnjnjnjagabagagagagagaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagaaaaaaaaaaaaagonoSoUoTonagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWoVoWoXoYoVfyoEkqoZbqpapapapapapapabqagagpbagagagagagaaaaaaaaaaaamHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagaaaaaaaaaaaaaaaapcpdpepfpgaaaaagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaphphphphphphphpipjnwbqpapapapapapapabqagagaaaaaaagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaapkplpkaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagphpmpnpopppqproEkqpsbqpapapapapapapabqagaaaaaaaaaaaaaaaaaaaaagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagaaaaaaaeacacacacacacptpuptacacacacacacaeaaagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagphpvpwpwpwpxpzpypAcqbqpapapapapapapabqaaaaaaaaaaaaaaaaaaagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagaaaaaaaaacaaaaaaaaaaaaaapBaaaaaaaaaaaaaaacaaagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagphpCpDpDpDpEpFpGkqpHbqpapapapapapapabqpIpJaaagagagaaaaagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaaaaaaaaaaacaapKpKpKpKpKaapLaapKpKpKpKpKaaacaaagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagphpMpDpDpDpNpOoEpQpPbqpapapapapapapabqpRbqagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaaaaaaaaaaacaapTpSpSpSpSpUpVpWpXpXpXpXpYaaacaaagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagphpZpDqapDqbpOoEkqoZbqpapapapapapapabqqcbqagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaucudueaaufuguhaauiujukaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaacaaqdqdqdqdqdaapVaaqdqdqdqdqdaaacaaagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagphqepDpDqfqgpOoEkqcqbqbqbqbqbqbqbqbqbqqjbqbqbqagagagagagagagagagagaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguBuDuCuDuBuFuEuFuBuHuGuHuBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaapVaaaaaaaaaaaaaaacaaaaaaaaagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagphqkpDpDqlqmpOqnkqcqqocqqqcqqrcqcqcqcqquqpGkbqqvqvqvqvqvqvqvagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuDvauDuZuFvbuFuZuHvcuHuZaaaaaaaavdaaaaveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapKpKpKpKpKaapVaapKpKpKpKpKaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagphqwpDpDqlpDqxoEqyixixixqzixqAixixixixqBqDqCbqqEqGqFqIqHqJqvagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZvCvBvCuZvEvDvEuZvGvFvGuZuZuZuZvHvIvJveveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapTpSpSpSpSpUpVpWpXpXpXpXpYaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagphpDqKqLqMqNqOqPqQcqcqcqcqcqqRcqcqcqcqcqqTqSbqqEqGqUqVqWqJqvagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwbwcwdweuZwcwdweuZwcwdweuZuZwfwhwgwjwiveveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaqdqdqdqdqdaapVaaqdqdqdqdqdaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagqXqXqXqXphqYqZrarbrcrdoEkqcqrerfrfrgrhrirfrfrjcqqTrkbqqEqGrlrmqWqJqvagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuZwDwEuZuZwFwGuZuZwHwEuZuZwIwKwJwLvJveveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaapVaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagqXrnrorpphphrqphphphbqrrrscqrtrurvrwrxryrzrArBcqrCjhbqqErDrErmrFqJqvagaaaaaaaarGrIrHrHrJrJrHrHrHrJrHrKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZxcxbxdxexfxgxdxhxixjxlxkxnxmxpxoxqaaaaveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapKpKpKpKpKaapVaapKpKpKpKpKaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXrnrMrLrLrLrLrLrLrLrOrNrPcqrtrQrRrSryrSrzrTrUmmrVcqbqqvqvrWrXqvqvqvaaaaaaaaaarGrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZuZuZuZuZuZxOxdxdwbxPxQxdwbxdxRxTxSxUxdxpxouZuZuZuZuZxVxXxWuZuBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapTpSpSpSpSpUpVpWpXpXpXpXpYaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXqXsasbsbsbsbsbsbsbbqoEkqcqrBscsdrSserSrzsfsgcqqTcqnwshsisjsksislsmaaaaaaaaaasnrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZGlyqGmyrysuZuZytyuyuyuyvywyxyyyxyzyByAyCyDxpxoyEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaqdqdqdqdqdaapVaaqdqdqdqdqdaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagqXsosbspsqsrssstsusvoEkqnirhswsxrSserSsdsyrhcqszixsBsAsAsCsDsEsFsGsHaaaaaaaasIrYrYrYrYrYrYrYrYrYrYsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZyQyRySyRyTuZuZyUyVyWyVyYyXyZwbzbzazcuZuZzdwKzezfyWyVyVyVyVyVyVyVyVyVyVzgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaasJaasKaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagqXsosbsLsMsMsMsMsMsNoEkqcqsOsPrzrSryrSrzsQsRcqqTnJsSsTsTsUsTsTsVsWsXsXsXsXsXsYrYrYrYrYrYrYrYrYrYrYsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozqzpzszrztzuzvzwzxzyzzzAzAzBzCzDzEzFaaaaaazGuZzHzIzJzKzLzLzLzJzMzJzLzLzNzPzOzQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeacacacacacabaasZaaabacacacacacaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagqXqXqXqXtasbtbsMtctdtesMsNtfthtgtjtitltktmsQsQsQrtnxtotnbqtptqtrtstttttutvtvtvtvtvtwrYrYrYrYrYrYrYrYrYrYsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAduZuZuZAeAfAgAiAhuZAjAkAlAlAmAlAnAoApaaaaaaaauZuZuZAqAryVyVAsAuAtAvyVyVyVyWtWvJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaatxaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagqXrorororosbtysMtztdtesMtAoEkqcqsRtBrysdtCsdrzsdrtcqqToEtDtttEtFtGsAsAtHtItItItJtKtwrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZGnGoGpGqGrGsGtuZAHAkAIAJAJAIAKALApaaaaaaagagaaaaaaAMaaaaaaAOANAPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagqXrosbsbsbsbtLsMtMtNtdtOsboEkqcqtPrftQtRrhtStQrftTcqqToEtUtttttVttttttsmtXtXtYtZuaubrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZGuuZuZuZuZuZuZuZAUAVAWAWAWAWAnALApaaaaaaagaaaaaaaaaaaaaaaaxqAXxqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagaaagagqXrosbulunumuoupuqupupupuruskqcqcqcqcqcqutcqcqcqcqcqqToEuuuvuwttuxuyuvsWaarGrGuArGrGrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZGvGwGxGxGxGxGxuZBeBfBgBhALALALBiBjaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaaaaaaagqXrosbuIuJuJsMsMuKuLuMuMuOuNuPixixixuQixqzixixuRixiEuSoEbqqvqvuTqvqvqvqvaauUuVuWuYuXrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuZGuGxGxGxGxGxuZuZuZuZuZBpBqBqBruZaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaaaaaaaaagqXrosbuluJvfsMsMvgvhsMsMvivjnKvkvlnLnKvmvnvovpnKnLvqvsvrvtvuvuvuvvvwqXagagrGvyvxvzvArYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuGxGxGxGxGxwduZagagagaaaaaaaaaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqXrosbsbsbsbsMvKvLvMvLvNsbvOvPvOvOvQvRvQvQvQpipjnwvSvTvUvVvWvTvXroqXqXagrGrGvYrGrGrGvZrHrHrJrHrHrHrHrJrHwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuGxGxGxGxGxwduZagagaaaaaaaaaaaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqXrororprosbwksbsbsbsbsbsbwlwmwnvOwowpwqwrvQwswtwuwvwwwxwywzwAwvroqXagagrGwBwCwBrGagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuGxGxGxGxGxwduZaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqXqXqXqXrororororororowMvOwNwmwOvOwPwQvQvQvQwRwSwTwUwVwzwWwzwAwvroqXagagrGwXwZwYrGagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZGvHbHbHcwdwdwduZaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagqXqXqXqXqXqXrororovOxrxsxtvOxuxvxwwrvQxxxyxAxzxCxBxDwzxEwvxFqXagagrGxGxIxHrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuZuZuZGuuZuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagqXxYxZrovOyaybycvOydyevQvQvQygyfyhyiwzyjwxwzykwvroqXagagrGylymynrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaguZGuuZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagqXqXqXrovOyFyGyHvOyIxvyJwrvQyKyfyhwvwzyLyMwzyNwvroqXagagrGyOynyPrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXrovOyHzhzivOvQzjvQvQvQzkyfyhzlvTvUvVvWvTzmroqXqXqXrGrGznrGrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXrovOyazRzSvOzTzUzVvQzWzXzYzZAaAbAcqXrprororororororororpqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagqXrovOwnAxxtvOzTAyAzvQzWAAyfyhABAbAcqXroqXqXqXqXqXqXqXqXqXqXagagaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagqXrovOwNAxAQvOvQvQvQvQzWASARyhABAbAcqXroqXagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaguZuZATwbuZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagqXrpvOwnAxAYvOagagagaazWzXyfyhAZAbBaqXroqXagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaguZBbBcBduZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagqXqXqXqXqXqXqXroqXqXBlqXqXqXqXqXqXzWzXyfBmzWqXqXqXroqXagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZBoBnwduZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagqXrorororororororororororororprorpBszXyfyhBsrorororoqXagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzaguZuZuZuZuZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagqXqXqXroqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXzWBtBuBvzWqXqXqXqXqXagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBwBwBwBwBwagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagqXAwByroqXagagagagagagagagaaaaaaaaagaaBzBAyfBBBCBDagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagqXroBFBGqXagagagagagagaaaaaaaaaaaaaaaaBzBAyfBBBCaaaaaaagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagqXqXqXBHqXagagagagaaaaaaaaaaaazWzWzWzWzWBAyfBBBCaaaaaaaaaaagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagqXBHqXagagagagaaaaaaaaaaaazWBIBJBKzWBAzYBLBCaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqXqXqXBHqXagagagagagaaaaaaaaaazWBMBNBOzWBAyfBBBCaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqXBPBQBRqXagagagagagagaaaaaaaazWBSBTBUzWBAyfBBBCaaaaaaaaaaaaaaagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBVBVBVBVBWBVBVBVBVBVBVBVBVBVBVBVBVzWzWzWBXzWzWBtBuBvzWaaaaaaaaaaaaaaaaagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaBYBZCaCbCcCdCeCfCeCgChCiCjClCkCmBVCnCoyhCpCqCrzXyfyhCsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaCtCuChChCvChChChCwChChCxCyCzChCABVCByhyhCpCCwTzXzYzZCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCECFCGCHCICJCKChCLCMCLCLChCxCNCOChCPBVCRCQCTCSCVCUCXCWyhCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCYCZCYDbDaChDcChChChChDdDeDfDgDiDhDkDjDmDlyhyhyhDnDoyhyhCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBxBxBxBxBxBxBxuzuzuzaaaauzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjDpDqDpDrChChDsDtDtDtDtDuDvDxDwDzDyDABVDBDCyhyhDDDEDoDFyhDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBxBxBxBxBxBxBxBxBxuzuzaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCECFDHDIChChChChChChChCxDJCADKCODLDMBVDNDODODPBVBVDQzWzWzWagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjDpDqDpDSDRDTDTDTDRChChCxDJDUCjDWDVDXBVDYDZEaEbBVEcEdqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjEeEfEeEgEgEhEgEgEgEiCIEjEkChElEmEnEoBVEqEpChErBVEsEtEtEtEtagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCECFDHBVBVBVBVBVBVBVBVHdDJEuBVEwEvBVBVEyExEAEzBVEBEDECEEEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaaaBVEFEFEFEFEFEFBVCxEHEICjEKEJEMELENEOCwEPBVEQEtERESEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaagBVEFEFEFEFEFEFBVETDJChElEUEVEXEWEZEYEYFaBVFbFdFcFeEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjaaaaaaagBVEFEFEFEFEFEFBVFgDJChBVBVBVBVBVFhFiFkFjBVFlEtEtEtEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaagagBVEFEFEFEFEFEFBVFgDJFmBVFoFnFpBVBVBVBVBVBVFqqXagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagBVEFEFEFEFEFEFBVFrDsDxFsFtFuEIFvFxFwFyFzFBFAqXagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagBVEFEFEFEFEFEFBVFCFDFEFFFGChChChChFHBVFlqXqXqXagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagBVBVBVBVBVBVBVBVBVBVBVBVFIFJChChChFKFLFlqXagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagBVFMFNChCwChFOFPFlqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagBVFQDSDTChFRFSBVFlqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagBVFTFUFVFFDeFWFXFYqXagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagBVBVBVBVBVBVBVBVFlqXagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzagagagagagagagagagaaaaaaagagagagagagagagagqXFzFZqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaagagagagagagaaaaaaaaaauzuzaaaaagagagagagqXGaqXqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaqXqXFlqXqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaauzaaaaaaaaaaaaqXGbGdGcqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaqXGeFlGfqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzaaaaaaaaaaaaqXGgGiGhqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzaaaaaaaaaaaaqXqXqXqXqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxuzBxBxBxBxBxuzBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxuzBxBxBxBxBxuzBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxuzuzuzuzuzuzuzBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEuzuzBEuzuzuzBEuzuzuzuzuzBEuzuzuzBEuzuzBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEBEBEBEuzuzuzBEBEBEBEBEBEBEuzuzuzBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEuzuzBEBEBEBEBEBEBEBEBEuzuzBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEuzuzBEBEBEBEBEBEBEBEBEuzuzBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBEBEBEBEBEBEBEuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/Aurora-MapDev/aurora-6.dmm b/maps/Aurora-MapDev/aurora-6.dmm new file mode 100644 index 00000000000..3d4cf0b5f31 --- /dev/null +++ b/maps/Aurora-MapDev/aurora-6.dmm @@ -0,0 +1,509 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/simulated/floor/asteroid,/area/space) +"ac" = (/turf/simulated/mineral/random/high_chance,/area/space) +"ad" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/reinforced/airless,/area/space) +"ae" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space) +"af" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/reinforced/airless,/area/space) +"ag" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space) +"ah" = (/turf/simulated/floor/reinforced/airless,/area/space) +"ai" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space) +"aj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/simulated/wall/r_wall,/area/space) +"ak" = (/obj/structure/lattice,/turf/space,/area/space) +"al" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space) +"am" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"an" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/reinforced/airless,/area/space) +"ao" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/reinforced/airless,/area/space) +"ap" = (/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"aq" = (/turf/simulated/open,/area/space) +"ar" = (/turf/simulated/wall/r_wall,/area/tcommsat/lounge) +"as" = (/obj/effect/floor_decal/industrial/warning{tag = "icon-warning (EAST)";icon_state = "warning";dir = 4},/turf/simulated/floor/reinforced/airless,/area/space) +"at" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"au" = (/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"av" = (/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aw" = (/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"ax" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/reinforced/airless,/area/space) +"ay" = (/obj/structure/table/rack,/obj/random/smalltank,/obj/random/firstaid,/obj/random/loot,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"az" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aB" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/dispenser/oxygen,/obj/machinery/light{dir = 4;status = 2},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aC" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{tag = "icon-warning (EAST)";icon_state = "warning";dir = 4},/turf/simulated/floor/reinforced/airless,/area/space) +"aD" = (/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/table/standard,/obj/random/powercell,/obj/random/powercell,/obj/random/tool,/obj/random/junk,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aG" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aH" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/reinforced/airless,/area/space) +"aI" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/reinforced/airless,/area/space) +"aJ" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/tcommsat/lounge) +"aK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/reinforced/airless,/area/space) +"aL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aM" = (/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/table/standard,/obj/random/powercell,/obj/random/loot,/obj/random/tool,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aN" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/tcommsat/lounge) +"aO" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space) +"aP" = (/obj/structure/cable/blue{tag = "icon-11-4 (EAST)";icon_state = "11-4";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{tag = "icon-down-scrubbers (NORTH)";icon_state = "down-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/zpipe/down/supply{tag = "icon-down-supply (NORTH)";icon_state = "down-supply";dir = 1},/turf/simulated/open,/area/space) +"aQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)";icon_state = "intact-scrubbers";dir = 5},/obj/item/clothing/glasses/night,/obj/random/powercell,/obj/random/loot,/obj/random/tool,/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room";req_access = list(61)},/obj/machinery/door/firedoor,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aX" = (/obj/structure/lattice,/turf/simulated/open,/area/space) +"aY" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"aZ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space) +"ba" = (/obj/structure/closet/secure_closet/personal,/obj/random/contraband,/obj/random/medical,/obj/random/tech_supply,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bb" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bc" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/loot,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bd" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge) +"be" = (/obj/structure/sink{pixel_y = 28},/obj/structure/mirror{pixel_x = 32},/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge) +"bf" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bg" = (/obj/structure/banner,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/lounge) +"bj" = (/obj/structure/flora/pottedplant/random,/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bk" = (/obj/effect/floor_decal/industrial/warning,/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"bl" = (/obj/effect/floor_decal/industrial/warning,/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space) +"bm" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bn" = (/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bo" = (/obj/structure/bed,/obj/item/weapon/bedsheet/blue,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bp" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge) +"bq" = (/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge) +"br" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge) +"bs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{tag = "icon-intact-supply (NORTHWEST)";icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHWEST)";icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/lounge) +"bx" = (/obj/machinery/computer/arcade,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"by" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/loot,/obj/random/belt,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bA" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/coin,/obj/random/colored_jumpsuit,/obj/random/tool,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bB" = (/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bD" = (/obj/machinery/vending/cola,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bE" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"bF" = (/obj/structure/bed,/obj/item/weapon/bedsheet/purple,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bH" = (/obj/structure/bed,/obj/item/weapon/bedsheet/yellow,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bI" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/sign/deathsposal{pixel_y = 32},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bJ" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/structure/table/reinforced,/obj/item/weapon/material/ashtray/plastic,/obj/item/weapon/cigbutt/cigarbutt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bK" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bM" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/lounge) +"bO" = (/obj/machinery/vending/snack,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bP" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"bQ" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/colored_jumpsuit,/obj/random/booze,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bR" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bT" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/turf/simulated/floor/lino,/area/tcommsat/lounge) +"bU" = (/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space) +"bV" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/obj/structure/curtain/open/bed,/obj/structure/window/reinforced/tinted,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bW" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/structure/curtain/open/bed,/obj/structure/window/reinforced/tinted,/turf/simulated/floor/carpet,/area/tcommsat/lounge) +"bX" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bY" = (/obj/structure/table/reinforced,/obj/item/trash/tray,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"bZ" = (/obj/structure/table/reinforced,/turf/simulated/floor/lino,/area/tcommsat/lounge) +"ca" = (/turf/simulated/floor/lino,/area/tcommsat/lounge) +"cb" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor/lino,/area/tcommsat/lounge) +"cc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/tcommsat/lounge) +"cd" = (/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"ce" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cf" = (/obj/structure/table/reinforced,/obj/item/trash/tastybread,/turf/simulated/floor/lino,/area/tcommsat/lounge) +"cg" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -4;pixel_y = 0},/turf/simulated/floor/lino,/area/tcommsat/lounge) +"ch" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/tcommsat/lounge) +"ci" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)";icon_state = "intact-scrubbers";dir = 5},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cj" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"ck" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cl" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cm" = (/obj/structure/table/reinforced,/obj/item/trash/koisbar,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHWEST)";icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"co" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/lino,/area/tcommsat/lounge) +"cp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/tcommsat/lounge) +"cq" = (/obj/structure/table/reinforced,/obj/item/weapon/deck/tarot,/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cr" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cs" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"ct" = (/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cu" = (/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cv" = (/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge) +"cw" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/lino,/area/tcommsat/lounge) +"cx" = (/obj/machinery/light,/turf/simulated/floor/lino,/area/tcommsat/lounge) +"cy" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/simulated/floor/lino,/area/tcommsat/lounge) +"cz" = (/turf/simulated/wall/r_wall,/area/security/checkpoint2) +"cA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"cB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"cC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"cD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/tcommsat/lounge) +"cE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/tcommsat/lounge) +"cF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/tcommsat/lounge) +"cG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"cH" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/button/remote/blast_door{id = "seccheckpointup";name = "Watchpost Lockdown";pixel_x = 5;pixel_y = 32},/obj/machinery/light_switch{pixel_x = -8;pixel_y = 32},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cI" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/table/standard,/obj/item/device/camera,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cJ" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cL" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cM" = (/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/reinforced/airless,/area/space) +"cN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"cO" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cP" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/table/standard,/obj/item/device/binoculars,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cQ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cR" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space) +"cS" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"cT" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cU" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light{dir = 4;status = 2},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"cW" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/bed/chair,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cX" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"cY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"cZ" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"da" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/table/standard,/obj/item/weapon/dice,/obj/item/weapon/deck/cards,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"db" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"dc" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2) +"dd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"de" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"df" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"dg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"dh" = (/obj/random/loot,/turf/space,/area/space) +"di" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/space) +"dj" = (/obj/effect/landmark/corpse/engineer/rotten,/turf/simulated/floor/asteroid,/area/space) +"dk" = (/turf/simulated/wall,/area/space) +"dl" = (/obj/structure/boulder,/turf/simulated/floor/asteroid,/area/space) +"dm" = (/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)";icon_state = "warning_dust";dir = 5},/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (SOUTHWEST)";icon_state = "warning_dust";dir = 10},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/space) +"dn" = (/obj/structure/boulder{icon_state = "boulder3"},/turf/simulated/floor/asteroid,/area/space) +"do" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/effect/floor_decal/sign/ex,/turf/simulated/floor/reinforced/airless,/area/space) +"dp" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/machinery/power/solar{id = "roofsolars";name = "Roof Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport) +"dq" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/obj/machinery/power/solar{id = "roofsolars";name = "Roof Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport) +"dr" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxport) +"ds" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxport) +"dt" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport) +"du" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxport) +"dv" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space) +"dw" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space) +"dx" = (/turf/simulated/floor/airless,/area/solar/auxport) +"dy" = (/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport) +"dz" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport) +"dA" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space) +"dB" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{tag = "icon-warning (EAST)";icon_state = "warning";dir = 4},/turf/simulated/floor/airless,/area/space) +"dC" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space) +"dD" = (/obj/machinery/power/solar{id = "roofsolars";name = "Roof Solar Array"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport) +"dE" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport) +"dF" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/sign/pods,/turf/simulated/floor/reinforced/airless,/area/space) +"dG" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport) +"dH" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"dI" = (/turf/simulated/wall/r_wall,/area/space) +"dJ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"dK" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/airless,/area/space) +"dL" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space) +"dM" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/airless,/area/space) +"dN" = (/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/reinforced/airless,/area/space) +"dO" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/space) +"dP" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space) +"dQ" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space) +"dR" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space) +"dS" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space) +"dT" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space) +"dU" = (/turf/simulated/wall/r_wall,/area/maintenance/solarmaint) +"dV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)";icon_state = "rwindow";dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"dW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"dX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space) +"dY" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/space) +"dZ" = (/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ea" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/lattice,/turf/simulated/open,/area/maintenance/solarmaint) +"eb" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ec" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ed" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ee" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ef" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"eg" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Aft Solar Maintenance";dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"eh" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ei" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ej" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ek" = (/obj/machinery/power/solar_control{id = "roofsolars";name = "Aft Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"el" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0;pixel_y = -32},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"em" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_roof_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"en" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"eo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ep" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)";icon_state = "rwindow";dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"eq" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"er" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"es" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "solar_roof_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "solar_roof_pump";tag_chamber_sensor = "solar_roof_sensor";tag_exterior_door = "solar_roof_outer";tag_interior_door = "solar_roof_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "solar_roof_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "solar_roof_pump"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"et" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"eu" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/solarmaint) +"ev" = (/obj/structure/closet/crate/solar,/turf/simulated/floor/reinforced/airless,/area/space) +"ew" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space) +"ex" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "solar_roof_airlock";name = "exterior access button";pixel_x = -25;pixel_y = 25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/airless,/area/space) +"ey" = (/obj/structure/cable{tag = "icon-1-8 (WEST)";icon_state = "1-8";dir = 8},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space) +"ez" = (/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space) +"eA" = (/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space) +"eB" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/turf/simulated/floor/airless,/area/space) +"eC" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space) +"eD" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space) +"eE" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space) +"eF" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space) +"eG" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space) +"eH" = (/obj/structure/cable{tag = "icon-11-2 (NORTH)";icon_state = "11-2";dir = 1},/obj/structure/lattice,/turf/simulated/open,/area/space) +"eI" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space) +"eJ" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space) +"eK" = (/obj/effect/landmark/map_data{height = 6},/turf/space,/area/space) +"eL" = (/turf/space,/area/syndicate_station/above) +"eM" = (/turf/space,/area/skipjack_station/above) +"eN" = (/obj/machinery/light,/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2) +"eO" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2) +"eP" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2) +"eQ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacababacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacababababacacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaadaeafaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababababacabababababababababacacababaaaaaaaaaaaaaaaaaaaaaaaaagahaiaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabababababababababababababababacacacabababababababaaaaaaaaaaaaadahahahafaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabababababababababababababababababababababababacabababababaaaaaaabagahahahaiabaaaaaaababababababacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaababababababababababababacababababababababababababacacababababababagahahahaiababaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaaaaaaaaaaaaaaaaaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababacacacabababababababababababababababababababagahahahaiababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacabababababababababababacacacacabadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahahaeaeaeaeaeaeaeaeaeaeaeaeafabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaacacacabababababababababababacacababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaacacacabababababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakadaeafaaaaaaadalamakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaacabababababababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahanaoababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakagahaiaaaaaaagahaiakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaacacacaaaaacacabababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakagahahaeaeaeahahaiakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaacacaaaaaaaaaaaaaaabacabababababababagahahahahahahanananahahahahahapahahahahahahahahahahahahahahahahahafababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadajahahahahahahahahahajafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababagahahahahahaoaqaqaqagahahahahanararararararararahahahahahahahahahaiababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqagahahahaiaqaratauauavauawarahahahahahahahahahaiababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaxanahanaoaqarayazauauaAaBarapahahahahahahahahaiabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaqaqaCaqaqaqaraDaEauauaFaGaraHahahahahahahahahaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqadaIanaIaIaKaJaMaLauauaFararaNarahahahahahahahaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaOaqaqaqaqaParaRaQaSaSaUaTaWaVarahanahananananahafabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaXaXaXaXaOaXararararararararararararaYararaXaZaXaXaXaXagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaOaqarbabbbcarbdbearbfauaubgbhbjbiaqaZaqaqaqaqagaiababababacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeaeaeaeananbkblahahahahahananananaeaeaeaeaeaeaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaOaqarbmbnboarbpbqbrbsbubtbtbvbxbwaqaZaqadaeaeahahafababababababababababaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajahahahahahahahaiaqaqaqaqagahahahaiaqaqaqaqagahahahahahahahajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeahahahahahaiaqaqaqaqaOaqarbybzbAararararbBbCauauaubDbwaqaZaqagahahahahaiababababababacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeahahahahahahahahaiaqaqaqaqbEahahahaiaqaqaqaqagahahahahahahahahaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahaiaqaqaqaqaOaqarbFbGbHarbIbJbKbKbLaubMaubObNaqaZaqagahahahahaiababababacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahaiaqadaeaeahahahahahbPalamaqagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahaiaqaqaqaqaOaqarbQbGbRarauauauaubSararbTararaqagaIahahahahahaiababacacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahahaeahahahahahahahahbUahahaeahahahahahahahahahahanaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahaiaqaqaqaqaOaqarbVbGbWaraubXbYbXbSbZcacacbaraqaZaqagahahahahaiababacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahapahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanananahahahahahaiaqaqaqaqaOaqcccdaFauaraubXcebXbScfcacacgaraqaZaqagahahahahaiababacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaOaqchcjciaSckaSclcmclcnbZcacacoaraqaZaqaxananahahaoabababacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahaheNahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaOaqcpcqcrcsarcuctctctcvarcwcxcyaraqaZaqaqaqaqagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahahahahahczcAczcBczcCczahahahahahahahahahahahahahaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaXaXaXaXaOaXarararararcEcDcDcDcFarararararaXaZaXaXaXaXagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahcGcIcHcKcJcLcGahahahahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaOaqaqaqaqagcMahahahahahahaiaqaqaqaqaZaqaqaqaqagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanbkahahahahahahahahahahahahcNcPcOcOcOcQcNahahahahahahahahahahahahananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaxcRcRcRcSahahahahahahahahapcRcRcRcRaoaqaqaqaqagaiababababacababababaaaaaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajahahahahahahahahahaheOczcTcOcOcOcUczePahahahahahahahahahahajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaqaqaqaqaqagahahahahahahahaiaqaqaqaqaqaqaqaqaqagaiababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanananananananahahahahcVcWcOcOcOcXcVahahahahanananananananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaqaqaqaqadahahahahahahahahahafaqaqaqaqaqaqaqaqagaiababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahcYdacZdbdbdccYahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababagahahahahaiaqaqaqaqaqaqaqaqagahahahahahahahahahaiaqaqaqaqaqaqaqaqagaiabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahczdddeczdfdgczahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababagahahahahahafaqaqaqaqaqaqadahahahahahahahahahahahafaqaqaqaqaqaqadahaoabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahaheQahapahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaababababababababababababagahahahahahahaeaeaeaeaeaeahahahahahahahahahahahahahaeaeaeaeaeaeahaoababacababababacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiabababababababacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababagahahahahahahahahahahahapahahahahahahahahahahahahahahahahahahahaiabababababababacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahahahanaoacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaeafababababacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananahahahahahananaoacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahaiaqaqaqaqaqacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababagahahahahahahahahahahahahahahahahahahahahahahanananananananananananaoabababacababababacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaaaaaaaagahahahaiaqaqaqaqaqaqabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaxanananananananananananananahahahahahahahahaiabababababababababababababacacacacababababacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeahahahahahaeaeaeaeaeaeaeaeafabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababagahahahahahahahaiabababababababababababacacacacacacacabababacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagapahahahahahahahahahahahahahahahahahaiabababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababagahahahahahahahaoabacacabababababababacacacacacacacacacababacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabababacaaacaaaaababacacaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababagahahahahahahaiabababacabababababababacacacacabacacacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabababacacacabababacacacaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaxananahahahahaiababababababababababacacacacdiababababacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabababababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLaaeLeLeLeLeLaaeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababagahahahaiababababababababababacacacacabababababacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabacacababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLaaeLeLeLeLeLaaeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababagahahahaiababababababababababacacacdjababababacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaoabdkacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLaaaaaaaaaaaaaaeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaabagahahahaiabababababababababacacacacacacacdldlacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahadaeaeaeaeaeafaiababdmacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaxahahahaoaaaaabababababababacacacacacacacdnacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahagahahahahahaiaiababababacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaagahaiaaaaaaaaaaaaaaaaacacacacacacacacacabacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahagahahahahahaiaiabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaxanaoaaaaaaaaaaaaaaaaacacacacacacacacacabacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahagahahahahahaiaiababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacababacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahagahahahahahaiaiabababababababababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacabababacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabagahahahahahahahahahahagahahahahahaiahaeafababababacababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacabababababacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacabagahahahahahahahahahahdoanananananaoahahaiababababababababababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababagahahahahahahahahahapbUahahahahahahahahahaeafababababababababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababagahahahahahahahahahahahahahahahahahahahahahahaeaeaeaeaeaeafababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaganananananananananananananbkanananananananananananahahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababadaeaeaeaidpdrdqahdpdrdqahdpdrdqagahaidpdrdqahdpdrdqahdpdrdqagahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababagahahahaidpdsdqahdpdsdqahdpdsdqagahaidpdsdqahdpdsdqahdpdsdqagahahaiabaaaaaaaaadaeaeaeaeaeaeaeaeaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMaaaaeMaaaaaaeMaaaaaaaaaaeMaaaaaaeMaaaaeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacabababababababagahahahaidpdsdqahdpdsdqahdpdsdqagahaidpdsdqahdpdsdqahdpdsdqagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMaaaaaaeMeMeMeMeMeMeMaaaaaaeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacababababababaxahahahaidpdsdqahdpdsdqahdpdsdqaganaidpdsdqahdpdsdqahdpdsdqagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMaaaaeMeMeMeMeMeMeMeMeMaaaaeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacabababababagahahaidpdsdqahdpdsdqahdpdsdqaOdtaZdpdsdqahdpdsdqahdpdsdqagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMaaaaeMeMeMeMeMeMeMeMeMaaaaeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacababacacacabababababagahahaiahduahahahduahahahduahdvdudwahduahahahduahahahduahagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabababababacababadaeaeahahahaidxdxdxdxdxdxdxdxdxdxdxdxdydxdxdxdxdxdxdxdxdxdxdxahagahahahaeaeaeaeaeahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacabacacabagahahahahahaiahdzahahahdzahahahdzahdAdBdCahdzahahahdzahahahdzahagahahahanananahanahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacababababagahahahahahaidDdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahahaiaqaqaqaZaqagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacabababaaaddFafaaaddFafaaaddFafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaababagahahahahahaidpdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahahaiaqadaeahaeahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacababacabadapahahaeahahahaeahahahafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaabagahahahahahaidpdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahahaoaqagahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacababababagahahahahahahahahahahahaiaaaaaaaaajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaabagahahahahahaidpdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahaiababagahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacabababacabagahahahahahahahahahahahahaeaeaeaeahafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahaidpdGdqahdpdGdqahdpdGdqagdBaidpdGdpahdpdGdqahdpdGdqagahaoabadahahahahanananananananananananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacababababacacabagahahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahaeaeaeaeaeaeaeaeaeaeaeaedBaeaeaeaeaeaeaeaeaeaeaeaeahaiababagahahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababagahahahahahahahahahahahahahahahahahaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananahahahahahahahahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababadaeaeaeafabagahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaxananananahahahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdHahahahahahaeahahahahahahahahahahahahahahahahahahcRcRcRcRcRcRcRcRajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababagahahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaxanahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahahahahahahahahananandIahahahahahaeaeaeaeaeaeaeaeaeaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababagahahahahahahahahdBahahahahahahahahahahahahbUapaeaeahahahahaoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahaiaaaaakdmbEahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababagahahahahahahahahdBahahahahahahahahahapahahahahahahahahahaiababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahahahahahahahdJaaaaakakaxanananahananajahahahanananananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababacabababbEdKdLdLdLdLdLdLdLdMahahahahahahahahahahbUbkanananananananaoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababagahahahahahahahahahahahahahahaiaaaaaaababaaaaaadNaaaaakagahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacababababababababagdOahahahahahananananahahahahahahahahahaiabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaxahahahahahahahahahahahahahahaiaaaaaaacaaaaaaaaaaaaaaakaxanaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacababababababababagdOahahahahaiabababaqagahahahahahahahahaiabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababadaeaeaeaeaeahdOahahahahahaeaeaeaeahahahahahahahahahaiababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagapahahahanananananananananaoaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababdQdPdPdRdSdLdLdMahahahahahahahahahahahahahahahahahahaiabababacacababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadTanananaoabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababdUdUdWdVdUdXdYanananananananananananananahahahanananananaoababacacacacacabababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababdUdZeaebdUdXdYababababababaqaqaqaqabaqaqagahaiaaaaabababababacacacacacababacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdUeceeedefdXdYababababaqaqaqaqaqaqaqaqaqagahaiaaaaaaaaabababacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdUegeiehejdXdYababaqaqaqaqaqaqadaeaeaeaeahahaiaaaaaaaaaaaaababacababacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdUekemelendXdYababaqaqaqaqaqaqagahahahahahahaiaaaaaaaaaaaaaaabacabacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdUeoeqepdUdXdYabababaqaqaqaqaqagahahahahahahaiaaaaaaaaaaaaaaabababacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdUereserdUdXdYababababaqaqaqaqagahahahahahahaiaaaaaaaaaaaaaaaaabacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaheteuetevdXdYaeaeaeaeaeaeaeaeahahahahahahahahafaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahapexeweweyeAezezezezezezezezezezeBahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahanaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahaeafababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananahahahahahahahahahahahahahahahahahahaheCahahahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajagadaeaeaeaeafahahahahahahahahahahahaheCahahahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagagahahahahaiahahahahahahahahahahahaheCahahahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagagahahahahaiahahahahahahahahahahahaheCahahahananaoabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababagagahahahahaiahahahahahahahahahahahaheCahahaiababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababagagahahahahaiahahahahahahahahahahahaheCahahaiababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagdoananananaoahahahahahahahahahahahaheCahanaoababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaxananananananananananahahahahahahahaheCaiababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbEahahahahahahaheCaiababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababagbUapahahahahaheCaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacabababababababababagapbUahahahahaheCaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababacacdiabeDanananananahaheCaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacababababababaaaaaaacababababababababagaheCaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacabababaaaaaaaaaaaaaaaaaaabababababagaheCaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaheEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadahaheCafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahaheCaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahaheFaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaheGeHeIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananeJaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +eKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/Aurora-MapDev/aurora-7.dmm b/maps/Aurora-MapDev/aurora-7.dmm new file mode 100644 index 00000000000..9b84cc7311d --- /dev/null +++ b/maps/Aurora-MapDev/aurora-7.dmm @@ -0,0 +1,1458 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/simulated/mineral/random/high_chance,/area/space) +"ac" = (/obj/structure/lattice,/turf/space,/area/space) +"ad" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/northeast) +"ae" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/northwest) +"af" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest) +"ag" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest) +"ah" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"ai" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"aj" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"ak" = (/obj/structure/table/woodentable,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"al" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"am" = (/obj/item/weapon/bedsheet/captain,/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"an" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ao" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ap" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aq" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"ar" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"as" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"at" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"au" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"av" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"aw" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/remains/xeno{desc = "A dirty collar around its neck reads 'Chauncey'."},/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"ax" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ay" = (/turf/simulated/wall,/area/derelict/hallway/northeast) +"az" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"aA" = (/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aB" = (/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aC" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"aD" = (/obj/item/weapon/tank/jetpack/oxygen,/obj/structure/table/rack,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"aE" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine,/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"aF" = (/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"aG" = (/obj/random/energy_antag,/obj/item/weapon/card/emag_broken,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"aH" = (/obj/item/weapon/gun/energy/stunrevolver,/turf/space,/area/space) +"aI" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters";req_access = list(20)},/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aJ" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"aK" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"aL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/space,/area/derelict/hallway/northwest) +"aM" = (/obj/machinery/door/airlock/command{id_tag = "captaindoor";name = "Captain's Office";req_access = list(20)},/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aN" = (/obj/item/weapon/material/shard,/turf/space,/area/space) +"aO" = (/obj/structure/table/woodentable,/obj/item/weapon/hand_tele,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aP" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"aR" = (/obj/machinery/artifact,/turf/simulated/floor/asteroid,/area/space) +"aS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/space,/area/derelict/hallway/northwest) +"aT" = (/obj/structure/displaycase,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aU" = (/obj/structure/computerframe{anchored = 1},/obj/machinery/light,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aV" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aW" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aX" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aY" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"aZ" = (/obj/machinery/photocopier,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"ba" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest) +"bb" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"bc" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space) +"bd" = (/turf/simulated/wall,/area/derelict/hallway/northwest) +"be" = (/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bf" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bg" = (/obj/structure/table,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bh" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bi" = (/obj/structure/cryofeed{tag = "icon-cryo_rear (EAST)";icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bj" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bk" = (/obj/structure/bed,/obj/item/weapon/material/shard,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bl" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space) +"bm" = (/obj/structure/lattice,/turf/space,/area/derelict/hallway/northwest) +"bn" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bo" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bp" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bq" = (/obj/machinery/constructable_frame/machine_frame,/obj/structure/window/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"br" = (/obj/structure/door_assembly/door_assembly_com,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bs" = (/obj/structure/target_stake,/obj/structure/grille/broken,/turf/space,/area/space) +"bt" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space) +"bu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) +"bv" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/obj/item/tape/engineering{icon_state = "engineering_v"},/turf/space,/area/space) +"bw" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/obj/structure/lattice,/turf/space,/area/space) +"bx" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/space,/area/space) +"by" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bz" = (/obj/structure/table,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bA" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bB" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bC" = (/obj/item/clothing/ears/earmuffs,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bD" = (/obj/item/weapon/melee/baton,/turf/space,/area/space) +"bE" = (/obj/item/ammo_casing/a145,/turf/space,/area/space) +"bF" = (/turf/simulated/floor/asteroid,/area/space) +"bG" = (/obj/item/tape/engineering{icon_state = "engineering_v"},/obj/structure/lattice,/turf/space,/area/space) +"bH" = (/obj/item/stack/material/cyborg/glass,/turf/space,/area/space) +"bI" = (/obj/structure/computerframe,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest) +"bJ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest) +"bK" = (/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest) +"bL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"bM" = (/obj/machinery/constructable_frame/machine_frame,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"bN" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"bO" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"bP" = (/obj/structure/bed,/obj/structure/window/reinforced,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"bQ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bR" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"bS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"bT" = (/obj/item/ammo_casing/a762,/turf/space,/area/space) +"bU" = (/turf/simulated/floor/airless,/area/space) +"bV" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest) +"bW" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest) +"bX" = (/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"bY" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"bZ" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/ash,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"ca" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"cb" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"cc" = (/obj/machinery/door/airlock/security{icon_state = "door_locked";name = "Insanity Ward";req_access = list(2)},/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"cd" = (/obj/structure/door_assembly/door_assembly_sec,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ce" = (/obj/item/weapon/gun/energy/laser/practice{desc = "This laser gun has been modified in some way.";name = "modified laser gun"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cf" = (/obj/structure/lattice,/obj/item/ammo_casing/a145,/turf/space,/area/space) +"cg" = (/obj/structure/lattice,/turf/simulated/floor/airless,/area/space) +"ch" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ci" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"cj" = (/obj/machinery/door/airlock/freezer{autoclose = 0;icon_state = "door_open";name = "Command Bathroom"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ck" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/ash,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"cl" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/giant_spider/nurse,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"cm" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast) +"cn" = (/obj/item/weapon/gun/projectile/sec/flash,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"co" = (/obj/structure/grille,/turf/space,/area/space) +"cp" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) +"cq" = (/obj/machinery/door/blast/regular,/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/simulated/floor{icon_state = "dark"},/area/derelict/hallway/northwest) +"cr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest) +"cs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"ct" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"cu" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload";req_access = list(16)},/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"cv" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access";req_access = list(16)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"cw" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cx" = (/obj/item/ammo_casing/a145,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cy" = (/obj/random/energy,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"cz" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/space,/area/space) +"cA" = (/obj/structure/closet/crate{name = "Camera Assembly Crate"},/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"cB" = (/obj/structure/girder/reinforced,/turf/space,/area/space) +"cC" = (/obj/structure/closet/secure_closet/hop2,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cD" = (/obj/item/stack/material/wood,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"cE" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"cF" = (/obj/item/stack/material/wood,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cG" = (/obj/structure/table/standard,/turf/simulated/floor/plating,/area/derelict/hallway/northeast) +"cH" = (/turf/simulated/floor/plating,/area/derelict/hallway/northeast) +"cI" = (/obj/structure/bed,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/derelict/hallway/northeast) +"cJ" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space) +"cK" = (/obj/item/ammo_casing/a762,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cL" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"cM" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server";req_access = list(16)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"cN" = (/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cO" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cP" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2";req_access = list(2)},/turf/simulated/floor/plating,/area/derelict/hallway/northeast) +"cQ" = (/obj/item/weapon/material/shard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cR" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"cS" = (/obj/item/weapon/storage/toolbox/electrical,/turf/space,/area/space) +"cT" = (/obj/structure/table/standard,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest) +"cU" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"cV" = (/obj/machinery/door/airlock/highsecurity{autoclose = 0;icon_state = "door_open";name = "Secure Armoury Section";req_access = list(3)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"cW" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"cX" = (/obj/item/tape/engineering{icon_state = "engineering_v"},/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/space,/area/space) +"cY" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"cZ" = (/obj/item/stack/rods,/turf/space,/area/space) +"da" = (/obj/structure/bed,/turf/simulated/floor/plating,/area/derelict/hallway/northeast) +"db" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"dc" = (/obj/item/weapon/gun/energy/laser/practice,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"dd" = (/obj/item/weapon/storage/box/flashbangs,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"de" = (/obj/machinery/power/solar{id = "auxsolareast";name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"df" = (/obj/structure/lattice,/obj/item/weapon/circuitboard/aiupload,/turf/space,/area/space) +"dg" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest) +"dh" = (/obj/structure/grille/broken,/turf/space,/area/space) +"di" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/derelict/hallway/northeast) +"dj" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1";req_access = list(2)},/turf/simulated/floor/plating,/area/derelict/hallway/northeast) +"dk" = (/obj/machinery/constructable_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dl" = (/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dm" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dn" = (/turf/simulated/floor/tiled/airless,/area/space) +"do" = (/obj/item/ammo_casing/c45,/turf/space,/area/space) +"dp" = (/obj/random/projectile,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dq" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dr" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"ds" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dt" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"du" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dv" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dw" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/derelict/hallway/northwest) +"dx" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dy" = (/obj/structure/door_assembly/door_assembly_sec,/turf/space,/area/space) +"dz" = (/obj/item/weapon/folder/blue,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dA" = (/obj/machinery/power/solar{id = "auxsolareast";name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dB" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dC" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/space) +"dD" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/space) +"dE" = (/obj/effect/decal/cleanable/dirt,/turf/space,/area/space) +"dF" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"dG" = (/obj/item/weapon/folder/red,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"dH" = (/obj/structure/table/standard,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dI" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dJ" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dK" = (/obj/item/weapon/folder/blue,/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dL" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dM" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/space,/area/derelict/hallway/northeast) +"dN" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/derelict/hallway/northeast) +"dO" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 1},/turf/space,/area/derelict/hallway/northeast) +"dP" = (/obj/structure/closet/l3closet/security,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"dQ" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dR" = (/turf/space,/area/derelict/hallway/northwest) +"dS" = (/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/derelict/hallway/northeast) +"dU" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"dV" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space) +"dW" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"dX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"dY" = (/obj/structure/lattice,/obj/item/clothing/shoes/magboots,/turf/space,/area/space) +"dZ" = (/obj/structure/lattice,/obj/item/stack/rods,/turf/space,/area/space) +"ea" = (/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eb" = (/obj/structure/cryofeed,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"ec" = (/obj/machinery/constructable_frame/machine_frame,/turf/space,/area/space) +"ed" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ee" = (/obj/item/weapon/stool/padded,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ef" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eg" = (/turf/simulated/wall/r_wall,/area/space) +"eh" = (/obj/item/weapon/folder/red,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ei" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/space) +"ej" = (/obj/item/weapon/pen,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ek" = (/obj/structure/bed,/turf/simulated/floor/airless,/area/space) +"el" = (/obj/structure/lattice,/obj/structure/cryofeed,/turf/simulated/floor/airless,/area/space) +"em" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"en" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eo" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ep" = (/turf/simulated/wall,/area/space) +"eq" = (/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"er" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"es" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"et" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"eu" = (/obj/item/weapon/bedsheet/mime,/turf/space,/area/space) +"ev" = (/obj/structure/bed,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ew" = (/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/broken_bottle,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ex" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ey" = (/obj/structure/table/woodentable,/obj/item/device/radio,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"ez" = (/obj/structure/table/woodentable,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"eA" = (/obj/item/weapon/moneybag,/turf/simulated/floor/airless,/area/space) +"eB" = (/obj/structure/lattice,/obj/item/device/megaphone,/turf/space,/area/space) +"eC" = (/obj/structure/closet/coffin,/turf/simulated/floor/tiled/airless,/area/space) +"eD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest) +"eE" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"eF" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eG" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eH" = (/obj/structure/table/reinforced,/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eI" = (/obj/random/highvalue,/turf/space,/area/space) +"eJ" = (/obj/structure/closet/coffin,/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space) +"eK" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space) +"eL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest) +"eM" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"eN" = (/obj/structure/bed,/turf/space,/area/space) +"eO" = (/obj/structure/closet/secure_closet/warden,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eP" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"eQ" = (/turf/simulated/floor/carpet,/area/derelict/hallway/northeast) +"eR" = (/obj/item/stack/rods,/turf/simulated/floor/carpet,/area/derelict/hallway/northeast) +"eS" = (/obj/item/weapon/book/manual/nuclear,/turf/space,/area/space) +"eT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space) +"eU" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/space) +"eV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest) +"eW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"eX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest) +"eY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"eZ" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fa" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fb" = (/obj/structure/table/standard,/obj/item/device/camera,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fc" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast) +"fe" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ff" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest) +"fh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest) +"fi" = (/obj/machinery/power/solar_control{id = "auxsolareast";name = "Fore Port Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 32;pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fk" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fl" = (/obj/item/weapon/moneybag,/turf/space,/area/space) +"fm" = (/obj/machinery/suit_cycler/medical,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fn" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fo" = (/obj/item/stack/material/cyborg/wood,/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space) +"fp" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fq" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"fr" = (/obj/machinery/shower{icon_state = "shower";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fs" = (/obj/machinery/shower{icon_state = "shower";dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ft" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast) +"fu" = (/obj/item/stack/material/cyborg/wood,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space) +"fv" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fw" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fx" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fy" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fz" = (/obj/item/weapon/extinguisher,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fA" = (/obj/structure/door_assembly,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"fB" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fC" = (/obj/structure/urinal{pixel_y = 32},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fD" = (/obj/item/weapon/bikehorn/rubberducky,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fE" = (/obj/machinery/shower{icon_state = "shower";dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fF" = (/obj/structure/table/standard,/obj/item/weapon/folder/blue,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fG" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast) +"fI" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space) +"fJ" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Fore Port"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fK" = (/obj/machinery/vending/assist,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"fL" = (/obj/machinery/meter,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fM" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fN" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fO" = (/obj/item/weapon/moneybag,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fP" = (/obj/structure/girder/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"fQ" = (/obj/machinery/suit_cycler/engineering,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fR" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fS" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest) +"fU" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"fV" = (/obj/structure/bed,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"fW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE";pixel_y = 0},/turf/simulated/wall/r_wall,/area/derelict/hallway/northwest) +"fX" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"fY" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"fZ" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ga" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gb" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed";locked = 0;name = "Fore Port Solar Access";req_access = list(11)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"gc" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gd" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 32},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"ge" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gf" = (/obj/structure/grille/broken,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space) +"gg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space) +"gh" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gi" = (/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gj" = (/obj/machinery/door/airlock/glass_command{name = "E.V.A.";req_one_access = list(18)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Processing";req_access = list(1)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"gl" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gm" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northeast) +"gn" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"go" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"gp" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gq" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1";dir = 8},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gr" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/clothing/gloves/yellow,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gs" = (/obj/random/highvalue,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gt" = (/obj/item/stack/rods,/obj/structure/bed,/turf/space,/area/space) +"gu" = (/obj/item/weapon/storage/belt/champion,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gv" = (/obj/structure/table/standard,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gw" = (/obj/structure/toilet,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"gx" = (/obj/structure/showcase,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"gy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast) +"gz" = (/obj/item/weapon/gun/energy/taser,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"gA" = (/obj/structure/table,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"gB" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"gC" = (/obj/item/weapon/melee/baton/loaded,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gD" = (/obj/item/weapon/storage/box/flashbangs,/turf/space,/area/space) +"gE" = (/obj/structure/girder,/turf/space,/area/space) +"gF" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gG" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_eng0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gH" = (/obj/structure/table/rack,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gI" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gJ" = (/obj/machinery/suit_cycler/mining,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest) +"gL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gM" = (/obj/item/stack/rods,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"gN" = (/obj/structure/door_assembly,/turf/space,/area/derelict/hallway/northeast) +"gO" = (/obj/structure/closet/secure_closet/brig,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"gP" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"gQ" = (/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gR" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gS" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/clothing/gloves/yellow,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gT" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gU" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gV" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"gW" = (/obj/machinery/door/airlock/vault/bolted,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"gY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/derelict/hallway/northwest) +"gZ" = (/obj/structure/dispenser/oxygen,/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ha" = (/obj/structure/door_assembly/door_assembly_com{icon_state = "door_as_gcom0"},/turf/space,/area/derelict/hallway/northwest) +"hb" = (/obj/structure/toilet{dir = 4;pixel_y = 5},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"hc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/derelict/hallway/northeast) +"hd" = (/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor/airless,/area/space) +"he" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest) +"hf" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/turf/space,/area/space) +"hg" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"hh" = (/obj/item/weapon/book/tome,/turf/simulated/floor/tiled/airless,/area/space) +"hi" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/space) +"hj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) +"hk" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"hl" = (/obj/structure/closet/radiation,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"hm" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"hn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"ho" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prisoner Items";req_access = list(1)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"hp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northeast) +"hq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast) +"hr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast) +"hs" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"ht" = (/obj/item/weapon/book/manual/atmospipes,/turf/simulated/floor/airless,/area/space) +"hu" = (/obj/item/weapon/book/manual/barman_recipes,/turf/simulated/floor/airless,/area/space) +"hv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest) +"hw" = (/obj/item/stack/rods,/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space) +"hx" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/airless,/area/space) +"hy" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest) +"hz" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"hA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest) +"hB" = (/obj/structure/door_assembly/door_assembly_com{icon_state = "door_as_gcom0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"hC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest) +"hD" = (/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"hE" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/weapon/bananapeel,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"hF" = (/obj/item/device/flash,/turf/space,/area/space) +"hG" = (/obj/item/clothing/head/soft/grey,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"hH" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"hI" = (/obj/item/weapon/book/manual/evaguide,/turf/space,/area/space) +"hJ" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"hK" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"hL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/derelict/hallway/northeast) +"hM" = (/obj/structure/bed/chair,/turf/simulated/floor/airless,/area/space) +"hN" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/airless,/area/space) +"hO" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"hP" = (/obj/structure/grille/broken,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"hQ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/airless,/area/space) +"hR" = (/obj/machinery/door/airlock/external{autoclose = 0;icon_state = "door_open"},/turf/simulated/floor/airless,/area/space) +"hS" = (/obj/structure/bed/chair/comfy/brown,/turf/space,/area/space) +"hT" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"hU" = (/obj/structure/bed/chair,/turf/space,/area/space) +"hV" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/airless,/area/space) +"hW" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/airless,/area/space) +"hX" = (/obj/item/clothing/head/soft/grey,/turf/simulated/floor/airless,/area/derelict/hallway/northwest) +"hY" = (/obj/item/clothing/head/chameleon,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"hZ" = (/obj/structure/lattice,/obj/item/clothing/gloves/black,/turf/space,/area/space) +"ia" = (/obj/structure/door_assembly/door_assembly_sec,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ib" = (/obj/structure/lattice,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space) +"ic" = (/obj/structure/toilet,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"id" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ie" = (/obj/item/weapon/book/manual/medical_cloning,/turf/space,/area/space) +"if" = (/obj/item/stack/rods,/turf/simulated/floor/airless,/area/space) +"ig" = (/obj/structure/table/woodentable,/turf/space,/area/space) +"ih" = (/obj/structure/grille/broken,/obj/structure/window/reinforced,/turf/space,/area/space) +"ii" = (/obj/item/clothing/gloves/black,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"ij" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ik" = (/obj/item/weapon/handcuffs,/turf/simulated/floor/airless,/area/derelict/hallway/northeast) +"il" = (/obj/structure/bed/chair{dir = 8},/turf/space,/area/space) +"im" = (/obj/item/stack/material/wood,/turf/simulated/floor/airless,/area/space) +"in" = (/obj/item/clothing/gloves/chameleon,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest) +"io" = (/obj/structure/table/rack,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast) +"ip" = (/obj/machinery/light/small{dir = 8},/turf/space,/area/space) +"iq" = (/obj/structure/bed/chair{dir = 4},/turf/space,/area/space) +"ir" = (/obj/structure/table/standard{name = "plastic table frame"},/turf/space,/area/space) +"is" = (/obj/item/stack/material/cyborg/wood,/turf/space,/area/space) +"it" = (/obj/structure/grille/broken,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"iu" = (/obj/item/stack/material/phoron{amount = 5},/turf/space,/area/space) +"iv" = (/obj/item/weapon/cigbutt,/turf/space,/area/space) +"iw" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/airless,/area/space) +"ix" = (/obj/item/clothing/head/soft/grey,/turf/simulated/floor/airless,/area/space) +"iy" = (/turf/space,/area/derelict/hallway/southwest) +"iz" = (/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iA" = (/turf/simulated/wall,/area/derelict/hallway/southwest) +"iB" = (/obj/machinery/space_heater,/turf/space,/area/space) +"iC" = (/turf/space,/area/derelict/hallway/southeast) +"iD" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/southeast) +"iE" = (/turf/simulated/wall,/area/derelict/hallway/southeast) +"iF" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"iG" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"iH" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"iI" = (/obj/item/weapon/gun/energy/temperature,/turf/space,/area/space) +"iJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/wardrobe/suit,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iK" = (/obj/structure/closet/secure_closet/cargotech,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iL" = (/obj/structure/lattice,/obj/item/weapon/material/shard,/turf/space,/area/space) +"iM" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"iN" = (/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"iO" = (/obj/item/clothing/mask/breath,/turf/space,/area/space) +"iP" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/stack/rods{amount = 50},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iQ" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/cell{maxcharge = 2000},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"iS" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/southwest) +"iT" = (/obj/machinery/r_n_d/destructive_analyzer,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"iU" = (/obj/machinery/door/airlock{autoclose = 0;icon_state = "door_open";name = "Unit 2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iV" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iW" = (/obj/machinery/washing_machine,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iX" = (/obj/machinery/washing_machine,/obj/machinery/light,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"iY" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"iZ" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ja" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"jb" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"jc" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"jd" = (/obj/structure/closet/crate,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"je" = (/obj/structure/lattice,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"jf" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"jg" = (/obj/machinery/light{icon_state = "tube1";dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"jh" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"ji" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/light,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"jj" = (/obj/structure/closet/crate/freezer,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"jk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"jl" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"jm" = (/obj/machinery/conveyor{dir = 1;id = "packageSort1"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"jn" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space) +"jo" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"jp" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"jq" = (/obj/item/stack/material/wood,/turf/space,/area/space) +"jr" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"js" = (/obj/machinery/door/airlock{name = "Unit 3"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"jt" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ju" = (/obj/structure/grille,/turf/space,/area/derelict/hallway/southwest) +"jv" = (/obj/item/weapon/banhammer,/turf/space,/area/derelict/hallway/southwest) +"jw" = (/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"jx" = (/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6)},/turf/simulated/floor{icon_state = "dark"},/area/derelict/hallway/southeast) +"jy" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/item/weapon/pen/red,/obj/item/device/camera{name = "Autopsy Camera";pixel_x = -2;pixel_y = 7},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"jz" = (/obj/structure/sign/greencross,/turf/simulated/wall,/area/derelict/hallway/southeast) +"jA" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"jB" = (/obj/structure/girder,/turf/space,/area/derelict/hallway/southeast) +"jC" = (/obj/machinery/door/airlock/research,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"jD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"jE" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"jF" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"jG" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"jH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"jI" = (/obj/machinery/light{dir = 8},/turf/space,/area/space) +"jJ" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"jK" = (/obj/machinery/chemical_dispenser,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"jL" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"jM" = (/obj/structure/lattice,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/space,/area/space) +"jN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"jO" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"jP" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"jQ" = (/obj/machinery/light/small{tag = "icon-bulb-broken (NORTH)";icon_state = "bulb-broken";dir = 1;base_state = "bulb-broken"},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"jR" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"jS" = (/obj/structure/sink{pixel_y = 26},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"jT" = (/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"jU" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"jV" = (/obj/structure/morgue{icon_state = "morgue1";dir = 2},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"jW" = (/obj/item/weapon/extinguisher,/turf/space,/area/space) +"jX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"jY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'MAIL DELIVERY'.";name = "MAIL DELIVERY"},/turf/simulated/wall,/area/derelict/hallway/southwest) +"jZ" = (/obj/structure/window/reinforced{dir = 8},/obj/item/device/mmi,/obj/structure/table/standard,/obj/item/weapon/bonesetter,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ka" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kb" = (/obj/machinery/door/firedoor{dir = 8;name = "Firelock West"},/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Mailing Room";req_access = list(50)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kc" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"kd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast) +"ke" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"kf" = (/obj/machinery/autolathe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kg" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kh" = (/obj/machinery/door/airlock{name = "Unit 4"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ki" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/item/stack/material/glass/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kj" = (/obj/item/weapon/screwdriver,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kk" = (/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kl" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor";name = "Research Division Access";req_access = list(47)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"km" = (/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 27},/turf/space,/area/space) +"kn" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"ko" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"kp" = (/obj/vehicle/train/cargo/trolley,/turf/space,/area/space) +"kq" = (/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kr" = (/obj/item/weapon/material/shard,/obj/structure/grille/broken,/turf/space,/area/space) +"ks" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space) +"kt" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ku" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"kv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"kw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"kx" = (/obj/item/weapon/storage/belt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ky" = (/obj/item/weapon/circular_saw,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kz" = (/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kA" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kD" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"kE" = (/obj/item/weapon/hemostat,/turf/space,/area/space) +"kF" = (/obj/structure/disposaloutlet{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"kG" = (/obj/machinery/light/small{tag = "icon-bulb-broken (WEST)";icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/device/mass_spectrometer,/obj/item/weapon/autopsy_scanner,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"kH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest) +"kI" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Maintance";req_access = list(12)},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"kJ" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"kK" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kL" = (/obj/machinery/optable{desc = "Used for advanced medical procedures, such as removing brains for cyborgification. Also used to repair unlawed synthetics.";name = "Robotics Operating Table"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kM" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kN" = (/obj/structure/grille/broken,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space) +"kO" = (/obj/mecha/working/ripley/firefighter,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"kP" = (/obj/structure/computerframe,/turf/space,/area/derelict/hallway/southeast) +"kQ" = (/obj/item/device/mmi,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kS" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/hand_labeler,/obj/effect/decal/cleanable/dirt,/turf/space,/area/derelict/hallway/southwest) +"kT" = (/obj/machinery/computer/operating,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kU" = (/obj/structure/closet/emcloset/legacy,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kV" = (/obj/structure/table/standard,/obj/item/clothing/head/soft,/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/clothing/head/soft,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"kW" = (/obj/structure/sign/poster{pixel_x = 0;pixel_y = 0},/turf/simulated/wall,/area/derelict/hallway/southwest) +"kX" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "packageExternal"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"kY" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"kZ" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"la" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance";req_access = list(31)},/obj/machinery/door/firedoor,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"lb" = (/obj/structure/closet/secure_closet/cargotech,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lc" = (/turf/simulated/floor/wood,/area/space) +"ld" = (/obj/machinery/door/airlock/glass_mining{name = "Delivery Office";req_access = list(50)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"le" = (/obj/machinery/photocopier,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lf" = (/obj/machinery/conveyor{dir = 4;id = "packageExternal"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lg" = (/obj/structure/table,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"lh" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"li" = (/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ll" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"lm" = (/obj/machinery/optable,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"ln" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"lo" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lp" = (/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lq" = (/obj/structure/closet/firecloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lr" = (/obj/machinery/conveyor{dir = 4;id = "packageExternal"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ls" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"lt" = (/mob/living/carbon/human/monkey/punpun,/turf/simulated/floor/airless,/area/space) +"lu" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 1},/turf/space,/area/space) +"lv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"lw" = (/obj/item/weapon/material/shard,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)";icon_state = "rwindow";dir = 4},/turf/space,/area/space) +"lx" = (/obj/machinery/door/airlock/glass_research{name = "Robotics Lab";req_access = list(29)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"ly" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lz" = (/obj/item/stack/material/cyborg/wood,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"lA" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"lB" = (/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"lC" = (/obj/structure/closet/emcloset,/obj/structure/extinguisher_cabinet{pixel_x = 5;pixel_y = 30},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lD" = (/obj/structure/door_assembly/door_assembly_mai{icon_state = "door_as_mai0"},/turf/space,/area/space) +"lE" = (/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"lF" = (/obj/structure/door_assembly/door_assembly_ext{icon_state = "door_as_ext0"},/turf/space,/area/space) +"lG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"lH" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"lI" = (/obj/machinery/status_display{density = 0;pixel_x = 0;pixel_y = 32},/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lJ" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{name = "Cargo Bay";req_access = list(31)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lK" = (/obj/machinery/chem_master,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lL" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/derelict/hallway/southeast) +"lM" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lN" = (/obj/structure/sign/greencross{pixel_x = 32},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lO" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"lP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_mining{name = "Delivery Office";req_access = list(50)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lQ" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lR" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor";name = "Research Division Access";req_access = list(47)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"lS" = (/obj/structure/computerframe,/turf/space,/area/space) +"lT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"lU" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lV" = (/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4;pixel_y = -2},/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lW" = (/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/turf/space,/area/space) +"lX" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lY" = (/obj/vehicle/train/cargo/engine,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"lZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"ma" = (/obj/machinery/status_display/supply_display,/turf/simulated/wall,/area/derelict/hallway/southwest) +"mb" = (/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6,5)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"mc" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk";req_access = list(50)},/obj/structure/noticeboard{pixel_y = 27},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"md" = (/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"me" = (/obj/item/stack/material/cyborg/wood,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"mf" = (/obj/item/stack/material/cyborg/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"mg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"mh" = (/obj/item/weapon/stool/padded,/turf/space,/area/space) +"mi" = (/obj/structure/reagent_dispensers/beerkeg,/turf/space,/area/space) +"mj" = (/obj/item/stack/rods,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"mk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast) +"ml" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast) +"mm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"mn" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_gmed0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"mo" = (/obj/item/weapon/cell/super,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"mp" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"mq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/derelict/hallway/southeast) +"mr" = (/obj/machinery/door/airlock/glass_research{name = "Research and Development";req_access = list(7)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ms" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/space) +"mt" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/space,/area/space) +"mu" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mv" = (/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mw" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/firealarm{pixel_y = 27},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southwest) +"my" = (/obj/structure/table/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"mz" = (/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"mA" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"mB" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"mC" = (/obj/structure/girder/reinforced,/turf/space,/area/derelict/hallway/southeast) +"mD" = (/obj/random/firstaid,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"mE" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400;home_destination = "QM #1";suffix = "#1"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"mF" = (/obj/item/device/mmi/digital/posibrain,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"mG" = (/obj/item/weapon/gun/energy/mindflayer,/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"mH" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/stack/material/glass{pixel_x = 3;pixel_y = 3},/obj/item/device/multitool,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mI" = (/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/airless,/area/space) +"mJ" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"mK" = (/obj/machinery/door/airlock/freezer{name = "Kitchen cold room";req_access = list(28)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mL" = (/obj/machinery/disposal,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"mM" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mN" = (/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor";name = "Genetics Laboratory";req_access = list(9)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"mO" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest) +"mQ" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"mR" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"mS" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest) +"mT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/airless,/area/space) +"mU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2";suffix = "#2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"mV" = (/obj/structure/girder,/turf/simulated/wall,/area/derelict/hallway/southeast) +"mW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/space) +"mX" = (/obj/structure/lattice,/turf/space,/area/derelict/hallway/southeast) +"mY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/space,/area/derelict/hallway/southeast) +"mZ" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"na" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{id_tag = "cargodoor";name = "Cargo Office";req_access = list(50)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"nb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"nc" = (/obj/structure/computerframe,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"nd" = (/obj/machinery/door/airlock/external{autoclose = 0;frequency = 1380;icon_state = "door_open";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/turf/simulated/floor/airless,/area/space) +"ne" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"nf" = (/obj/machinery/light_switch{pixel_x = 27},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ng" = (/obj/machinery/autolathe,/obj/machinery/light_switch{pixel_x = -27},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"nh" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ni" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest) +"nj" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "QMLoad"},/turf/simulated/floor/airless,/area/space) +"nk" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"nl" = (/obj/structure/bed/chair/office/dark,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"nm" = (/obj/random/medical,/turf/space,/area/derelict/hallway/southeast) +"nn" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/carbon/human/monkey,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"no" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #3"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"np" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/turf/space,/area/derelict/hallway/southeast) +"nq" = (/turf/simulated/shuttle/plating,/area/derelict/hallway/southeast) +"nr" = (/obj/item/device/paicard,/turf/space,/area/space) +"ns" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space) +"nt" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -28},/obj/machinery/light,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"nu" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"nv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southwest) +"nw" = (/obj/machinery/light/small{icon_state = "bulb-broken";dir = 2;base_state = "bulb-broken"},/turf/space,/area/space) +"nx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) +"ny" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_gmed0"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"nz" = (/obj/structure/lamarr{destroyed = 1;icon_state = "labcageb0";occupied = 0},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"nA" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"nB" = (/obj/structure/window/reinforced,/mob/living/carbon/human/monkey,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"nC" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"nD" = (/obj/machinery/door/window/southright,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"nE" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"nF" = (/obj/structure/door_assembly/door_assembly_mai{icon_state = "door_as_mai0"},/turf/space,/area/derelict/hallway/southeast) +"nG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space) +"nH" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/airless,/area/space) +"nI" = (/obj/structure/closet/crate{icon_state = "crateopen";name = "kitchen crate";opened = 1},/obj/effect/decal/cleanable/greenglow,/obj/item/weapon/reagent_containers/food/snacks/xemeatpie,/obj/item/weapon/reagent_containers/food/snacks/xenoburger,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"nJ" = (/obj/machinery/door/airlock/glass_research{name = "Genetics Lab";req_access = list(47)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"nK" = (/obj/machinery/door/airlock/command{name = "Server Room";req_access = list(30)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"nL" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"nM" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"nN" = (/obj/structure/closet/secure_closet/freezer/kitchen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"nO" = (/obj/machinery/door/firedoor,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"nP" = (/obj/item/clothing/head/collectable/tophat,/turf/space,/area/space) +"nQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"nR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"nS" = (/obj/structure/sink{pixel_y = 26},/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"nT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"nU" = (/obj/machinery/dna_scannernew,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"nV" = (/obj/machinery/computer/scan_consolenew,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"nW" = (/obj/structure/door_assembly/door_assembly_ext{icon_state = "door_as_ext0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"nX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) +"nY" = (/obj/machinery/door/firedoor{dir = 1;name = "Firelock North"},/obj/machinery/door/airlock/mining{id_tag = "cargodoor";name = "Mining Dock";req_access = list(50)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"nZ" = (/obj/structure/door_assembly/door_assembly_com,/turf/simulated/floor/airless,/area/space) +"oa" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/space) +"ob" = (/obj/machinery/disposal,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"oc" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2;pixel_y = -1},/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 24},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"od" = (/obj/item/weapon/mop,/turf/simulated/floor/tiled/airless,/area/space) +"oe" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"of" = (/obj/item/bodybag/cryobag,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"og" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"oh" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oi" = (/obj/item/device/flashlight/pen,/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oj" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"ok" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"ol" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"om" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/device/megaphone,/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"on" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/tiled,/area/derelict/hallway/southeast) +"oo" = (/obj/structure/closet,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"op" = (/obj/structure/noticeboard{pixel_y = -27},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"oq" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest) +"or" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest) +"os" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest) +"ot" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ou" = (/obj/structure/kitchenspike,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ov" = (/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp";pixel_x = 0;pixel_y = 0},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"ow" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"ox" = (/obj/structure/lattice,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/space) +"oy" = (/obj/structure/closet/secure_closet/quartermaster,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"oz" = (/obj/structure/window/reinforced{dir = 5;health = 1e+007},/turf/simulated/floor/tiled/airless,/area/space) +"oA" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oB" = (/obj/structure/closet/wardrobe/genetics_white,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oC" = (/obj/machinery/light_switch{pixel_x = -24;pixel_y = -24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"oD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining{id_tag = "qmdoor";name = "Quartermaster";req_access = list(41)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"oE" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/space,/area/space) +"oF" = (/obj/item/weapon/cane,/turf/space,/area/space) +"oG" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southeast) +"oH" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"oI" = (/obj/structure/girder,/turf/space,/area/derelict/hallway/southwest) +"oJ" = (/obj/structure/table/standard,/obj/item/weapon/dnainjector/h2m,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oK" = (/obj/item/device/flashlight/pen,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oL" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oM" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest) +"oN" = (/turf/simulated/floor/tiled,/area/derelict/hallway/southeast) +"oO" = (/obj/item/clothing/glasses/regular,/turf/space,/area/space) +"oP" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTH)";icon_state = "spline_fancy";dir = 1},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"oQ" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/weapon/material/shard,/turf/space,/area/space) +"oR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oS" = (/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oT" = (/obj/machinery/dna_scannernew,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oU" = (/obj/machinery/computer/cloning,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oV" = (/obj/machinery/clonepod,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oW" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"oX" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oY" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"oZ" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space) +"pa" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southeast) +"pb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast) +"pc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"pd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"pe" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"pf" = (/obj/item/weapon/ore/silver,/obj/item/weapon/ore/silver,/obj/item/weapon/ore/iron,/obj/structure/closet/crate,/turf/space,/area/space) +"pg" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"ph" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"pi" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/airless,/area/space) +"pj" = (/obj/effect/spawner/newbomb/proximity,/turf/simulated/floor/tiled/airless,/area/space) +"pk" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)";icon_state = "spline_fancy";dir = 9},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"pl" = (/obj/item/device/gps/science,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pm" = (/obj/structure/closet/crate/trashcart,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"pn" = (/obj/item/weapon/mop,/obj/effect/landmark/corpse/chef,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"po" = (/obj/machinery/computer/crew,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pp" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/derelict/hallway/southeast) +"pq" = (/obj/item/weapon/dnainjector/runfast,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"pr" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHEAST)";icon_state = "spline_fancy";dir = 5},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"ps" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"pt" = (/obj/structure/mopbucket,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"pu" = (/obj/machinery/light/small{dir = 4;pixel_y = 8},/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"pv" = (/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pw" = (/obj/machinery/constructable_frame/machine_frame,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"px" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"py" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_gmed0"},/obj/machinery/holosign/surgery,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pA" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"pB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"pC" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"pD" = (/obj/item/clothing/glasses/meson,/turf/space,/area/space) +"pE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) +"pF" = (/obj/structure/lattice,/obj/item/weapon/storage/box/cups,/turf/space,/area/space) +"pG" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3;pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/eftpos{eftpos_name = "Quartermaster EFTPOS scanner"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"pH" = (/turf/simulated/floor/tiled/white,/area/space) +"pI" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6;pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4;pixel_y = 7},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest) +"pJ" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pK" = (/obj/structure/lattice,/obj/item/weapon/dnainjector/regenerate,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space) +"pL" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/space) +"pM" = (/obj/structure/table/glass,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 4;desc = "Are you going to make the call?";frequency = 1347;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Red Telephone"},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"pN" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (WEST)";icon_state = "spline_fancy";dir = 8},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"pO" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"pP" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (EAST)";icon_state = "spline_fancy";dir = 4},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"pQ" = (/obj/machinery/light{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"pR" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment";req_access = list(66)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"pS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) +"pT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) +"pU" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)";icon_state = "spline_fancy";dir = 10},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"pV" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHEAST)";icon_state = "spline_fancy";dir = 6},/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"pW" = (/obj/item/weapon/storage/box/cups,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"pX" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pY" = (/obj/machinery/vending/snack,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"pZ" = (/obj/machinery/vending/medical,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qa" = (/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access";req_access = list(7)},/turf/simulated/floor/tiled,/area/derelict/hallway/southeast) +"qb" = (/obj/item/weapon/cane,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"qc" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 0;pixel_y = -32},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"qd" = (/obj/item/clothing/glasses/regular,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qe" = (/obj/structure/table/rack,/obj/item/clothing/accessory/stethoscope,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"qg" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"qh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/turf/simulated/wall,/area/derelict/hallway/southwest) +"qi" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qj" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronmedium"},/turf/space,/area/space) +"qk" = (/obj/structure/window/phoronreinforced{icon_state = "phoronwindow0"},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)";icon_state = "phoronrwindow";dir = 1},/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ql" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronlarge"},/turf/space,/area/derelict/hallway/southeast) +"qm" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille/broken,/turf/space,/area/space) +"qn" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"qo" = (/obj/machinery/door/airlock/glass_medical{name = "Break Room"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/space) +"qq" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/obj/item/weapon/material/shard/phoron{icon_state = "phoronmedium"},/turf/space,/area/space) +"qr" = (/obj/machinery/light{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qs" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/space,/area/space) +"qt" = (/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"qu" = (/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)";icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronwindow0"},/turf/simulated/floor/airless,/area/space) +"qv" = (/obj/item/weapon/bedsheet/orange,/turf/space,/area/space) +"qw" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space) +"qx" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/hypospray,/turf/space,/area/space) +"qy" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qz" = (/obj/item/slime_extract/cerulean,/turf/space,/area/space) +"qA" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"qB" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)";icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)";icon_state = "phoronrwindow";dir = 4},/turf/simulated/floor/airless,/area/space) +"qC" = (/obj/structure/bed/psych,/obj/structure/bed/psych{icon_state = "psychbed_padding"},/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"qD" = (/mob/living/simple_animal/parrot/Poly,/turf/space,/area/space) +"qE" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/space,/area/space) +"qF" = (/obj/machinery/recharge_station,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qG" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qH" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qI" = (/obj/structure/table/standard,/obj/item/weapon/cane,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qJ" = (/obj/structure/table/standard,/obj/item/weapon/cane/concealed,/obj/item/clothing/glasses/regular,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qK" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)";icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)";icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced,/turf/simulated/floor/airless,/area/space) +"qL" = (/obj/item/weapon/surgicaldrill,/turf/space,/area/space) +"qM" = (/obj/item/slime_extract/bluespace,/turf/space,/area/space) +"qN" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronlarge"},/turf/space,/area/space) +"qO" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"qP" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_med0"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"qQ" = (/obj/item/stack/nanopaste,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"qR" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker";req_access = list(64)},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"qS" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/turf/space,/area/space) +"qT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"qU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"qV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest) +"qW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE";pixel_y = 0},/turf/simulated/wall/r_wall,/area/derelict/hallway/southeast) +"qX" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access";req_access = list(11)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"qY" = (/obj/machinery/power/emitter{anchored = 1},/turf/simulated/floor/airless,/area/space) +"qZ" = (/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest) +"ra" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rb" = (/obj/machinery/artifact,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest) +"rc" = (/obj/machinery/light{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rd" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"re" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rf" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rh" = (/obj/structure/closet/bombcloset,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ri" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest) +"rj" = (/obj/item/weapon/material/shard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rk" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rm" = (/obj/item/weapon/circular_saw,/turf/space,/area/space) +"rn" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"ro" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"rp" = (/obj/machinery/power/solar_control{id = "starboardsolar";name = "Aft Starboard Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rq" = (/obj/item/clothing/mask/gas,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"rr" = (/obj/machinery/suit_cycler,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"rs" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest) +"rt" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"ru" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rv" = (/obj/structure/filingcabinet,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"rw" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"rx" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"ry" = (/obj/structure/table/rack,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rz" = (/obj/structure/table/rack,/obj/item/device/flashlight,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rA" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rB" = (/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rD" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"rE" = (/obj/structure/bookcase,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"rF" = (/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rG" = (/obj/item/clothing/glasses/meson,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rH" = (/obj/structure/door_assembly/door_assembly_mai{icon_state = "door_as_mai0"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rI" = (/obj/machinery/portable_atmospherics/powered/pump,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"rK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rL" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"rM" = (/obj/structure/bed/chair,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rN" = (/obj/machinery/space_heater,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast) +"rP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"rQ" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"rR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest) +"rS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast) +"rT" = (/obj/structure/table/rack,/obj/item/weapon/material/shard{icon_state = "small"},/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rU" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rV" = (/obj/machinery/suit_cycler/engineering,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"rW" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast) +"rX" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"rY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"rZ" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"sa" = (/obj/structure/bed/chair/office/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"sb" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sc" = (/obj/structure/closet/emcloset/legacy,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sd" = (/obj/item/clothing/mask/gas,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"se" = (/obj/structure/table/rack,/obj/item/weapon/flamethrower/full,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"sf" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"sg" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"sh" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast) +"si" = (/turf/simulated/floor/plating,/area/derelict/hallway/southeast) +"sj" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/derelict/hallway/southeast) +"sk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"sl" = (/obj/machinery/artifact,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"sm" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sn" = (/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"so" = (/obj/machinery/conveyor{tag = "icon-conveyor-broken (WEST)";icon_state = "conveyor-broken";dir = 8},/turf/space,/area/space) +"sp" = (/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/space,/area/space) +"sq" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_atmo0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"sr" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ss" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"st" = (/obj/machinery/door/airlock/medical{name = "Psychiatric Office"},/turf/simulated/floor{icon_state = "white"},/area/derelict/hallway/southeast) +"su" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/derelict/hallway/southeast) +"sv" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plating,/area/derelict/hallway/southeast) +"sw" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/derelict/hallway/southeast) +"sx" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/space,/area/space) +"sy" = (/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"sz" = (/obj/structure/closet/firecloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"sA" = (/obj/item/weapon/wrench,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"sB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sC" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"sD" = (/obj/item/weapon/stool,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sE" = (/obj/machinery/conveyor{tag = "icon-conveyor-broken (EAST)";icon_state = "conveyor-broken";dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sF" = (/obj/structure/plasticflaps/mining,/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/space,/area/derelict/hallway/southeast) +"sG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast) +"sH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast) +"sI" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_gatmo0"},/turf/space,/area/derelict/hallway/southeast) +"sJ" = (/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"sK" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"sL" = (/obj/machinery/door/airlock/glass_command{name = "Chief Medical Officer"},/turf/simulated/floor{dir = 2;icon_state = "cmo"},/area/derelict/hallway/southeast) +"sM" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sN" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sO" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space) +"sP" = (/obj/structure/bed,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"sQ" = (/obj/machinery/field_generator,/turf/simulated/floor/airless,/area/space) +"sR" = (/obj/structure/grille/broken,/obj/item/stack/rods,/turf/space,/area/space) +"sS" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/airless,/area/space) +"sT" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 2;icon_state = "cmo"},/area/derelict/hallway/southeast) +"sU" = (/obj/machinery/light/small{tag = "icon-bulb-broken (WEST)";icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southeast) +"sW" = (/obj/machinery/door/airlock/atmos,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"sX" = (/mob/living/carbon/slime{colour = "black";icon_state = "black baby slime"},/turf/simulated/floor/reinforced,/area/derelict/hallway/southeast) +"sY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest) +"sZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southwest) +"ta" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southwest) +"tb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"tc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest) +"td" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"te" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/material/shard,/turf/space,/area/derelict/hallway/southeast) +"tf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"tg" = (/obj/structure/table/standard,/obj/item/weapon/gun/launcher/syringe/rapid,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"th" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ti" = (/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"tj" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"tk" = (/obj/structure/table/standard,/turf/simulated/floor/airless,/area/space) +"tl" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"tm" = (/obj/structure/closet/secure_closet/engineering_welding,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"tn" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"to" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"tp" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"tq" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"tr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"ts" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"tt" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"tu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"tv" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"tw" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_med0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"tx" = (/obj/item/weapon/clipboard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ty" = (/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"tz" = (/turf/simulated/floor/reinforced,/area/derelict/hallway/southeast) +"tA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular,/turf/space,/area/derelict/hallway/southeast) +"tB" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"tC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast) +"tD" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"tE" = (/obj/machinery/recharge_station,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"tF" = (/obj/structure/closet/toolcloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"tG" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"tH" = (/obj/structure/lattice,/obj/structure/closet/wardrobe/engineering_yellow,/turf/space,/area/space) +"tI" = (/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"tJ" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"tK" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"tL" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"tM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"tN" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"tO" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication";req_one_access = list(10,24)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"tP" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"tQ" = (/obj/machinery/door/window/westright,/obj/machinery/door/blast/regular,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"tR" = (/obj/machinery/door/window/eastright,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"tS" = (/obj/machinery/door/airlock/maintenance{autoclose = 0;icon_state = "door_open";name = "Drone Fabrication";req_one_access = list(10,24)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"tT" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"tU" = (/obj/machinery/power/solar{id = "starboardsolar";name = "Starboard Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"tV" = (/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"tW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"tX" = (/obj/structure/lattice,/obj/structure/bed,/turf/space,/area/space) +"tY" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_gatmo0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"tZ" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ua" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ub" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"uc" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/space) +"ud" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ue" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uf" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ug" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/paper_bin,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uh" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ui" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"uj" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"uk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"ul" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"um" = (/obj/item/clothing/glasses/hud/health,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"un" = (/obj/machinery/computer/crew,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"uo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille/broken,/turf/space,/area/derelict/hallway/southeast) +"up" = (/obj/machinery/door/airlock/medical{name = "Patient Room 2"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uq" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"ur" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) +"us" = (/obj/structure/lattice,/obj/structure/grille/broken,/turf/space,/area/space) +"ut" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"uu" = (/obj/structure/lattice,/obj/machinery/light/small{tag = "icon-bulb-broken (NORTH)";icon_state = "bulb-broken";dir = 1;base_state = "bulb-broken"},/turf/space,/area/space) +"uv" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uw" = (/obj/machinery/power/solar{id = "starboardsolar";name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ux" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = -32;pixel_y = 0},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uy" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uz" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"uA" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uB" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast) +"uC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE";pixel_y = 0},/turf/simulated/wall/r_wall,/area/derelict/hallway/southwest) +"uD" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uE" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"uF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"uG" = (/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"uH" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"uI" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uJ" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"uK" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uL" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uM" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"uN" = (/obj/machinery/door/airlock/glass_engineering,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"uO" = (/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uP" = (/obj/machinery/smartfridge/secure/extract,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uQ" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uR" = (/obj/machinery/computer/operating{name = "Xenobiology Operating Computer"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"uS" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;layer = 3.3;master_tag = "robotics_solar_airlock";name = "exterior access button";pixel_x = 25;pixel_y = 25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uT" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump";tag_exterior_door = "robotics_solar_outer";frequency = 1379;id_tag = "robotics_solar_airlock";tag_interior_door = "robotics_solar_inner";layer = 3.3;pixel_x = 0;pixel_y = -25;req_access = list(13);tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "robotics_solar_sensor";layer = 3.3;pixel_x = 12;pixel_y = -25},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uU" = (/obj/machinery/door/airlock/external{autoclose = 0;frequency = 1379;icon_state = "door_open";id_tag = "robotics_solar_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uV" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "robotics_solar_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uW" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uX" = (/obj/machinery/door/airlock/engineering{name = "Aft Port Solar Access";req_access = list(11)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uY" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"uZ" = (/obj/machinery/shower{pixel_y = 15},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"va" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) +"vb" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast) +"vc" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) +"vd" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"ve" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"vf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast) +"vg" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"vh" = (/obj/item/weapon/circular_saw,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"vi" = (/obj/item/slime_extract/gold,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"vj" = (/obj/machinery/power/solar_control{id = "portsolar";name = "Aft Port Solar Control";track = 0},/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vk" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest) +"vm" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space) +"vn" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast) +"vo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"vp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"vq" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"vr" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest) +"vt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southwest) +"vu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"vv" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vw" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vx" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virology_airlock_interior";locked = 1;name = "Virology Interior Airlock";req_access = list(39)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"vy" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"vz" = (/obj/structure/lattice,/obj/item/weapon/bedsheet/orange,/turf/space,/area/space) +"vA" = (/obj/item/weapon/soap/nanotrasen,/turf/space,/area/space) +"vB" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/material/shard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast) +"vC" = (/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory";req_access = list(39)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"vD" = (/obj/machinery/door/airlock/maintenance_hatch{autoclose = 0;icon_state = "door_open";name = "SMES Access";req_access = list(11)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest) +"vE" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 9},/area/derelict/hallway/southwest) +"vF" = (/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 1},/area/derelict/hallway/southwest) +"vG" = (/turf/simulated/floor/airless,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 10},/area/derelict/hallway/southwest) +"vH" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 6},/area/derelict/hallway/southwest) +"vI" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 5},/area/derelict/hallway/southwest) +"vJ" = (/turf/simulated/floor/airless,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 6},/area/derelict/hallway/southwest) +"vK" = (/turf/simulated/shuttle/plating,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)";icon_state = "phoronrwindow";dir = 4},/turf/simulated/shuttle/wall{tag = "icon-propulsion (EAST)";icon_state = "propulsion";dir = 4},/area/derelict/hallway/southwest) +"vL" = (/obj/machinery/door/airlock/hatch{autoclose = 0;icon_state = "door_open"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest) +"vM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vN" = (/obj/structure/door_assembly/door_assembly_eng,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast) +"vP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"vQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"vR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"vS" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"vT" = (/obj/machinery/power/emitter{anchored = 1;dir = 8;id = null;state = 2},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vU" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access";req_access = list(11)},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest) +"vV" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vW" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"vX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast) +"vY" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 10},/area/derelict/hallway/southwest) +"vZ" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"wa" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 5},/area/derelict/hallway/southwest) +"wb" = (/obj/structure/window/reinforced{dir = 4},/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast) +"wc" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 9},/area/derelict/hallway/southwest) +"wd" = (/obj/item/weapon/stool/padded{desc = "Apply butt. This particular stool looks tattered and old. Perhaps there have been budget cuts?";name = "Tattered Stool"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest) +"we" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"wf" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wg" = (/obj/machinery/light{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wh" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wi" = (/obj/item/slime_extract/adamantine,/turf/space,/area/space) +"wj" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/space,/area/derelict/hallway/southeast) +"wk" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast) +"wl" = (/obj/machinery/door/window/westleft,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wm" = (/obj/machinery/power/emitter{anchored = 1;dir = 4;state = 2},/turf/simulated/floor/airless,/area/space) +"wo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wp" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wr" = (/obj/machinery/power/rad_collector,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ws" = (/obj/structure/door_assembly/door_assembly_ext{icon_state = "door_as_ext0"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"wt" = (/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"wu" = (/obj/machinery/door/airlock/medical{name = "Quarantine Zone"},/turf/simulated/floor{icon_state = "white"},/area/derelict/hallway/southeast) +"wv" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"ww" = (/obj/machinery/door/blast/regular,/turf/space,/area/derelict/hallway/southwest) +"wx" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/vials,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"wA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast) +"wB" = (/obj/structure/table/standard,/obj/item/weapon/virusdish/random,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wC" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wD" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wE" = (/mob/living/simple_animal/hostile/hivebot,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"wF" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"wI" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast) +"wJ" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wK" = (/obj/machinery/power/smes/buildable,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"wL" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"wM" = (/obj/structure/table/standard,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wN" = (/obj/machinery/constructable_frame/machine_frame,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wO" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wS" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast) +"wT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast) +"wV" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest) +"wW" = (/mob/living/simple_animal/hostile/hivebot/range,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest) +"xa" = (/mob/living/simple_animal/hostile/hivebot/strong,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest) +"xe" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest) +"xf" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"xj" = (/obj/structure/particle_accelerator/end_cap,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"xk" = (/obj/machinery/particle_accelerator/control_box,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"xl" = (/obj/structure/particle_accelerator/fuel_chamber,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"xn" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"xo" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"xp" = (/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/airless,/area/derelict/hallway/southeast) +"xr" = (/obj/machinery/power/rad_collector,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"xs" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest) +"xt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southwest) +"xv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest) +"xw" = (/obj/structure/grille,/turf/space,/area/derelict/hallway/southeast) +"xx" = (/obj/structure/lattice,/obj/item/weapon/wrench,/turf/space,/area/space) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaababaaaaaaaaaaacacaaaaegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeafagahaeafagahaeaeaeacaaaaaaabababababababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiajakalamaeananaGapaqaeacaaaaaaabababaaabababaaaaababababaaaaaaaaaaaabUaaaaacaaaaaaacaaaaacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarapasatauaeavavaoawapaeaaaaaaaaabaaaaaaaaabababaaababaaaaaaaaacaaacaaaadnbUaaaaaaaaaaaaepacepepepegegegegegacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaAaBaCaDaeaEavauapapaiaFaaaaaaaaaaaaaaaaabaRabaaababaaaaaaaaaaaaacacaaegegaaaaaaaaaaaaaaaabUbUepaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaIaeaeaeaeaJaKatasapazaoaaaaacaaaaaaaaaaabababaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaacaaacacaaaaaaaabUaaacaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLapasasasaAapasapasapaMaoaoaaaaaaacaaaaaaaaaaaaaaacacaaacaaaaacabaaacaaaaaaacacaaacaabUaaaaaabUepaaacaaaaaaaaaaaaacacacaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarapapasapaOaPasasasasaQaFaFauaubmaaaaaaaaaaaaaaaaaaacaaacaaaaaaaaaaacaaaaaaaaacaaacaaaaaaaaaaaaepaaegegegegaaaaaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaTaUaVaWaXaAaqaYaZbaaeaaaabbatauauaFaaacaaaaaaaaaaaaaaaaaaaFaaaaaaacayayayayayayayayayayaaaaaaepaabUepaaaaaaacaaacacaaacaabcaaacaaaaaaaaacacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaacaabUaeaeaaaFaobdaaacacaaaabebfbgbhaybibjaxbkaybUacaaaaaaaaaaaaaaacacaaaaaaaaaablblaaacaaacaaacaaacacadadadaaaaacaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaacacacacacaaaaaaaaacacaeaoaoaFaaaaacaaaaaaaabnbgboaybpbqbeaabrbUaaaaepaaaaayaaaabUadadadadadbsbtbuadadaaacaaaaaaaaadadadbeaaaaacaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabvbwbwbwbwbwbxaeaeaeaeaeaeaeaeaeaeaeaeaoaFaFaaacacaaaaaaaabybzbzbraxbeaxbAayaaaaacepacayayadadadadbeacadbBbBbBbBbebCaaacbcadadadadaxbebEbDacaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaacaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaababababababababababbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGbHaaaaaaaaaaaebIbJbIbKbKaebLbLbMbNaeaFaaaaaaaaaaacaaaaaaaabzbnaybAaabeayayadadaaepaabUadadbObPadaaacadbQbRbBbSaaaaaaaaadaaadadadcyaaaaaabTaaaaaaaaaaacacaaaaaaaaaaaaaaacaaaaaaaaaaaabUaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababbFbFaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGaaaaaaaaaaaaaebVbJbKbKbWaebXbXbXbXaebYaaaaacaaacacaaaaaaaaaxaxaybAbUbeaybeaxadaaaaaaaaadbZcacbccaaaxcdcebBbebeacaaaaaaadaaadaxaxbeaaaaaacfcgchbeadacacaaaaaaaaaaaaaabUacacaaaaaaacacdnbUdnaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGaaaaaaaaaaaaaebKcicicibXaecicibXbXaeaoaaacaaacacacaaaaaabebjbjaybAbeaxcjbeaxadacacaaaaadckclcmadaaaxadbQbSacaaacaabBaxadaaadaxcnaaaaacacaaaxaabeadaaaaaaaaaaacdnaaacaadnacaaaaacacacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababababababababababababbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacococpcocoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaabGaaaaaaaaaaaacqbKcrcsctbXcuctctbXbXcvaFaaaaaaaaaaaaacacadadadadadadadadadaxbeadbUacbUaaadadadadadacbeadbBaaaaaaaabScwaxadaaadaxcxbebTaaaaaadobeadadaaaaaaaaaaacbUaaaaaabUaaaaaaaaaaacacdnbUdnacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaacaaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaeaabGaaaaaaaaaaaaaebKcictcibXaecicibXcAcBaoaaacaeaaacaaacaabUcCbecDcEaxcFaxadadbeadbUacayayadcGcHcIadaxbeadbeaacJaabebBbBbBadaaadaxcKbeaabUaadobeaxadadaaaaaaaaaaaadnaaacaadnaaaaaaaaaaaaaabUaabUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpaccLaccpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaeaabGaaaaaaaaaabHaebVbJbJbJbWaeaecMaeaecBaoaFaaaeaaacaaacaaaaaacNcFaxaxcOaxaxadaxadbUacaaaaadcHcHcHcPaaacadaaaaaabSbBaxcQbBadaaadaxaxbebebechaxchdpadadaaaaaaaaaaacacacaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbFbFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocococpcpaaaaaacRaaaaaacpcpcococoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGaaaaaaaaaacSaecTcTcTcTbKaebXbXbXcUaoaFaoaFaeaaacacaaaaaadCaxaxbeaxbebeaaaaaaaaaaacaaaaadadadadadaaaxbeacaaaabBbBaxbBbBadadadadadadcVcVadadadadadadaaaaaaaaaaaaaabUbUaaaaaaaabUdnaaaabUdnaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababbFaabFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaacacaaaaaacWacacaaacacaaaacoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaacXbwbwbwbwbwbxaeaeaeaeaeaeaebXcYbXbXaoaFauaFaaacaaaaaaaaaacZaabecZaaaaaaacaaaaaaaaaabUaaadcGcHdaadaaacacbeaddbbBbBdcadadadaxaxaybBddaxaxbBbBadadadaaaaaaaaaaacacacdndnacacaaaaaabUaaacaabUaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdededededeacaFacdededededeaccpaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaeaaaaaaaaaaaabHaaacaaacaaaadfaebLbNdgbNaeaoauaFaaacacaaacaaaadhdbbeaabcacaaacacaaaaaaaaaaaaadcHdicHdjacacaydkdlbBaxaxbBdmaxaybeacdnbBdXbSbSbeaxadaaaaaaaaaaacacaaacbUbUbUaaaaaaaaacdnaaaadndnacaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaabaaaaaaaaaaabababababbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdrdqdqdqdqdsaFdtdududududvaccpaaaaaaaaaaaaaaaaabababababaaaaaaaabdaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaFaedwaudxaoaaaaaaaaacaabUaxbebeaaaaacaabUaaaaacaabUacaaadayayayaydyaaaxbQbBdzbeaaaxbBbBaxbeacdnaxbeacacbebeadaaaaaaaaacaaacdndndnaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdAdAdAdAdAacaFacdAdAdAdAdAaccpaaaaaaaaaaaaaaaaababababaaaaaaaaaabdbUbUaaacacbUaaaaaeacaaaaauaubbaoauaFaFbbatauauaoaaaaacdDaaaadhdbaxadaaaaacacaaaaaabUaaaaaaaaaddBbQbQbBacaaaybBbeaaacaaaaaxbBaybeaxdndPdPbeaaaabeadaaaaaaaaaaaabUaabUbUbUacaaacacacaaaaaaaabUaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaacaaaaacaFaaaaaaacaaaaaaczaaaaaaaaaaaaaaaaababababaaaaaaaaaabdbUbUbUaaaaacacacacacacbUeUdFatauatataudGauaoaoaFaaaaacaaacaabebeaxaybUaabUacaaaaaaaaaaaaaaaaaddHdIdJayacacayaxaaaaacaaaaaxdKayacaxayayayacayacbeadadaaaaaaaaaaacdnaaaadndnacaaacacacacdndnaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdededededeacaFacdededededeaccpaaaaaaaaaaaaaaabababaaaaaaaaaaaaaabdbdbUbdbdaaaaaaaaaaaaacacaaaoaudLatauaoaoaFaacJacacaaacaaacaaayayayayaaaaaaaaaaaaaaacacaaaaaaaddMdNdOayaxacaybgaaaaaaaaacbSbQayacaabedQbebeaaaabebeadaaaaaaacacacacbUaaacaaacaaaaaaaaaabUaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaacpacdrdqdqdqdqdsaFdtdududududvaccpaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaabdaaaabUbdaaaaaeaebUacaecZaeaebdaFbdaFaoaFaaaaaaaFacacaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaabUaaaaadcOdSaxaxaaaxdTbQbQbSaaaaacbSdmayaxaaaxaxbebeaaaabebeadaaaaaaaaaaacacaadnaadnaaaaacaabUdndndnacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaacpacdAdAdAdAdAacaFacdAdAdAdAdAaccpaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaabdaabUaeaaaaacaabUaoaeaFdUaoaoaadVacaaaaaaaFaaaaaaaaaaayayayaybeayadadaaaaaabeadadadaaadbBdJaxayaaaxdTdWbQbQbSdXbSbBdmayaabeaaaxbeacaabebebeadaaaaaaaaaaaaacaaaaaabUacaaacaaaaacacbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaacaaaaaaaFaaaaaaacaaaaaacoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacaeaaaaaadYaaaaaeaFaoaoaFaaacdZaFaaaFaaaaaaaaaaaaaaaaeaacaxacebbjaxcZacacecebadaaadbBedbQayaaaaayeeefbQbBbBaxbBbBayaaaxbedQaxacaaacbeaxadaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaaaaaegacaaaaaaaaaaaaaaaaaaaacpacdededededeacaFacdededededeaccpaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaepaaacaaaaaaaaaaaaaabUacacaaaeeheoejaFbcacaabbauauaFaaaaacaaaaaaaaaxekcgaxbeaxelacemaxecebadbeadaxenbBayaaaaayadaddhcdcddhadadaybeaxadadadacdZadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepbUaaaaaaaaacaaaaaaaaaaepepaaaacpacdrdqdqdqdqdsaFdtdududududvaccpaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaFacaaaaaaaaaaaaaaaaaaaaaeaFaFaoaoaFaaaaaubbaFbdacaaaaacaaaaaaaaacaceqadadadaxbecZadadadbeadayayayayaabeaxaxcJbeaaaaaabeaxaxaabeadaxbeaaaaacaaaaadacacaaacacacacaaaaaaacacaaaaacacaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacepacacaaaaaaaaaaaaaaaaaabUepaaaaczaadAdAdAdAdAacetacdAdAdAdAdAaacpaaaaaaaaaaaaaaaaaaaaaaaaaabUaaaaegacacaeaeacacaaaaabaaacaaaabUaeeraoaFaoaoehaFatdxaoaaacaaaaacaaaabeaxaaevaaaxbeaaaabebeaxaxadaaadewexexayaaacacacaxaxesacaaaaesaxbeaadhaaaaaaaaacaaaaaacZaaacacaaaaaaaaacaaaaaaaaacacaaaaaaaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepaaaabUepaaaaaaaaaaaaaaaaaaaaaacpaaacaaacacaaaacRaaaaacaaaaacaacpaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaFaFaoaoaeaaaaaaaaaaaaaaacaebdbdbdbdbdbdbdatataaaFacaaaaaaaaaaaabeaaeNeuaxbUaaaaaaaabebeadaabeaxaxaxaxaxaxadadadadadaacJaNacadaxaadbbebeaaaaeBaaaacoaaaaaaaaaaaaacaaacaaacacaaacaaacaaaaacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacepegbUbUepegaaaaacaFbdbdbdaaaaaaaacpcpcpaaaaacaaeDeEeDacacacaccpcpcpaabdbdbdbdaaaaacacbUaaaaaaaaaaaaaaaaaaaFaoaaacaaaaaaaacZcJaaaaacacaaaaaaaFaaaaaoaFaubdaaaaacaaacaaacayacacaaaxeuacacaaaaaaaxadaaadexexexayacaaadeFeGeGeHeGaxlSaaadaaaadbeyaxbeacbeaaaxcoacacaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaacaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacdneKeKdnaaaaaaacaFbbaubdaaaaaaaaacaaaaaaaaacaaeLeMeLacaaacaaaaaaaaaabdaaaaaFaabUaaaaacaaaaaaaaaaacaaaaaFaoaoaaaaaaaaaaaaacacaaaaaaaaaaaaaeaeaeaeaoatauaaaaaaaaaaaaaaaaaaaaeNaaaxbUaaaaaabUacbeadadadayayayayacaaaaaxaxcOeFeObeaaaaaaaaacdbezaxeQeRcZaaaxdhaaaaaaaaacaaaaacaaaaaaacacacaaegacacaaaaacacaaacaaacaaaaaaaaaaaaaaaaaaaaaaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKeTeUaaacaaacacbbbbbdaaaaaaaaaaaaaaaaaaaceVeWeEeXeYaaacaaaaaaaaaabdaFbdaeaaaaaaaaaaacaaaaaaaaaaacacaoaaaoacaaaaaaacacaoaoaaacacaaaaaaacacaoaeaaaaaoaaaaaaacacacaaaaaaacaaeuaxaaaabeaxayayeZadadfadBfbfcfdaxaaaaacaxaxfeffcdaxaaaaaaacadaxemeQbeaaaxePadaaaaaaacaaaaaaacaaaaacaaacaaaaegaaacaaaaacepepepepepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUacaceKeKbUacaaaaacaaaFbdaabdbdeVfgfgfgfgfhbdaefifkfjaebdbdeVfgeYbdbdbdaFaaaeaaaaaaaaaaaaaaeAaaacaaacaaaoaaacacaaaaaaaefmfnfndhaFfpacaaaaaaacaoaeaaaaaaaaacacaaacaaaaaxfqayaabeayayayayayayfrbSfsadbBdJbBbBftaaaaadaabeaxbcbeaxcEaNadaxaxaddbdbdbaxbedbcZadadadacacaaaaaaaaaaacaaegaaaaaaegaaacacacaaepeCeCeCepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaceKeKaaaaaaaaaabbatbdaFaFaaaFaaaaaaaFfvaFaefwfyfxaefzaFaaaaaaaaaaaaaaaFaeaaaeaeaeaaaceIaaaaaaaaacacaFaoaFaFaeaaacacaeaeaeaebbauaobUaaaaaaacaaaaacaabdaaacaaacaaaaaaaxaxeqfAayfBbQfCfCayfrfDfEadbBfFfGbBfHaabeadadacbeadaaaaaaadadbUaaaxacaaaaaxacaaaabeaxadayayaaepaaaaepepepegegaaegegepacaaacepepeJfufoepaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacbUacacaaaaaaaaacaaaubdbdbdbdbdbdbdbdaafLaFaeaFbbfJaebdfNbdbdbdbdbdbdbdbdaeaaaefOaFacacaaaaaaaaaaaaacaaaFbbauaeaFbdfPfQfRfMfTfUauaoacbUaaaaaaaaaaacaabdaaaaacaaaaaafVeqayaxaaayfSbQbBbSfAbebBbBadbBbQfXbBadaaacaxbeaabeacacbebeaxbUacbUaxacacaaaaaaaxaxaaaaacbebeaaepaaaaaabUbUaaacaaaabUepepepepepeTeTfIeKdDaaaaaaaacZaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaegaaaubdauaufZfZbUaabdaaaabdaeaegbfWaefKgafYfYfYfYgcgdgageaeaaaeaoaoaFacaaaacZaaaaacaaaabbatbbaeaaaFaegiataugjaoaoaoacacaaacaNaaacaaaaaaaaacaaaaaaayayayayaxbeeZbSbBayayayayayayadaxbBbBaxgkaaacaxaxaaaaaacZaabeaxbebeaxaaaxadbtgmgfadadadadadaaaaaabUaaepepepepepepbUaaaaaaaabUbUbUggeKeTeKdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaacaaaaaaaaaaaaaaaaababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaFbdatatdxauauacaaaaaaacaFaaaFaFfNghgnglglgngpglgaghgaaeaaaeaoguaoaoaaacaaaeacacaeaFauauaeaeaaaaaeaeaeaeaegvaFaFaoacaaaaaaaaacaaaaaaaaacacacaaaabebebeaxbeaydEbQaygwaygwaygxadaygkayayayaxaxadbeaxdbaddbbegyadacaagzaaaxfdgAbgaxbBgBdmbjbSaaaaaaepaaepdndndnbUaaepbUepaaaaepepepeTbUbUaaaaaacZaaaaaaaaababababaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaabdaubbgCbbbbaaaaaaaaaaacaaaaaabdgqgnghghgagaghgaghgraeaaaegsaoaFaFflaeaNaeaaaeaeaegGaeaeaeaaaaaegHgIgJgKgLaogMaoacaaaaaaaaaaaaaaacacaaaaaaaaayayayayaabeaybebBaygNaygNaygNadgObBgPgPadacaabeaxaxaxgtaxaxaxfdaNgDaabebeftbgaxcObSbQbSaaaaaaaaaaaaaaaabUbUaaaaepdndnepaaaaaaaaaabUbUcgaaaaaaaaaaaabcaaabababababaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaabdgEaaaaaoaabdaaaaaaacaaaaaaaFbdgcgnghgnghgFgagQgagRaeaaaeaeaegWaeaeaeaaaeaabdauataugXatgYaaaaaegZgXatgjaoaFaFaohaacacaaaaaaaaaabdaaaaaaaaaaaaaaayaxbeaxaybBbBbebebUbebeacadgObQbBbQadacaaaabeaxaxaahbaxaxhcbeaabeaxbefHaxbebeaaaaaaaaaaacacepaaaaaaaaaaaaaahdacdnepacaaaaaabUdnacacaaaaaaaacZaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaFaoaaacaaaaaaaaaaaaaaaaaFaaaFaabdgSgagQgUgTfYgVgagQgQaeaaaaaaaihkeLaaaaaaaeaFbdhlgIatgXhlbdaFaaaehmgIatfTaoaoaFaFhnaoaaacaaacaaacaaaaaaaaaaaaaaaaayaxaabeayayayayayayayaybeadgPbBbBbQhobeaaadhpaxhqadhraxhradhphsadaxaxadaxbcaaaaacaaacaabUacbUaahtaaaaaaaaaahuacbUaaacaaaaaaepaabUacaaaaepepaaaaaaaaaaabababaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaFaoaaaaacaaacaaaaaaacbdbdbdbdaFbdhvheeVfgfgfgfgfhhehvaeeXhfdheWaoeXaghyhzaeaFbdbdbdgGbdbdbdbdaafPfPaeaehAhyhBhBafhCaeaeaaaaaaacaaaaaaaaacacaaaaacacacaaaaaaaabeaabehDbeayacadgPbBhEbBadaaaaaddWbQbBbBbBbSbBfdbBbQaacZaxadbQbQaaaaacaaacaaaaaaaaaaaaaaaaaaaaacbUacaaaaacacaaaaacacaaacdnaaaaaaacaaaaaaabababaaaaaaaaaacJaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaacaeauaFaaaaaaaaaaaaaaaahFaaaFaoatbbbbbbauatgIauatauauauatauhGauaoaoatatauatgIgXgXatauaaaaaaaoauauaoaaaFauauaodRaFauauatauauauataoaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaacacaaaaaabeadadadadhoadadadaaaaadhHgobBbeacbebSbSaxbBaxacaabBgobBacaaacbUaaaaaaaaacacaaaabUaahIacaaaaaabUepaaaaaaaaaaaaepbUbUepepacaaaaaaaaaaaaaaacacacaaaaaaaaaacJaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaacacaaaaauaoaaaaaaaaaaabaaaaaaacaaaFataubbauauauatauatauauauatauauauauauathJauatatgIataubbaaacaaaabbdxauaoaFbbaudRdRdRbbbbataubbaoaFacaaacacaaaaaaaaaaaaaaaaacaaaaaaaabUacbehKaabeadaxaaacaxbShLaxacaahgbQbQbSaaaaaaaaaahObBdhacaaadbgaxbeaaaaaaaaaaaaacacbUaaacacaaaaacaabUhhdnepacacaaaaaaacaadnepaaacacacaaaaaaaaaaaaacaaephjhiaaacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaFaaaaacaadwauauaaaaacaaaaaaaaaaaaaaacaaaoauauauatauaaauauauauauauaFaFbcaoaFaoaoauauauauaFaFaaaaaaacaaaoaubbatauatauaFacacaaaaaaaaaaaaacaaaaaaaaacacaaaaacacacacacaaacacacayayaybUaaacadbeaabeaxaaaxbBbBaaaxbQdXbSaaaaaaachLhwcZadbeaaadhTaxaxbeaaaaaaaaaaaaacbUaaaaaaaaaaaaaadndndnepaaacaaaaaaacbUdnaaacaaaaacaaaaaaaaacacacaaaabUhxhfacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaFaodEdEbbaoaubbauaFaFacacaaaaabaaaaaaaabdbdaFbdgYgYgYbdhXaahYbdbdaaaahZaaaFaaaabdaabdaaaaaaacaaaaaaaaaabdbdauauaobdbdaFaaaaacacaaaaacacacacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaybebeaaadaxaxacaabeadiaoxbBdbaxaaaaaaaaaaaaaaicidaabeaxadhTaxaxaxaaaaaaaaaaaaacaaieaaaaacacacaaepaaepepaaaaaaaaaaaabUdnaaaaacacaaacacacacepaaachMbUdnhNhiihacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaauauatauatbbbbaoaaaaacacaaaaaaaaaaaaaaaaaabdiiauauaFaFaaaaaaaaacaaaaaaaaaaacaaaabdbdacacaaaaaaaaaaacbdbdbbataFbdaoaoaFaaaaaaaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaayhDbehKadadaaaaaxaxadbBhPbBaaaaaaacbUaaaaaabBijbBaxbeaxadadadadadikaaaaegaabUacaaaaaaaaaaaaaaaaaaaaaaaaaabUaaacacaaaabUepepacaaacepaaacaaaadnacaabUdnhQhRbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaFaubbauaaaoaoaaaaaaaaaaaaaaaaaaaaaaacaabdauauinauauaoaaaaaaacacaaaaaaaaacaacZaaaaaaaaaaaaaaaaacaaacaaaoauaFbdaoaFaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaybeaaaaadaaaaaaaabUaxbBbBbBadaaaaacaaaaaaaadhbBbQdbaxaaadaxioaxaabehSdnegaaaaaaaaaaaaaaaaaaacaaaaacacacacaaaaaaaaacaabUdndnbUaaepaaaaaaaaaaaaaaaahUhWhVifcJaacZacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaFaaaaaaaaaabUaaaaepepepaaaaepepaaaaacaaaabdaaaFauaudEaohXaaaaaaaaaaaaaaaaaaepaaaaaaaaaaaaepaaaaacaaaaaaaaaoaoaFaoacaaaaaaaaacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaybeacaaaaaaaaaaaaaaaaaaaabeadaabUacaaaaaaaaadadadadaaaaaaaxaxbeaaigaaaaegegaaacacepaaaaaaaaacaaaaaaaaaaacaaaaaaaaacaaaaepdnbUacaaaaaaildnaaaaacaaaaaaaacZaaacaccZacaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacaaacacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaFaabbbbaaacaaaaacaaaaaaaaaaaaaaepacaaaaaaaaacaaacaaaaaaaaaFaaacaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaayaaacaaaaaaaaaaacaaaaaaaaaaaxaaaaaaacaaaaaaaaacaaegaaacaaaaaaaaaaaaacacegaaaaaaaaaaaaaaaaaaaaaaaaaaaaepaaaaaaaaaaaaaaaadndnacacaaacaaaaaaaaaciwaaaaaaacacacaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaixaahZaaaaacacaaaaaaaaacacbUaaaaaaaaaaaaacaaaaaaaaaaaaaaacacacacaaacaaaaacaaaaaaacacaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaacacaaaaaaacaaacaaaaacaaaabUacaaaaacaaaaaaaaacaaacaaacaaaaacaaaaacaaaaacacaaaaaaacaaacbUaaacaabUacbUacaaaaacaaaaaaaaacaaaaaaepaaaaacaaaaacaaaaaaacacaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUepaaaaacacaaaaacbUaaaaacaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaabUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaacaaacaaaaaaacacaaaaaaacacaaaaaaacaaaaaabUegaaaaaaaaaaaaaaacaaegacaaaaaaaaaaaaaaaaacacaaiEiNaaiNacaabUacaaaaiEaaaaaaacacaaaaaaepaaepeKeUaaacaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaabUdnaaaaaaaaacacaaaaimdnepaaacaaaaaaaaacacacacacaaaaiJiAaaaaaaaaaaacaaaaaaaaaaiAaaaaaaaaaaaaabababaaaaaaaaaaaaaadnbUaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacacacaaacaaacacaaaaaaacaaaaacaaegegaaaaaaaaaaegegegegacaaaaaaaciDiDacacaaegegaaaaaaaaaaaaaaaaaaaaaaiEiEiEiEiEiEiEiEiEiEiEaaaaaaaaaaacaaiLepepepdneKbUaaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaacaaaaaadndnbUaaaaaaaaacjqbUdndnepaaacacacaaaaaabUacaaaaaaiziziAaaaaaaaaaaacaciAiPiziHiziQacacaaaaaaaaaaabaaaaacacaaaabUdnaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaacaaaaacaaaaaaaaacaaacacacaaaaaaiNiNiNaaacaaaaaaaaaaaaaaaaaaaaacaaiNiMiNacaaaaacaaaaaaaaaaaaaaaaacaaaaaaiNiGiFiRiRiRiFiFiGaaaaaaacacaaacaaaaacaaaabUeKeKaaacacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegegaaaaaaepepepaaaaepbUaaaaepaaaaaaaaaaepepepaaacaaaaaaiAipiUaciViziWiXiYiAiZaaaaaaaaaaaaaajajbjcizjdaaaaacacaaaaaaaaaaaaacacaaaadnbUaaacacacaaaaaaacaaaaaaacaaaaaaacaaaaaaacacaaacacaaacaaaaacacaaiNiMiMiMiNacaaaaaaaaaaaaaaaaacacaNiNiMiMiNiNaaacaaaaaaaaaaaaabaaaaacacaaiNiMiFiMiFiRjfiRiFiRiGiGiGiGacaaaaacacaaacaabUaabUaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaacacacaaaaaaaaaaaaaaaaaaaabUaaaaaaepaaaaacacaciAiAiAjgjhiAiAiAiAiAiZjiaaaabUaaaaaaaajjaajljaaajmacacacaaaaaaaaaaacaaaabUdnaaaaaaaaacaaaaaaacaaaaaaacaaaaaaaaaaaaacaaaaacaaaaacaaacacaaaaiNiMiMiMiMiNaaacaaaaaaaaaaaajnaaaaaaiMiMiNiMiMiNiNacaaaaaaaaaaaaaaacaaiNiNiMiFiRiFiFiRiRiRiFiRiRjfjfjoiGaacJaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacjqepepaaepepbUepepepepaaaaaaiAjrjsjajtiAjujvjuiAizizaaacacacaaaaaajcjljkiziAjwaaaaacaaaaaaaaacacaaepdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaacaaaaaaacaaiNiDiDiDiDiDiDiDiDaaaaaaaaaaaaaadhihiEjziEiEiEjxiEiEiEjBaaaaaaaaaaaaiEiDjCiDiMiMiDiDjDjEjDiDiDiDiDiFiRjfiFjFiNiNiDiDiDiDaaacaaepepepepepepepepaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaacacacacacaaaaaaaaaaaaaaaaaaaaacacaaiAiAiAjcjkiAiAiAiAiAjGaaaaaaaaaaaaiAjajcaaaaaaiAiAiAizaaaaacachfacaaaaepepaaaaacacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaaaaaaiNiMiDjJjKjLiNiCacaaaaaaabaaaajMiNjNjOjPiEjAjyjSjTjRjQjRiEacaaaaaajWaaiDiFiFiFiRiFiFjXjPjNjUjZkajViDkciFiFiDkdaakeiDkfkgiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacaaaaaaaaaaaaaaacaaaaaaacaaaaiAjrkhjkjkiAkikjkkizaaaaaaaaaaaaizaaaajcaaiziziAjYjcizaaaaiqirkbizizaaaaaaaaaaaaaaaaaaaaaaiskqaaaaaaacaaaaaaaaaaacaaacaaacacaacJaaaaaaiMiMitiNiNaaiuacaaaaaaaaaaaaaaaciNjNjNktiEjTkujTjTjRjTjRiEacacacaaacaaiDiFiGiFkviGiGkwjNkxjNkykzkziDiEkliEiDjNaaaajNjNjNiDaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacacaaaaaaepaaacaaaaaaacaaaaaaacaaaaiAiAiAiAiAiAkBkCkDivjaiAaaaaizaaaaaaaaiAiAiAiAiAiAkFjkizaaizkokHjcjcizaaaaacaaaaacaaaaaakAkJkJizaaaaacaaaaaaacacaaacaaaaaaaaaaaaacacbUiMiMiDacacaaaaaadZaaaaaaaaacacaNiNjNjNkKiEkGjTjTjTjTjTjTkIiNiEaaiBiEaaiDiNkOkPiNaciLaajNkKkQkRkLkTiDkUkKkMiDkKiGiNiIaajNiDaaiNaciEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaepaaaaaaaaacacacaaaaaaaaacaaacaaaaizaaaaizizizaajajaaakVkSkZiKlbaajcjckWleiHiAiAkHaaaaizkXiAiAjcjaaaaaaaacaaaaaalgaaizkAlhkJiAaaaaaaaaaaizacacaaacaaacaaaaaaacdZaabUiMiNjDaaacaaliaaacaacJaaacaaaciNjNljlkkKiElljTlmjTjRjTjRiEiNiEiOaaiEaaiDiNiNaNaaaaacdhlokKlpiEiEiEiDlqkKkYiDiTjpjeaciGkviDaaaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaiSiSiSiSiAiAiAiAiAlaiAjcjkjaizjcjalvjckHiHiHiHldaaiHiHjcjclrlfizaaaaaaacacaaaaaclglzlAlBlsluaaaaaaaaaaaclEaaacaaaaacaaaaaamhacaalwdniNlHiDjIcZlKkziNiNaaacacbcaaaaiNjNlMjNlNiEjTjTjTjTjRlOjRiEiNiEaaaaiEaaiDacaaaaaaaaaaiEjDlxjDiElQlQiDlqkKlyiDlSaaacaaiGjPiDaaaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaacacacacaaaaaaacaaaaaaaadnbUaaaaaaacacaaaaaaaaaaacaaaaaaacacaaaaaaaaaalnlIlCjakmizjcaalXlYjcjkjclJiHiHiHmalGiAiAlPiAiAiAaaaaacacacaaaaaaaalgmdmemfmgizaaacaaaaaaacmgmhacaaaaacmiacacaaaaacaaifiNiMiDmkdhmlmmmnmkiEiNiNiNaaaaaalHjNjNjNjNiEjTjTjTiEiEiEgEaaiEiEiEiEacacacbUaaaaaacJiNjNkKkziNmokziDiDlRmqiDjNiGiNiGkKjPiDaaaaiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaacacacaaacacaaaaaaacaaaaaaaaaaaalTjgizaaaakpknaaaaaajcaajclJiziHizlVlUiAmvjciHmwmxaaaaaaaaacaaaaaaizmymzmgizaaaaacaaaaaaaaacmgaaaaaaaaaaaaacaaaaaacgdDdnmBiMmCiNmBmDjNjNlHiEjNkziEiEaaaciEiEjNkKiEiEiEmbiEiEiEiNiNaaaaaaiNacaaegaaaaaaaabUaciNmFkKiGaaaakziDjNkKjNiDkgkgiGkKiGmGiDiNaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaaaaaaegaaaaaaaaaaaaaakrlZmJaaaaaaizaaaaaaizjajcjckHmLiHiziHmMmcjcjkjcmOmPaaaaaaaaaamQaaiziHmRjcmSaaaaaaaaaaaaaaaaaaizabaaacaaaaaamhacaaacaaksdniNaaiDaciCiGkKkKmpiEjNiNacacaaaaiNjNjNjNkzkKjNkKkKjNiEiEmVmViEiEiEiEaaacaaaaaabUacaakEiNjNjNaaaciNiDiGkKjNiEmYkNaamrnbiDiDiNiEiEacaaaaaaaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacepepaaaaaaaaaaaaaaaaaaaaaaaaaaaadhmtmsmtaaaaaaaaaabUaaaaaanfiAiAngiHiHiHnhnijcjcjciHmuizaaaaaaaaiziHnkiHiAiHizaaacaaaaaaaaacacaaiHbUaaaaaabUbUlcaaacaaaaepbUaaaciDaaacnmjNjNmDiEjNjNiNaaaaacaakzjNaaiGkviGiGjNjNiEiGkviGjonniGiEaciDacaaaaaajnaaaaaabcjNjNiNaaaabciGiGaaaaaaaaaakvkznpiNaaaaaaaaaaacaanqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaamIbUmIaaaaacacacacaaaaaaaaizmEiAmHiHiziznunviHjkjciHmuiHizaaaaiAmKiAiAiAiAjcizaaacaaaaaaaaaaaajajkaaaaacaaltlclcaaaaaaaalcbUacaciDaaiEiNiEnyjBiEjJjNjziEiEaaiNiEiEjzacacaaiEmNiEiEnAnBnCnDnEnAiElDiDiDacaaaaiEacmXiEiEdEdEkzaaaNacacaaacaccJacaajNjNjNaaacaaacaaaaaaaaiEaaaaaalFiEaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaamTaamWaaaaaabUaaaabUaaaaaaaamUaaiziziHiHiHnajcjciHmOmxjcjciziAnLjcnMnNjjiAnOaaaaacaaaaaaacaaaajajcacaanPcZaabUdneplclWaaepaaaaaaaaacaaaanRjNjNjNjNiNiEnSkKkKkKaaacacaaaaacaaiNjNnTnUnVjNjNjNkKiEiFiFiDaaacacaaiGkKjNjNaaaaaaaaacaaaaaaaaacaaiDiDiDiDiDaaacaaaaaaaaacaaiNiMnWiMiMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacepaaaaaaaaaaaaaaaaaaaaaaaaaaaamIaNndaaaaaaacacbUnjaaaaacaanoaaaaaaiziHiHkHiHjciHntmPaajHjcmKjcacjcjkaciAaanOacaaaaaaaaaaaaizjkjkbUaaaaaabUeidnepbUnwecepdnaaaaaaaaaakzkzofjNkzkzaaaaaaiGiGnRaaacbUaaaaaaaciGkKogjNjNohjNoijNojiFiRokaaiNiNaajNkKolaaaaacaaacaaaaaaacaaaNaaaakznzaaiDacaaaaaaaaaaaciNiFiFnqiMiMiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanHaaacaaaaaaaaacaaaaaabUacaaacaaacacaaizopmaoqorosiAiAacaajciAotounIaaaaaaaaaaaaaaaaacacaaaaizjcibaaiLaaacepepepepepepaaepaaaaaaaciEaaiNiEiEiEiEiNaaacaaoxiGkKaaaaacacaaaaacaajNnJjNjNoAjNkzoBiEiFiFiDiDiDiDiDnKiDiDiDiEaciEaaaaaaaaaaacaaacacaakzaaaaacaaaaaaaciEiNiMiEnqiEiEnqiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaabUaaaaaaacaaaaacacacaaacaaaaaaaaaanYiAiAmZncncobiAacaajciAiAiAiAiAaaaciAoHacaaacacaaoIiAoIizacaaacaaaaacaaaaaaacacaaaaaaaaaaaclSiNjNiNkKkKjNaaacaaaaacaajNjNaaaaaaacacaaaajNnToJkKjNoKkzjPiElDiEiDjLkzkziNkzkzeciDacacaaaaaaaaaaaaaaaaaaaaacaaaaiDaaaaaciEiEiEiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaizizocoMnenlneoeiAlvaajkjcjcjcacaaaaacizizaaacacaaaajajcjcaaaaaaacaaoQaaaaaaaaaaacaaaaaaaaacaaiNkzjNjNkKoRoSaaacaaacaaaajNjNjPiEaaaaaaoToUoVogkajNjNkzoWiNiEaaaaiDoXkzkzoYiNiNaaacaaacaaaaaaaaaaaaaaaaaaaaaaoZnraaaaaaiEiNaaaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanxnsnsnGepepegegegegegaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiLaapeaaizpgphomowovnQiAizaaacjkpmpnaajHjkjHaaizaaaaacaaizlvjHjaaaaaacacaajnacaaaaaaaaaaacacaaaaacaciEiEiEiEjNkKiGaaacacaaaajNjNjNpojDaajNppiEiEiEiEiEjNpqiNaaacepacaaiDjLkziNaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaacaaaaiNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXbUbUbUepegegdnozdnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaizaaaaacjcpsnQnQnQnQiAizaajajajcjcptaajkizizaaizaaaaizaajclviHizaaaaacaaacnZepepepepacaaaaaaaaacaaaciNiNiEpvjNpwiNiCacaaaaiGjNpxmpiEiNjNpyjNkzpzkziEiNiCacacacacaaiDiDiDiDaaacacaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaegaaaaaaiDiDiDiNiNiNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoabUbUbUegegdndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaacacpBiAjcjcjkjcjcoDoCneneneiAizaaiziAiAiziAiAizaaaaiziziziAiAiHjkjkiAiAaaaaacaaaabUoddnbUaaacaaaaabaaaaaapFacoEiEiEiEiEpHiNacaaacaaoLiEiEiEkziGppjNjOjOpJiEaaaaacaaaapKaciDacacaaaaaaaaaaaaaaaaaaaaaapkoPpraaaaaaaaaaaaaaaaaaaaaciNiDiEoniEiEiEiEiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepegoaegegdndndndndndndnegegaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaacaapuiApQizjHjkpCiAoooypGpIiAizacaaaaizizaaaaizaaaaaaaaaaaaiAizjciHiAaaaaaaaaaaacaabUdnepepaaaaaaaaaaaaaaaaacpWpXpYjDpZpLqbacacaaaaoFqdqejDjNkKppiEqfqgiNiEaaacacaaacepaaacacaaaNaaaaaaaaaaaaaaaaaaaapNpMpPaaaaaaaaaaaaaaacaaacacaaiDoGoGoNiEaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepegdndndndndndndndndndndnegegaaaaaaaaaaaaaaabaaaaaaaaaaababaaaaaaaaabaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaacaaqniHjcaaaciziHiAiAiAiAiAiAizizacaaaaaaaaaaaaaaaaaaaaaaizizaaiziHiAaaaaaaaaaaaaacaadnepaaaaacacacaaaaaaacaaiNkKkKqokzjNjNaaacaaacoOjNjNpRjNjNiEqriNaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapUqtpVaaaaaaaaaaaaaaaaacacaaaaqaoNpaoGqaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegegdndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaapfqAqhqciHaaaaaaacizizizizizizizizacaaaaaaaaaaaaaaaaaaaaaaiAaaaaiHizaaaaaaqEacepacaaepepaaaaacacaaaaaaacaaiNqFqGkgjDqHkzjNiNacaaacaaqIqJjDkKkKiEqilLacacqLaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaiDoNoGoGiEaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaadhdhpBiAiAqOqOacacaaiAiAiAizacizizacaaaaaaaaaaaaaaaaaaaaaaaaizaaiziHaaaaacaaacbUaabUaaaaaaaaaaaaepacaaaciEiEiEiEiEiEiEiEiNiEiEiEaaacaciEiEiEjNiGqPkzqQaaaaaaaaaaaabUaaaaaaaaaaqjaaacaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaacqkaaiEoniEiEaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndndnegaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaabciAqUqTqViAaaaaiAaaacaaacizaaaaaaaaaaaaaaaaaaaaaaaaaaiAiHaaizaaaaacaaacegegegegegaaaaacacaaaaaaaaaaiNiNiNiNaaaaiNaaaaacbUaaaaaaaaiNiEiNaaiEiNaaacaaaaaaaaacaciEacaaiDacacaaaaiNqlacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaqqaaaaiNiNiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapibUbUbUbUbUbUbUpjozdndndndndnozegaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaabaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqsacacacacacacacacacacacacacacacaaaaacaaaaizaaaaacaaaaaaaaaaaaaaaaaaiziAizaaaciSiSaaaaaaacaaaaacacaaaaaaaaaciDiDiDiDiDiDiDiDiDiDiEacaaacaaaaaaacaciEiEaaaaaaaaaaacaaaajnaciNaaiMiNacnFaaiNiNkzkziNiNacaaaaaaacacaaaaaaaaaaaaaaaaacaaaaquaaaaaaaaaaaaaaaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndndnegaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiAiziziAaaaaaabUizizaaaaaaaaaaiAaaaaaciSiSaaaaaaaaacacaaaaaaaaaaaaaaaciNrcrdiFiFiFiFiFreaaaaaaacaaaaaaaaaaacaaaaacacaaaaaaaaaaaciEiEiEiEaaaciDkzplqykzrhkzkzaaaaacacacaaaaaaacaaaaaaaaaaacacaaqBaaaaaaaaaaaabUaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaacoIiziziAiAiAiAiAiAiAiziziAiAiAiAiHaaaciziHbUacacaaaaaaaaaaaaacaaaaaaacaaiRjfiRiRiFrjrkrlaaaaaaaaaaaaaaabaaaaaaacaaaarmaaaaaaaaiErnroqCiEaaaaiDkzkzrqkzkzkzrriDiDiDiDiDiDacacacaaaaiDiDaaaaacaaqKaaaaqNaaaaaaaaaaaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegegdndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaabUacaaaaaaaaaaaaaaizrtrtiAaaaaaaiziHiHiAizaaacizaaaaacaaaaacacacaaacacaaaaaciNmAiFiFiFiFiFiFiRruaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaiErvrwrxiEaaiNiDiDiDiDiDiDiDiDiDryrzaaaaaaiDiDaciDacacaaaaaaaaacegaaaaaaegaaaaaaiEiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepegdndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaiziAaaaaacaaiziziAaaaaaaiHiziHaaaaaaaaaaaaaaaaacacaciNrAkwiFjfiRiRiFiFrBruaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacbUiEqRrDrEiEaaaaaaaaaaaaaaaaaarFiNaaaarGaaaarHiNaaaaiDaaaaiDiDaaaaacegegegegaaacaaiNiNryiEiEiEiEaaaaaaaaiEiEiEaaaaaaaaaaaaaaaaaaepegoaegegdndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaacacacaabUacbUaaacaaoHoHaaaaiAaaacacaaacaaiAaaaaiHiziHaaaaacaaaaaaaaiNiFiGaaiGkvrIrJiFiRiFiGiNiMiRrKaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaaaciErLrDrwiEiNaarMrMaarNrNryiNaaryiEiErOrPiEiErQkKaarHiNaaaaaaaaaaaaaabUaaacacacpDaaiNaapAiNaapAaaaaaaaaiNiNaaaaaaaaaaaaaaaaaaaaoabUbUbUegegdndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaacbUaaacacaaiAaaaaizizaaaaaaacaaiAiHiziHiSacaaaaacacaaacbUiErTiFrUrViFiMrWiFiRiGiGaaiNiFrXaaaabcaaaaaaaaaaaaaaaaaaacacaaiNkKiGaaiErYrZsaiEaaaaiEiEpOiEiErOpcrPiEiEaaaaaaaaiDiEojiEiDiDaaaaaaaaiDiDaaqjaabUacsbscaaaasdiEiEiEiEaaaaaaaaiEiEiEaaaaaaaaaaaaaaaaaapEbUbUbUepegegdnozdnegegaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaacacaaaaaaaaacaaaaaaacacaaaaoHaaaaiAaaacaaacaaaaiziHaaaaaaacaaaaaaaaaaacaciEseiRiFiFiFmjiNiFiFiNaaaaaaiNcZaaaaaaaaaaaaaaaaaaaaaaaaacacaciNjNkKiNiEsfsgshiEaaiNiEsisisjiEaaaaaaaaaaaaaaaaaaaaaaaNskiDiNaaaaaaqSaaiNaaaaqNaciDiDiDiDqXqWiDaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaapSnsnspTepepegegegegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaacacacaaacacaaaaoHaartiAizacaaaaaaaaiAizaaaaaaaaaaabaaaaacaaacsqiFiFiFiFsracssiGiFiNacaaaccJaaaaaaaaaaaaababaaaaaaiEacaaiEiEiEmniEiEiEstrOrPiEiEaaiEsusvswiEaaaaaaaaaaaaaaaacJaaaaacaaaaaaacaaacaaiNacaaaaaaaciDaaiDiNiGraiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaacoIizrtiAizizizaaaaiziAaaaaaaaaaaaaabaaacaaaaaaiEsysziFsAiNaabUiGiFiNaaacacacsBaaaaaaaaaaababaaaaaaiEaaaajNjNiNiNaaaaiGjNjNjNkzpOaaiEiEiEiEiEaaaaaaaaaaaaaaaaaadhsCaaaaacoZaaacacaaaaacacaaacaciDaaiDsDrgrfiDaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacegegaaaaegepgEaaiziAiAgEaaaaiAiAiAiAiAiAiAiAaaacaaaaaaaaabaaaaaciDiDiDsGiDsHsImAiNiDaaiGiFaaaaacaaiDaaaaaaaaaaaaabaaaaaaiEkzjNjNjNiNaaaaaajNsJjNjNkziEiNiNiEaaaaaaaaaaaaaaaaaaaaaaaaiDiDsKiDiDacacaaaaaaaaaaacacacaciDaaiDrpsmrCiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbUbUaaaaaaaaaaaaaacJizaaaaaaaaaaizaaaaaaiziAaaacaaaaiSaaaaaasosnsxspsEsnsFiFrjaaiNiNacaaiNaaaaaaacaaaaaaaaaaaaaaaaaaaaiDiEjDsLjDiEaaacaaiEiEiEiEiEqPiEiEaaiEaaaaaaaaaaaaaaaaaaaacZaaiDkzkzkziDiNacaaaaaaqjiNkzacacaciDaaiDsVsMpbpdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaiziSiSiSsYsZtatbiStctdiSiSizaaiziAaaaaaaaaaaacaaaciDtetfiDmAiDiDiFiFiFiFiNacacacaaacacacaaaaaaaaaaaaaaaaaaaaiDrxrxrxtgjDcZaathmAtijNtjiEkzkziEiNiEaaaaaaaaiDiDiDiDiDiDiDiDiDiNiNkziDkziNacaciNkzbUkzaatkbUiDaaiDkdsNkdacaaaaaaaaacaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiSaciAiAtmacjctntotpiHiHiSiziziziAaaaaaaiSiSaaaaacaamjiFtqtrsPiDttiRiRiFiNaaacaaaaaaacacaaaaaaabaaaaaaaaaaaaiDtujorwsTiEoWjNjNtwkztxtyiEkzkziEiNiEaaaaaaaaiDtztztztAtBjNjNiEacaakziDiDiDiDiDiDiDiDiDiDiDiDiDaaactCsMtCacaaaaaaaaacaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaadhdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaaaaaaaaciHtEiAacizjkjctGizaaaaacaaaaaaiAaajaiHiSaaacaaactHaadEtIiRiRsWiFiFiRiFiNaaacacaaaaacaaaaaaaaaaaaaaaaaaaaaciDrxtKtLiGtMtNiGjNiEiEiEiEiEsUkziEiNiEaaaaaaaaiDtzsXtztQtRjNaaacaciNiEiDiDaaaaaaaaaaaaaaaaaaaaaaaaacaatlaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaacococodhaaaadhcococodhaadhcocoaaaaaaaaaaaaaaaaacaaqmjcaaaaaatVtWaajHjkjaaaaaaaaaacaaaaaaaaizjkjcizaaacaaaaactXaciNiRiFiDpbtYiNiNaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiCiDiGaaaatsiEuciNudjDueufugiEiNiNiEaaiEaaaaaaaaiDtztztztAuhjNoWaaacaajNkziDaaaaaaaaaaaaacaaaaaaaaaaacaatlaaacacaaaaaaacaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaqpiHaaacacjkuktFjkizaaaaaaaaaaaaaaaaaaaaaajajkjaaaacaaqvaaacaaiNiRiFiDiFiFaNacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDrxkvumunuoacbUiNupjNjNuqiEacaciEiNiEaaaaaaaaiDiEiEiEiEkzjNjNiNiNjNkKjNiDaaaaaaaaaaaaurururusacacacacutacacacacacczururaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDtvtJaatDtvtJaatDtvtJaaaaaaaaaaaaaaaaaaaaaaaaaaacacqwiHizjkjcjctOjcjaiHaaacaaaaaNaaaaaaaaaaacaajcjcaaaaaaaaacacaauzjfiRiDiFiFaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDaaiGqxuBiEcZiNiNiEiEiEiEaaacaabUaciEaaaaaaaaiDtztztztzkzaaiNjNjNjNkKkKiDaaaaaaaaaaaauraaacaaacaaaaaabUaaacacaaaaaaaauraaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDtPtJaatDtPtJaatDtPtJaaaaaaaadhaaaaaaaaaaaaaaaaaaactSiHnkuEjkuEuFizaaaaacacaaacacacacacaaaaaaaciziSaaaaaaaacZcJiNuGuHtTiDuJiRiFaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDiDiDiDiDiDiEqPiEiEiNiNacacaaaaaaaaacaaaaaaaaiDtztztzcJaaacaaqzaaiNkzkKiDiDiDiDaaaaaauraatUtUtUtUtUmXiNmXtUtUtUtUtUaauraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDtPtJaatDtPtJactDtPtJaaaaaaaacoaaaaaaaaaaaaaaaaaaaciSjcjcuMjcnkiAaaaaaaaacZaaaaaaaaaaaaaaacaaaaaaaaizaagEaaiDiDiDiDuNiDiDiFiRiFmAacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaamBaamjpOuOkKjNpOiNiNiNacaaaabUacacaaaaaaaaiDtzacacaaaaaaacacacaaiNjNuPuQuRiDaaaaaauracuatZtZtZtZubiNuiujujujujulacuraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhdhaaaatDtPtJactDtPtJaatDtPtJaaaaaaaaaaaaaaaaaaaaaaaaaciAaaiSiAtctatatbiAaaaaaaaacJaaaaaaaaacaaaaaabcaaaabUiSaaaaacuuuZiDvavbvciDiFiFvdveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdhaavfvgiEjNkKjNiEiEiEiEiEaaaaaaacepaaaaaaaaaaaaacaaacaaaaaaaaacacaavhkKviuviDaaaaaauracuwuwuwuwuwiCiNiCuwuwuwuwuwacuraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcocoaaaatDtPtJactDtPtJaatDtPtJaaaaaaaaaaacacvliSiSiSiSiAiAaaiStEjkjkjcizizaaaaacaaacaaaaaaacaaaaaaaaacaaaaaaaaaaaaaajnaaiDvmvnvciDvopcvpiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiLacaaaaiNiDiEqPiEiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaadEkKkKvqiDaaaaaauraaacaaacacacaaiNaaacaaacaaacaauraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaaaacvracacacvracaaacvracaaaaaaaaaavsvtvuuxuAuyuCiziziziSnkjcjkizizizbUcZaaaaacaaaaaaacaaaaaaaaacaaaaaaaaaavzaavAaciDvavBvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacacaaaaaacJiDjNjNkziNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaiEiEiEiDaaaaaNuraatUtUtUtUtUaciNactUiNiCiCaabcaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaacoaauDuKuIizizizizizizizizizizizuLuKuKuKuSuUuTuUuVuWizuXizizvMiSiSiSiSiSiSvNiSacacaaaaaaaaacacaaaaacacaccZaaaaacaaaNaaiNaciDvavOvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdhvPvQvQvRiDvSkKiNiCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUacaaaaaacJdhaaaaaauracuatZtZtZtZubiNuiujaaaNababcJababaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabababaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaacuYacaaacuYacaaacuYacaaaaaaaaaavsvttdvjiziziSizvVizvWizizizaaizizbUaaaaaaaaaaaaaaaaaacZaaaaaaacaaaaaaaaaaaciDiDiDvavXvcaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaiDkziGiNacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaacaaaakzaaacacaaaaaauracuwuwuwuwuwaaiNacuwiCababababababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcoaaaatDvktJaatDvktJaatDvktJaaaaaaaaaaacacmPiSiSiSiSiAizvZizizdZacaaiAiAaaaaaaaaaaaaaaaaaaaaaaaaaaaacJaaaaaaaaacacqDcZtfvawbvcaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDiNiCacaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaccJkzkzaaacaaaaaaaausaaacaaacaaacaaiNaaaaababababababababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatDvktJactDvktJaatDvktJaaaaaaaaaaaaaaacacaaaaaaiAizacaaaaacacaaaaizizaaaabcacaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaacaacJvOvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDiNacacaaiDiDiDiDiDiDaaaaaaaaababaaaaaaaaaaaaaaaaaaaaacaaaaiEqMacaaaaaaaaaauraatUtUtUtUtUaciNacaNabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaatDvktJaatDvktJaatDvktJaaaaaaaaaaaaaaaaaaacacaavvaacZacacaaacaaaciziziSaaaaacaaaaaaacaaaaaaaaacaaaaaaaaacbcaaaaacacaavOvcaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaiDiDiDiDiDaaaabUiEjPwfwgwhjNiDaaaaaaaaababaaaaaaaawiaaaaaabcacacactziEaaacaaaaaaaaaauracuatZtZtZtZubiNuiaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababbFbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDvktJaatDvktJactDvktJaaaaaaaaaaaaaaaaaaacaaaaiAaacZaaaaaaacaaaciSiSiSaaacacaaaaacacacaaaaaaacacaaaaaaaaaaacaaaawjvawkvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaNaciNjNjNiDiEiEkzkzlHiEjPoRoRwloRiDaaaaaaaaaaabaaaaaaaaaaaaaaaaactzacacbUiEaaacaaaaaaaaaauracuwuwuwuwuwaaiNaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbFbFbFbFababababaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDvwtJaatDvwtJaatDvwtJaaaaaaaaaaaaaaaaacaaaaaciAaaacacaaaaaaaaacaaaciSizaaaaacaaaaaNaaacaaaaaaaaaaaaaaacaaacacaaaaiDuNiDiDiDiDiDiDaaaaaaaaaaaaaaaaaaababababaaaaaaaaacaciGjNiDjNiEiEvxiEiEjPkKoRwowpiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaactzacaaaaiEacaaaaaaaaaaaauraaaaacacacaaaavyacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaababbFbFbFbFbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaaaaaaadhdhdhaaaaaaaaaaaaaaaaaaacacaaaaaaacaaaaaaaaaaaaaaaaacaaaaiSiHizacaacZaaacaaaaaaaaaaaaizaaegacaaaaaaacaaacwriRwswtiNiNpAaaaaaaaaaaaaaaaaababababababaaaaaaaaacaajNwujNjNjNjNjNjNkKoRkKkKjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDaciDacaaaaaaaaaaaaaaurururururaaaaaatlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababbFbFbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcocococococococococoaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaiSiSiSiSiSiSiSiAjccgaaaaaaaaaaaabUiHiSiSaaacacacaaaaaaaaaaaaiNiRiEiDiDiDiDaaaaaaaaaaaaabaaaaabababababaaaaaaaaaaaaiNwujNjNjNjNkKjNkKjNjNjNjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauracwvacuraaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabababaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaaaaaaaaaabaaaaaaaaaaaaiSizacizizizizwwjkjaizizaaaaaaaaaaiziHizaaacaaaaaaaaaaaaaaaaacaaiNiFiDaaaaaaaaaaaaaaabababaaaaababababaaaaaaaaaaacaaiDjPjNjUjPwxwyvCvfwAmmvCiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauraaacaauraaaaababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaabaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacodhaaaaaaababababaaaaaaacaaiSizizizacizizwwjcjcjcjcizaaaaaaiziHizaaacaaaaaaaaaaacacaaaaacacacrBiDaaaaaaaaaaaaaaababaaaaababababababaaaaaaaaaabciDwBkKwCjNpXrJjNwDrJwDjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaurururururaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcodhaaaaaaababaaaaaaaaacaciSacwEizacaawFiSiSiSvDiSizaaiziSiSiSiziSacaaaaabaaaaqYacaaaaaaaaacwIiDaaaaaaaaaaaaaaaaabaaaaaaabababababaaaaaaaciNaaiDwJkKjNjNpXrJjNkKrJjNjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocodhdhaaaaaaaaaaaaaaaaaciSizizizaaaciziSmQizqZiziziSizwKizqZqZizacacaaaaaaacacaaaaaacJaaiNiFwLaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaciNjNiNiDwMjPjNjNwNogkawOrJjPwOiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaaaaaaavEvFvFvFvFvGizizizwEiSwKizqZizmQiSizizizqZqZizizizacacaaaaacacaaaaaaaciNiFnWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJaaaaiDiDwSjNpXiDiDwTiDiDiDwTiDaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvHrbwWvIvFvJwEaciziziSwKizqZizmQiSqZqZqZqZqZqZqZqZacaaaaacaaaaacacaaacacmjpAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDvfmlmmiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavKxawVwVwVvLizizizizvTiSiSiSvUiSiSiSqZiStctbxetctbiSiSaaaaaaiDxfiDiDaaaciDiDiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawavYwWwVwcvFvGizacaaizriqZizqZqZqZqZaaiSrsrsrsrsrRiSiSiSabaaacaaaaiNrSiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawavFvFvFvFvJslaaizizriizaaaaaaaaqZqZxerRrRxjrsrsriqZizaaaaaaacacaarSiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciSiSiSiSiSiSiSiSiyacaaqZizqZqZiSrsxkxlrsqZiSiziyaaaaaaacacwsiEiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaiSacaciSwwwwwwwwiSrswdxnqZiziSaaacaNacaaxoiDxpweiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciSaciyiSvMxrxrxrtWrRxsmQmQizxtaaaaaaacsOiDiDiNiNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaacaaaciyiSiStctaxtxvrsrsizizacdZacacaaacaaaaiDpAiDiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaabababaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaegaaaaaaaciSaaaaaasYsZtatataxtacaaaaaaaabcaciNaaaaxwiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaabababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaegegacbUacaaaaaaaaacaaaaaaaaaaacaacZaacZaaaaacaaaaxwiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaacacacaaaaacacacacacacaaacacacaaaaaaaaaabUxxdZaaiDaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaabaaaaaaababaaaaaaaaaaaaaaaaaaaaabababababababababaaaaabaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbUwmaaacacacsQaaaaaaaaiLaaacaaaNaaaaaaaaaaaaaciDaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaabaaaaaaababababababaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaegaabUbUaaacacacacaaaaaaaaaacZaaaaaaaaaaabaaaaacsRiDaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaegaaaaaaaaaaacacacaaacacacacacaaaaaaaaaaaaaadZaaiDiDaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbFababababababababababababababaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaegbUacaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaacaaiDiDaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFabababababbFabababababababababababababababaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaegaaacacaaaaaaaaacaaacaasSaaaaacaaaaaaaaaaaaaaaacZiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFabbFbFabababbFbFbFababbFbFbFabababababababababaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaacacaaaaacaaacaaacaaaaaaaaacaaaaaaaaaaaaaaaaaaiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFababababababbFbFbFbFabbFbFbFabababababababababaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaegegacaaacbUacacacacaaacacacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFababababababbFbFbFabbFbFbFbFbFababababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaegaaacaaacbUwmacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababbFbFbFababababababbFbFbFbFabbFbFbFbFabababababababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaegaaacacegaaaaaaaasQacacsQaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababbFbFabababababababbFbFbFabababbFbFabababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaegaaaaacegaaaaaaaaacacacacacaaaaaaaaaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababbFbFbFbFababababababababababababababbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUaaacacacaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababbFbFbFbFbFbFbFbFabababababababababababababbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaabaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFbFababababbFbFababababababababababababbFbFabababababababaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFabababababababbFbFbFabababababababababbFbFbFababababaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFabababababababbFbFbFbFbFbFababababababbFbFababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFbFababababababbFbFbFbFababababababbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaabFababababbFbFababababababababbFbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaababababbFbFbFbFbFabababbFbFbFbFbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababbFbFabbFbFbFbFabbFbFbFbFababababaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFababbFbFbFbFbFbFababababaaaaabaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababbFbFbFbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaabababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababbFbFbFbFbFabbFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFabababbFaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababbFbFbFababababababaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaabababababababbFbFbFbFbFbFababababababaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababbFbFbFbFababababaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaabaaaaaaaaababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababbFbFbFbFababababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaabaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaababababaaaaabaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaabaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaababaaaaaaaaabaaaaababababababaaaaaaaaababaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaabaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaababababaaaaaaaaabaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaabababababaaaaaaababaaaaabaaaaaaaaaaababababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaabababababaaababababaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/Aurora-MapDev/aurora-8.dmm b/maps/Aurora-MapDev/aurora-8.dmm new file mode 100644 index 00000000000..25a83f2dc95 --- /dev/null +++ b/maps/Aurora-MapDev/aurora-8.dmm @@ -0,0 +1,259 @@ +"a" = (/turf/space,/area/space) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/nano/images/Aurora-3.png b/nano/images/Aurora-3.png new file mode 100644 index 00000000000..b420e6ca470 Binary files /dev/null and b/nano/images/Aurora-3.png differ diff --git a/nano/images/Aurora-4.png b/nano/images/Aurora-4.png new file mode 100644 index 00000000000..debe76a4c0f Binary files /dev/null and b/nano/images/Aurora-4.png differ diff --git a/nano/images/Aurora-6.png b/nano/images/Aurora-6.png new file mode 100644 index 00000000000..2b05e54d6b0 Binary files /dev/null and b/nano/images/Aurora-6.png differ diff --git a/nano/js/nano_base_callbacks.js b/nano/js/nano_base_callbacks.js index fb5a86ee3db..889c6a80424 100644 --- a/nano/js/nano_base_callbacks.js +++ b/nano/js/nano_base_callbacks.js @@ -87,8 +87,8 @@ NanoBaseCallbacks = function () marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px' }); }); - - $('#uiMapImage').attr('src', 'nanomap_z' + updateData['config']['mapZLevel'] + '.png'); + + $('#uiMapImage').attr('src', updateData['config']['mapName'] + '-' + updateData['config']['mapZLevel'] + '.png'); return updateData; } diff --git a/nano/templates/crew_monitor.tmpl b/nano/templates/crew_monitor.tmpl index cd3a0146524..4bbf18c0656 100644 --- a/nano/templates/crew_monitor.tmpl +++ b/nano/templates/crew_monitor.tmpl @@ -1,30 +1,32 @@ - - - -{{:helper.link('Show Tracker Map', 'pin-s', {'showMap' : 1})}} - - {{for data.crewmembers}} - {{if value.sensor_type == 1}} - {{if data.isAI}}{{/if}} - {{else value.sensor_type == 2}} - {{if data.isAI}}{{/if}} - {{else value.sensor_type == 3}} - {{if data.isAI}}{{/if}} - {{/if}} - {{/for}} -
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}}Not Available{{:helper.link('Track', null, {}, 'disabled')}}
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}} ({{:value.oxy}}/{{:value.tox}}/{{:value.fire}}/{{:value.brute}})Not Available{{:helper.link('Track', null, {}, 'disabled')}}
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}} ({{:value.oxy}}/{{:value.tox}}/{{:value.fire}}/{{:value.brute}}){{:value.area}}({{:value.x}}, {{:value.y}}){{:helper.link('Track', null, {'track' : value.ref})}}
+ + + +{{:helper.link('Show Tracker Map', 'pin-s', {'showMap' : 1})}} + + {{for data.crewmembers}} + {{if value.sensor_type == 1}} + {{if data.isAI}}{{/if}} + {{else value.sensor_type == 2}} + {{if data.isAI}}{{/if}} + {{else value.sensor_type == 3}} + {{if data.isAI}}{{/if}} + {{/if}} + {{empty}} + " Unable to establish a connection to telecommunications!" + {{/for}} +
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}}Not Available{{:helper.link('Track', null, {}, 'disabled')}}
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}} ({{:value.oxy}}/{{:value.tox}}/{{:value.fire}}/{{:value.brute}})Not Available{{:helper.link('Track', null, {}, 'disabled')}}
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}} ({{:value.oxy}}/{{:value.tox}}/{{:value.fire}}/{{:value.brute}}){{:value.area}}({{:value.x}}, {{:value.y}}, {{:value.z}}){{:helper.link('Track', null, {'track' : value.ref})}}
\ No newline at end of file diff --git a/nano/templates/crew_monitor_map_header.tmpl b/nano/templates/crew_monitor_map_header.tmpl index f9f5e2f707d..d997087bbf6 100644 --- a/nano/templates/crew_monitor_map_header.tmpl +++ b/nano/templates/crew_monitor_map_header.tmpl @@ -3,6 +3,13 @@ Title: Crew Monitoring Console (Map header) Used In File(s): \code\game\machinery\computer\crew.dm --> {{:helper.link('Show Detail List', 'script', {'showMap' : 0})}} +{{:helper.link('Hide Map', 'close', {'showMap' : 0})}} +
+ Z Level:  + {{for config.mapZLevels :zValue:zIndex}} + {{:helper.link(zValue, 'close', {'mapZLevel' : zValue}, null, config.mapZLevel == zValue ? 'selected' : null)}} + {{/for}} +
Zoom Level:  diff --git a/nano/templates/crushercontrol.tmpl b/nano/templates/crushercontrol.tmpl new file mode 100644 index 00000000000..480f37bd2e4 --- /dev/null +++ b/nano/templates/crushercontrol.tmpl @@ -0,0 +1,84 @@ +

Crusher Management

+{{if data.piston_count == 0}} +
+
+ Intialize Crusher: +
+
+ {{:helper.link('Initialize', 'refresh', { 'initialize' : '1' })}} +
+
+{{/if}} +{{if data.airlock_count > 0}} +
+
+ Airlock Control: +
+
+ {{:helper.link('Open', 'refresh', { 'hatch_open' : '1' })}} + {{:helper.link('Close', 'refresh', { 'hatch_close' : '1' })}} +
+
+{{/if}} +{{if data.piston_count > 0}} +
+
+ Activate: +
+
+ {{if data.extending == 1}} + {{:helper.link('Start', 'alert', { 'crush' : '1' }, 'active')}} + {{:helper.link('Abort', 'alert', { 'abort' : '1' })}} + {{else}} + {{:helper.link('Start', 'alert', { 'crush' : '1' })}} + {{:helper.link('Abort', 'alert', { 'abort' : '1' }, 'disabled')}} + {{/if}} +
+
+{{/if}} + +

Crusher Monitoring

+
+
+ Linked Pistons: +
+
+ {{:data.piston_count}} +
+
+{{if data.piston_count > 0}} + + {{for data.status_pistons}} + + + {{if value.blocked == 0}} + {{if value.action == "extend"}} + + {{else}} + + {{/if}} + {{else}} + + {{/if}} + + {{/for}} +
Piston {{:value.piston}}{{:helper.displayBar(value.progress, 0, 100, 'good')}}{{:helper.displayBar(value.progress, 0, 100, 'average')}}{{:helper.displayBar(value.progress, 0, 100, 'bad')}}
+{{/if}} +
+
+ Linked Airlocks: +
+
+ {{:data.airlock_count}} +
+
+{{if data.message }} +
+
+ Message: +
+
+ {{:data.message}}{{:helper.link('', 'close', { 'close' : '1' })}} +
+
+{{/if}} diff --git a/nano/templates/layout_default.tmpl b/nano/templates/layout_default.tmpl index 53701e30307..766fc39dac8 100644 --- a/nano/templates/layout_default.tmpl +++ b/nano/templates/layout_default.tmpl @@ -39,6 +39,13 @@